我有2个lambda,test1
,它调用test2
。我想以“一劳永逸”的思路异步调用test2
。
下面是两个lambda的代码。当我将InvocationType
设置为RequestResponse
时,该函数被调用,并且CloudWatch中存在日志。当我将InvocationType
更改为Event
时,CloudWatch中没有被调用函数的记录。
test1:
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();
exports.handler = async (event) => {
const params = {
'FunctionName': 'test2',
'InvocationType': 'Event',
'Payload': JSON.stringify('Hello')
};
const response = await lambda.invoke(params).promise();
return response;
};
test2:
exports.handler = async (event) => {
console.log(event);
return 'Success';
};
IAM策略包含调用权限(否则RequestResponse
类型也不起作用)。我也读过关于limits on the size of the args you can pass的信息,但是在这种情况下,我只传递了“ Hello”……给出了什么?
编辑:我还应该补充一点,在每种情况下,我都会得到一个响应代码202,表示调用成功,我只是看不到日志中正在执行该函数的证据。
编辑2:我已经在await
的末尾添加了test1
,但是仍然看不到任何指示在CloudWatch中调用了test2。
答案 0 :(得分:0)
我认为仅缺少await
:
exports.handler = async (event) => {
const params = {
'FunctionName': 'test2',
'InvocationType': 'Event',
'Payload': JSON.stringify('Hello')
};
await lambda.invoke(params).promise();
};
在没有await
的情况下,lambda.invoke(params).promise()
的承诺将退出lambda执行,而不会解决该承诺。
由于lambda是异步调用的,因此不会返回任何结果。
您可以检查test2
lambda的CloudWatch日志以查看是否已被调用。
答案 1 :(得分:0)
好的,现在我在Cloudwatch中看到调用该函数的日志。以前,即使添加了await
,我也没有得到它们,但是由于某种原因,它现在可以工作了。
谢谢大家的帮助。