web-dev-qa-db-ja.com

ノードアプリからAmazon Lambda関数を呼び出す

私はラムダ関数を作成する方法について基本的なAWSを通過しています:

http://docs.aws.Amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function-create-function.html

この例では、画像のサイズ変更サービスを作成しています。トリガーする1つの方法は、S3バケットにプッシュされる画像をリッスンしてから、ラムダ関数が実行されることです。

しかし、私は私のnodejsアプリからこのラムダ関数を呼び出す方法を理解しようとしています、ユーザーがノードサーバーに画像を送信するとき、REST API経由でawsラムダにこの画像を送信しますサイズを変更し、新しい画像の場所を応答として受け取ります。

私が従えるような例はありますか?ラムダサービスがすでに稼働しているので、実際の呼び出し部分にもっと興味があります。

ありがとう

20
inside

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

35
Ryan

これが、最新の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));
9
sdgfsdh