如何跟踪异步 AWS Lambda 调用的进度/状态?

use*_*595 4 boto amazon-web-services boto3 aws-lambda

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

最适合我的架构的方法是将 Lambda 作业的标识符存储在数据库中,并定期检查作业是否完成及其输出是什么。但是,我无法找到如何做到这一点。

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

我已经研究过使用InvocationType='RequestResponse',但这需要我存储未来,这是我无法在数据库中做到的。

Erm*_*ary 5

没有内置方法来检查异步 Lambda 调用的状态。

使用事件调用类型的异步 Lambda 调用意味着一次即发即忘的工作。因此,没有可供获取或投票的“进度”或“状态”。

由于您不想等待 Lambda 完成,因此无法进行同步 Lambda 调用。在这种情况下,您需要编写自己的逻辑来跟踪状态。

实现此目的的一种方法是将(作业)项目存储在jobs具有 2 个属性的 DynamoDB 表中:

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

那么工作流程如下:

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

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

或者看看使用DynamoDB Streams作为一种无需轮询即可近实时了解作业何时完成的方法。

至于查看“输出”,AWS Lambda 仅返回成功响应,没有其他信息。没有“输出”。将您可能需要的任何输出存储在持久存储中 - 也许每个作业都有一个额外的output属性String?- 稍后取回它。