gpt4 book ai didi

node.js - 使用 'Event' 调用类型时未调用 AWS Lambda

转载 作者:太空宇宙 更新时间:2023-11-03 21:51:19 24 4
gpt4 key购买 nike

我有 2 个 lambda,test1 调用 test2。我想以“即发即忘”的心态异步调用 test2

下面是两个 lambda 表达式的代码。当我将 InitationType 设置为 RequestResponse 时,该函数将被调用,并且 CloudWatch 中会有日志。当我将 InitationType 更改为 Event 时,CloudWatch 中没有正在调用的函数的记录。

测试1:

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;
};

测试2:

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 的末尾,但仍然没有看到任何迹象表明 test2 在 CloudWatch 中被调用。

最佳答案

我认为只是缺少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() 的 promise 将退出 lambda 执行,但不会解析该 promise 。

因为 lambda 是异步调用的,所以没有返回结果。

您可以检查 test2 lambda 的 CloudWatch 日志来查看是否已被调用。

关于node.js - 使用 'Event' 调用类型时未调用 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55282027/

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