【发布时间】:2020-05-18 17:36:20
【问题描述】:
目前
我有一个调用另一个 lambdaY 的 lambdaX。
拉姆达 X:
"use strict";
const AWS = require('aws-sdk');
AWS.config.region = 'ap-southeast-2';
var lambda = new AWS.Lambda();
exports.handler = async (event) => {
//the final return
var dataToSave = []
//data to be added to array
let returnLoad;
var params = {
FunctionName: 'lambdaY', // the lambda function we are going to invoke
InvocationType: 'RequestResponse',
LogType: 'Tail', //Set to Tail to include the execution log in the response.
};
try {
await lambda.invoke(params, function(err, data) {
if (err) {
console.log("Error");
console.log(err, err.stack);
} else {
console.log("Success");
console.log(data);
returnLoad = data.Payload;
}
}).promise();
dataToSave.push(returnLoad);
} catch (err) {
console.log('some error occurred...');
}
const response = {
statusCode: 200,
body: JSON.stringify(dataToSave)
};
return response;
}
拉姆达Y:
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
问题
由于某种原因,每当我调用 lambdaX 时,lambdaY 都会调用 2 次以上。请注意,lambdaX 会返回正确的响应,但我想避免不必要地多次调用 lambdaY。
我需要对我的代码进行哪些更改? (或 lambda 配置)
日志:
注意:2 个 lambdaY 日志同时被调用。
注意:LambdaX 结果正常且符合预期。没有重复的日志。
【问题讨论】:
-
您是否确认 lambdaY 两次都由 lambdaX 启动?例如,由于配置问题,触发 lambdaX 的事件也可能触发 lambdaY。也许尝试记录 lambdaY 的有效负载以确认它来自 lambdaX。
-
另外,您是否检查了日志以确保 lambdaX 仅被触发一次?
-
@jpetty,是的,lambdaX 的日志显示它只被触发一次,而 lambdaY 的日志显示来自 X 的有效负载(当我包含一个有效负载来测试该问题时)
-
感谢@Wronski,通常会看到重复的 lambda 调用是由 failure retries 引起的。 lambdaY 可能失败导致 lambdaX 重试。 lambdaX 的日志中有什么?它是否从 lambdaY 获得了成功的响应?
-
@jpetty,我已经为 lambdaX 添加了日志。它们符合预期,没有显示错误。
标签: javascript amazon-web-services promise aws-lambda async-await