Nodejs - 从另一个 lambda 函数中调用 AWS.Lambda 函数

新手上路,请多包涵

我有以下函数,用于从我的代码中调用 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;

原文由 hyprstack 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 790
1 个回答

使用 aws-sdk 从另一个 Lambda 函数中调用 Lambda 函数非常简单,它在每个 Lambda 中都可用。

我建议先从 简单 的事情开始。

这是内部 lambda 调用的“Hello World”:

Lambda_A 调用 Lambda_B Payload 包含单个参数 name:'Alex'

Lambda_B 以有效负载响应: "Hello Alex"

lambda 调用

首先在 event 参数上创建 Lambda_B 期望 name 属性

并使用 "Hello "+event.name 响应请求:

Lambda_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 相同的角色。

Eg: create a role called lambdaexecute which has AWSLambdaRole , AWSLambdaExecute and AWSLambdaBasicExecutionRole ( All are required ):

lambda-role-for-intra-lambda-execution

Lambda_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 函数后,测试运行 Lambda_A

lambda 调用-lambda_a-执行结果

一旦你有 基本 的内部 lambda 调用工作,你可以轻松地扩展它来调用更复杂的 Lambda 函数。

您必须 记住 的主要事情是 为所有功能设置适当的 ARN Role

原文由 nelsonic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题