【发布时间】:2020-03-03 17:53:20
【问题描述】:
我通过显式 RequestResponse 通过 aws-sdk 调用 lambda
const Lambda = require("aws-sdk/clients/lambda");
const lambda = new Lambda({region: "region"});
const params = {
FunctionName: "myFunctionArn",
InvocationType: "RequestResponse",
Payload: JSON.stringify({
//... my payload
})
};
lambda.invoke(params).promise().then(data => {
console.log(data);
});
这是一个长时间运行的任务 >~5 分钟,我的超时设置为 10 分钟。我下载了一个 mp3,压缩它,保存到 S3,然后将 url 返回给客户端。 cloudwatch没有错误,过程顺利,mp3以较低质量存储到s3,但函数执行了两次。
如果 mp3 文件足够小(~8 MB),则只有一次执行,但如果它是一个大文件(~100MB),它将被执行两次,当然函数会超时。我正在使用 /tmp 文件夹来临时存储文件,我也会在 mp3 安全存储在 S3 后将其删除 我已经通过日志记录分散了我的功能,并且绝对没有错误迹象,而且这种情况每次都会发生,而不是偶尔发生。
谢谢
EDIT_1:我尝试向 lambda 客户端添加一些选项
const Lambda = require("aws-sdk/clients/lambda");
const lambda = new Lambda({
region: "ap-southeast-1",
httpOptions: { timeout: 10 * 60 * 1000, connectTimeout: 10 * 60 * 1000 }
});
但看起来什么都没有改变
EDIT_2:似乎现在这也发生在短期运行的任务中,并且是完全随机的。我在这里不知所措我真的不知道该怎么办
【问题讨论】:
-
查看此线程的第一个答案:stackoverflow.com/questions/57565650/…
-
谢谢,但我已经检查了所有答案,就我而言,我没有错误,我的执行是同步的。
-
不看你的 lambda 函数代码就很难说什么。
-
您是否记录了调用 Lambda 以排除双重执行的代码?这样您就可以确定这发生在 AWS 端。
标签: node.js aws-lambda