[英]How to return binary data from lambda function in AWS in Python?
[英]Return data from invoked AWS Lambda
如何从另一个 lambda 调用 lambda function 并将响应数据返回到原始 function 以继续处理该数据? 我在 Node.js 中有主要的 lambda function (A),在 python 中有第二个 lambda function (B)。这是我需要的:
不要用我的代码给你带来负担,这里是我正在尝试做的一个简单示例。
Lambda 一
AWS.config.region = 'us-east-2';
var lambda = new AWS.Lambda();
var dataPayloadCopy = 'BLANK';
exports.handler = function(event, context){
var params = {
FunctionName: 'arn:aws:lambda:us-east-2:958569232013:function:lambdaB',
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: '{ "name" : "Adam" }'
};
var lambdaResponse = lambda.invoke(params, function(err, data) {
if (err) {
console.log("error");
} else {
console.log("Response inside callback function: \n" + JSON.stringify(data.Payload));
//console.log(data.Payload);
dataPayloadCopy = data.Payload;
}
});
console.log(" ------ ");
console.log("Global response data copy: " + JSON.stringify(dataPayloadCopy));
console.log(" ------ ");
console.log("lambdaResponse data: ");
console.log(lambdaResponse.response.data);
console.log(" ------ ");
return {
'statusCode': 200,
'body': JSON.stringify({"message":"life is good"}),
'headers': {
'Content-Type': 'application/json; charset=utf-8',
'Access-Control-Allow-Origin': '*'
},
}
};
Lambda乙
import json
def lambda_handler(event,context):
responseMessage = {"message":"Arguments received: name: " + event['name']}
return {
'statusCode': 200,
'body': json.dumps(responseMessage)
}
步骤 1 和 2 没有问题。 我无法完成第 3 步。我在 lambda.invoke() 回调 function 中的 data.Payload 中看到了 lambda B 响应,并且可以将其打印出来,但是我如何才能将该值放入主 lambda A function 中,所以我可以在那里工作吗? 我尝试将 data.Payload 复制到全局变量 dataPayloadCopy 中,并将 lambda.invoke() 值分配给 lambdaResponse 变量(在上面的代码中)。 两种方法都行不通。 看起来 lambda B 在 lambda A 完成时执行。
下面是执行结果:
INFO ------
INFO Global response data copy: "BLANK"
INFO ------
INFO lambdaResponse data:
INFO null
INFO ------
INFO Response inside callback function:
"{\"statusCode\": 200, \"body\": \"{\\\"message\\\": \\\"Arguments received: name: Adam\\\"}\"}"
另外,我在测试结果中没有看到 lambda A 返回值。 如果我将 lambda A 中的处理程序 function 更改为异步 exports.handler exports.handler = async (event) => {
并运行测试, lambda A 返回值显示,但回调 function 没有打印输出,就好像 lambda B 不是调用和/或未收到返回。
如果两个 lambda 都在 python 中,我对类似任务没有任何问题。不过我的 lambda A 代码在 Node.js 中。
Lambda 调用 function 是异步的并使用回调。 因此,当您的调用调用 Python Lamdda function 时,回调之外的代码 rest 将继续运行。
对您来说最好的方法是在回调 function 中更改代码的后续步骤,如下所示,
AWS.config.region = "us-east-2";
var lambda = new AWS.Lambda();
var dataPayloadCopy = "BLANK";
exports.handler = function (event, context) {
var params = {
FunctionName: "arn:aws:lambda:us-east-2:958569232013:function:lambdaB",
InvocationType: "RequestResponse",
LogType: "Tail",
Payload: '{ "name" : "Adam" }',
};
var lambdaResponse = lambda.invoke(params, function (err, data) {
if (err) {
console.log("error");
} else {
console.log(
"Response inside callback function: \n" + JSON.stringify(data.Payload)
);
//console.log(data.Payload);
dataPayloadCopy = data.Payload;
}
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.