![](/img/trans.png)
[英]Call Python boto3 library from AWS Lambda function written in Node.js
[英]How to call an AWS Python Lambda function from another Node.js Lambda function
我是 JavaScript 和 AWS 的新手。 我正在努力将 Python AWS Lambda 函数连接到 Node.js AWS Lambda 函数。
我想从主 Lambda 函数(假设为父 lambda)的中间行调用一个单独的 Lambda 函数(假设为子 lambda),并在父 lambda 中使用子 lambda 的返回值。
我的子 lambda 是在 Python 3.6 中实现的,父 lambda 是在 Node.js 12.x 中实现的。 我想停止执行父 lambda,直到子 lambda 返回它的值。
但似乎父 lambda 中的其余代码行在完成子 lambda 的执行之前执行。
我使用以下链接为父 lambda 设置了所需的策略。
https://www.sqlshack.com/calling-an-aws-lambda-function-from-another-lambda-function/
我有一个分配给变量“img”的数组。 如果满足条件,我需要通过将有效负载作为 'img' 数组传递来调用子 lambda,对该数组进行一些额外的计算并将其返回给父 lambda。 最后用返回的数组替换 'img' 变量。
下面是我在父 lambda 中用来调用子 lambda 的代码块。 请注意,“returnArr”是从子 lambda 返回的数组。
const AWS = require('aws-sdk');
AWS.config.region = 'ap-southeast-2';
var lambda = new AWS.Lambda();
exports.handler = async (event, ctx, callback) => {
//////////code lines for other operations////////////
let img = [[[2,3,5],[6,7,8]],[[12,13,15],[16,17,18]]];
let flag=0;
if(condition){
console.log("BEGIN");
var params = {
FunctionName: 'childFunction', // child lambda function written in Pyton 3.6
InvocationType: 'RequestResponse',
Payload: JSON.stringify({ "sendImg" : img})
};
lambda.invoke(params, function(err, data) {
console.log("SENT");
if (err) {
console.log(err);
} else {
//console.log('Lambda_B said '+ data.Payload);
let body1;
flag = 1;
if(typeof(data.Payload) == 'object') {
body1 = data.Payload;
} else {
body1 = JSON.parse(data.Payload);
}
img = body1["returnArray"];
console.log("Modified img array inside: ",img);
}
})
console.log("DONE");
}
console.log("flag : "+flag);
console.log("Modified img array outside: "+img);
////////Rest of the code///////////////////////
};
我得到的输出如下:
开始
完毕
标志:0
外面修改img数组:[[[2,3,5],[6,7,8]],[[12,13,15],[16,17,18]]]
发送
修改里面的img数组:[[[23,31,54],[63,71,86]],[[12,133,115],[162,117,18]]]
我想停止执行父 lambda,直到子 lambda 返回它的数组。
我认为这是因为我没有太多 NodeJS 知识。
有人能告诉我我哪里出错了吗?
父 lambda 在完成子 lambda 的执行之前执行
您正在使用async handler ,因此您的函数在它有机会调用另一个函数之前完成。
为了克服这个问题,您可以将您的代码包装在new Promise
的处理程序中,如AWS 文档中所示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.