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

推荐答案

使用aws-sdk从另一个Lambda函数中调用Lambda函数非常简单,每个Lambda中都有aws-sdk.

I suggest starting with something simple first.
This is the "Hello World" of intra-lambda invocation:

Lambda_A invokes 兰巴达 with a Payload containing a single parameter name:'Alex'.
兰巴达 responds with Payload: "Hello Alex".

lambda invoke

First create 兰巴达 which expects a name property on the event parameter
and responds to request with "Hello "+event.name:

兰巴达

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

Ensure that you give 兰巴达 and Lambda_A the same role.
E.g: 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: '兰巴达', // 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('兰巴达 said '+ data.Payload);
    }
  })
};

保存这两个Lambda函数后,测试运行Lambda_A:

lambda invoke-lambda_a-execution-result

一旦basic个内部Lambda调用开始工作,就可以轻松地扩展它,以调用更复杂的Lambda函数.

你要做的最重要的事情是remember102.

Node.js相关问答推荐

GraphQL MongoDB Mongoose填充字段未获取多个类别

使用HTTPS从NodeJS 17.9.1升级到18.0.0后,SignalR连接失败

聚合发布/订阅消息

DocuSign:调用createEntaine时,RequestJWTApplicationToken返回401 AUTHORIZATION_INVALID_TOKEN

正在try 使用Azure Function App上载文件时未上载文件(&Q;)

无法使用Sequelize连接AWS RDS

为什么 nginx 不将我的 react index.html 作为后备服务

discordjs如何添加所有意图/权限

如何在 TypeScript 中输出 Hackerrank 二叉树问题?

使用 mongoose 查找过go 7 天的注册用户总数

node.js 中 pdfkit-tables 中的垂直线

通过 npm 导入 Sass

yarn.lock 和 npm 的 package-lock 有什么区别?

Node.js 表达的 Error 对象expose 了哪些属性?

npm 不会安装 express 吗?

Node.js 中空函数的简写

TypeError:请求路径包含未转义的字符,我该如何解决这个问题

Forever + Nodemon 一起运行

yarn 和 npm 的主要区别是什么?

Mongoose - 验证邮箱语法