gpt4 book ai didi

javascript - 从另一个未被调用的 Lambda 函数中调用 Lambda 函数

转载 作者:行者123 更新时间:2023-11-29 23:07:00 25 4
gpt4 key购买 nike

如何在 Lambda 函数中调用 Lambda 函数?

例如,

函数 1 中,它将由 API 网关请求触发,并将调用第二个 lambda 函数作为事件 (InvocationType = Event)。

函数 2 中,它将向端点发出 http 请求。

另外,我要在 serverless.yml 中编写代码吗?还是仅在 index/app/handler.js 上编写代码?

我在 stackoverflow 上尝试了这里的链接 -> Nodejs - Invoke an AWS.Lambda function from within another lambda function但它不起作用。

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

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

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

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

最佳答案

您的问题是 lambda.invoke() 函数是非阻塞的,因此 Lambda_A 在调用 Lambda_B 之前完成了它的执行。您可以使用 promise 来处理它。如果你是 using Node.js 8.10+ ,你可以这样做:

Lambda_A:

let AWS = require('aws-sdk');
let lambda = new AWS.Lambda();

exports.handler = async (event) => {

let params = {
FunctionName: 'Lambda_B',
InvocationType: 'RequestResponse',
Payload: '{ "foo" : "bar" }'
};

return await lambda.invoke(params, function(err, data) {
if (err) {
throw err;
} else {
console.log('LambdaB invoked: ' + data.Payload);
}
}).promise();
};

Lambda_B:

exports.handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify('Hello from Lambda_B!'),
};
};

调用 Lambda_A 时的响应:

{
"StatusCode": 200,
"ExecutedVersion": "$LATEST",
"Payload": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda_B!\\\"\"}"
}

调用时 Lambda_A 的控制台输出:

START RequestId: 016a763d-c79e-4d72-bd44-0aaa89a5efaf Version: $LATEST
2019-02-07T08:07:11.154Z 016a763d-c79e-4d72-bd44-0aaa89a5efaf LambdaB invoked: {"statusCode":200,"body":"\"Hello from Lambda_B!\""}
END RequestId: 016a763d-c79e-4d72-bd44-0aaa89a5efaf
REPORT RequestId: 016a763d-c79e-4d72-bd44-0aaa89a5efaf Duration: 717.40 ms Billed Duration: 800 ms Memory Size: 128 MB Max Memory Used: 30 MB

关于javascript - 从另一个未被调用的 Lambda 函数中调用 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54567589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com