私はラムダ関数を作成する方法について基本的なAWSを通過しています:
この例では、画像のサイズ変更サービスを作成しています。トリガーする1つの方法は、S3バケットにプッシュされる画像をリッスンしてから、ラムダ関数が実行されることです。
しかし、私は私のnodejsアプリからこのラムダ関数を呼び出す方法を理解しようとしています、ユーザーがノードサーバーに画像を送信するとき、REST API経由でawsラムダにこの画像を送信しますサイズを変更し、新しい画像の場所を応答として受け取ります。
私が従えるような例はありますか?ラムダサービスがすでに稼働しているので、実際の呼び出し部分にもっと興味があります。
ありがとう
Node.jsサーバーを使用しているため、AWS JavaScript SDK( https://www.npmjs.com/package/aws-sdk )でラムダを直接呼び出すことができます。これにより、API Gatewayの使用について心配する必要がなくなります。
サーバーからの呼び出しは次のように簡単です。
var AWS = require('aws-sdk');
// you shouldn't hardcode your keys in production! See http://docs.aws.Amazon.com/AWSJavaScriptSDK/guide/node-configuring.html
AWS.config.update({accessKeyId: 'akid', secretAccessKey: 'secret'});
var lambda = new AWS.Lambda();
var params = {
FunctionName: 'myImageProcessingLambdaFn', /* required */
Payload: PAYLOAD_AS_A_STRING
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
SDKドキュメントの残りの部分をここで参照してください: http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
これが、最新のJavaScriptにとってより理想的な答えです。
import AWS from 'aws-sdk';
const invokeLambda = (lambda, params) => new Promise((resolve, reject) => {
lambda.invoke(params, (error, data) => {
if (error) {
reject(error);
} else {
resolve(data);
}
});
});
const main = async () => {
// You shouldn't hard-code your keys in production!
// http://docs.aws.Amazon.com/AWSJavaScriptSDK/guide/node-configuring.html
AWS.config.update({
accessKeyId: 'AWSAccessKeyId',
secretAccessKey: 'AWSAccessKeySecret',
region: 'eu-west-1',
});
const lambda = new AWS.Lambda();
const params = {
FunctionName: 'my-lambda-function',
Payload: JSON.stringify({
'x': 1,
'y': 2,
'z': 3,
}),
};
const result = await invokeLambda(lambda, params);
console.log('Success!');
console.log(result);
};
main().catch(error => console.error(error));