1. ホーム
  2. node.js

[解決済み] Nodejs - AWS.Lambda関数を別のLambda関数から呼び出す

2023-02-03 08:09:59

質問

以下のような関数があり、自分のコードからLambda関数を呼び出すのに使用しています。

しかし、これをLambda関数内で使おうとすると、以下のエラーが発生します。

AWS lambda undefined 0.27s 3 retries] invoke({ FunctionName: 'my-function-name',
  InvocationType: 'RequestResponse',
  LogType: 'Tail',
  Payload: <Buffer > })

Lambda関数の中からLambda関数を呼び出すには?

私の関数です。

'use strict';

var AWS = require("aws-sdk");

var lambda = new AWS.Lambda({
    apiVersion: '2015-03-31',
    endpoint: 'https://lambda.' + process.env.DYNAMODB_REGION + '.amazonaws.com',
    logger: console
});

var lambdaHandler = {};

// @var payload - type:string
// @var functionName - type:string
lambdaHandler.invokeFunction = function (payload, functionName, callback) {

    var params = {
        FunctionName: functionName, /* required */
        InvocationType: "RequestResponse",
        LogType: "Tail",
        Payload: new Buffer(payload, 'utf8')
    };

    var lambdaRequestObj = lambda.invoke(params);

    lambdaRequestObj.on('success', function(response) {
        console.log(response.data);
    });

    lambdaRequestObj.on('error', function(response) {
        console.log(response.error.message);
    });

    lambdaRequestObj.on('complete', function(response) {
        console.log('Complete');
    });

    lambdaRequestObj.send();

    callback();
};

module.exports = lambdaHandler;

どのように解決するのですか?

Lambda Functionを別のLambda Functionの中から呼び出すのは、非常に簡単です。 aws-sdk を使えば簡単です。

私は何かから始めることをお勧めします 簡単なもの から始めることをお勧めします。

これはラムダ内呼び出しの"Hello World"です。

Lambda_A を呼び出す Lambda_B を呼び出します。 Payload を含む、単一のパラメータ name:'Alex' .

Lambda_B はペイロードで応答します。 "Hello Alex" .

<イグ

最初に作成する Lambda_B これは name プロパティ の上に event パラメータ

でリクエストに応答し "Hello "+event.name :

ラムダ_B

exports.handler = function(event, context) {
  console.log('Lambda B Received event:', JSON.stringify(event, null, 2));
  context.succeed('Hello ' + event.name);
};

を与えることを確認します。 Lambda_BLambda_A は同じ役割を果たします。

例: という名前のロールを作成します。 lambdaexecute というロールを作成し、そこに AWSLambdaRole , AWSLambdaExecute AWSLambdaBasicExecutionRole ( すべて必須 ):

ラムダ_A

var AWS = require('aws-sdk');
AWS.config.region = 'eu-west-1';
var lambda = new AWS.Lambda();

exports.handler = function(event, context) {
  var params = {
    FunctionName: 'Lambda_B', // the lambda function we are going to invoke
    InvocationType: 'RequestResponse',
    LogType: 'Tail',
    Payload: '{ "name" : "Alex" }'
  };

  lambda.invoke(params, function(err, data) {
    if (err) {
      context.fail(err);
    } else {
      context.succeed('Lambda_B said '+ data.Payload);
    }
  })
};

これらのLambda関数を両方とも保存したら、Testを実行します。 Lambda_A :

<イグ

を用意したら 基本的な intra-lambdda invocationが動作するようになれば、より精巧なLambda関数を呼び出すためにそれを簡単に拡張することができます。

<ブロッククオート

あなたがしなければならない主なことは を覚えておくことです。 というのは を設定し、適切な ARN Role を設定します。 .