我无法递归调用Lambda函数。我的功能在同一VPC中,它们能够与我的RDS资源进行通信。借助NAT网关,他们还可以访问公共资源。我能够从任务管理器成功调用一次函数(请参见下文)。历史函数应该递归运行,直到满足条件为止,它会自行调用它,但不会发生任何事情。
我正在一个有一个任务管理器的项目上,该任务管理器作为lambda函数在cron上运行。当前,该函数在RDS托管的MySQL数据库中搜索尚未启动或尚未完成的任何任务。然后,它编译必要的参数,并调用另一个lambda函数来实际进行提升。
任务代码:
module.exports.tasks = async (event, context) => {
let tasks = await getTasks();
let tasksStarted = 0;
for (const task of tasks) {
let attr1 = await redacted;
let attr2 = await redacted;
let body = {
task: task,
account: attr1,
pair: attr2
};
const params = {
FunctionName: "redcated-historical",
InvocationType: "Event",
Payload: JSON.stringify(body)
};
tasksStarted += 1;
console.log("LAMBDA Invoke");
lambda.invoke(params, context.done);
console.log("Updating DB");
let update = await updateTask(task.id, {
start_date: new Date()
});
console.log("Updated")
}
console.log("Finished Starting Tasks");
await mysql.end();
// Return the results
return {
tasksStarted: tasksStarted
};
};
递归代码(此代码无效):
module.exports.historicalTask = async (event, context) => {
console.log("STARTING HISTORICAL TASK");
api.configure({
apiKey: event.account.api_token,
accountId: event.account.account_id
});
console.log("Getting objects from API");
const {objects, params} = await api.call(event.task)
let lastTimeStamp = objects[objects.length - 1].time;
let promises = [];
console.log("Starting Save");
for (let object of objects) {
let history = new Historical();
history.timestamp = new Date(object.time);
//redacted info
promises.push(history.insert(mysql));
}
console.log("WAITING FOR SAVE");
const result = await Promise.all(promises);
console.log("SAVED");
let newDate = moment(lastTimeStamp);
let endDate = moment(event.task['search_end_date']);
newDate.add(5, 'm');
if (newDate.isAfter(endDate)) {
await updateTask(event.task.id, {
completed: 1,
completed_date: new Date()
});
await mysql.end();
context.done('Finished');
} else {
event.task.search_start_date = newDate.toDate();
const params = {
FunctionName: "redacted-historical",
InvocationType: "Event",
Payload: JSON.stringify(event)
};
await updateTask()
console.log("Invoking again!");
lambda.invoke(params, context.done);
}
};
我的预期结果是,修订历史功能将继续调用自身,直到满足条件(包括)为止。我想念什么吗?我看过多篇有关递归Lambda函数的文章和示例。
我假设这不是我的角色,也不是VPC,因为我能够一次调用该功能,所以我将其视为常见问题?