无法使用AWS Lambda

时间:2019-01-26 00:27:13

标签: node.js aws-lambda aws-sdk-nodejs

我无法递归调用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,因为我能够一次调用该功能,所以我将其视为常见问题?

0 个答案:

没有答案