如何跟踪异步 AWS Lambda 调用的 progress/status?

How can I track the progress/status of an asynchronous AWS Lambda invocation?

我有一个 API 用于触发 AWS Lambda 作业。根据请求,API 使用 InvocationType='Event' 调用 AWS Lambda 作业。此后,我想定期轮询 AWS Lambda 作业是否已完成。

最适合我的架构的方法是将 Lambda 作业的标识符存储在数据库中,并定期检查作业是否完成以及它的输出是什么。但是,我找不到如何执行此操作。

如何定期轮询 AWS Lambda 作业的结果,并在完成后查看输出?

我研究过使用 InvocationType='RequestResponse',但这需要我存储未来,而我无法在数据库中存储。

没有 built-in 检查异步 Lambda 调用状态的方法。

异步 Lambda 调用,使用事件调用类型,意味着 即发即忘 工作。因此,没有 'progress' 或 'status' 可以获取或轮询。

由于您不想等待 Lambda 完成,同步 Lambda 调用不在考虑范围之内。在这种情况下,您需要编写自己的逻辑来跟踪状态。

您可以这样做的一种方法是将(工作)项目存储在 DynamoDB jobs table 中,具有 2 个属性:

  1. jobId UUID(String属性,设置为分区键)
  2. completed 布尔标志(Boolean 属性)

工作流程如下:

  1. 在您的 API 中,创建并存储一个 completed 默认为 'false'
  2. 的新作业
  3. 将 newly-created jobId 传递给在负载中调用的 Lambda
  4. Lambda 完成后,在 jobs table 中查找与传入的 jobId 关联的作业,并将作业的 completed 属性设置为 true

然后您可以定期轮询 DynamoDB 中的作业结果 table。

或者查看使用 DynamoDB Streams 作为一种无需轮询即可知道作业何时在 near-real 时间内完成的方法。

至于查看 'output',AWS Lambda 仅 returns a success response without additional information。没有'output'。将您可能需要的任何输出存储在持久性存储中 - 也许每个作业都有一个额外的 output 属性作为 String? - 稍后检索它。