我有一个用于触发 AWS Lambda 作业的 API。根据请求,API 使用 InvocationType='Event'
调用 AWS Lambda 作业。此后,我想定期轮询 AWS Lambda 作业是否已完成。
最适合我的架构的方法是将 Lambda 作业的标识符存储在数据库中,并定期检查作业是否完成以及它的输出是什么。但是,我找不到如何执行此操作。
如何定期轮询 AWS Lambda 作业的结果,并在完成后查看输出?
我研究过使用 InvocationType='RequestResponse'
,但这需要我存储一个 future ,而我无法在数据库中做到这一点。
最佳答案
没有内置方法来检查异步 Lambda 调用的状态。
使用事件调用类型的异步 Lambda 调用是一个即发即弃的工作。因此,没有要获取或轮询的“进度”或“状态”。
由于您不想等待 Lambda 完成,同步 Lambda 调用不在画面之列。在这种情况下,您需要编写自己的逻辑来跟踪状态。
您可以这样做的一种方法是将(工作)项目存储在具有 2 个属性的 DynamoDB jobs
表中:
jobId
UUID(String
属性,设置为分区键)completed
bool 标志(Boolean
属性)
工作流程如下:
- 在您的 API 中,创建并存储一个新作业,
已完成
默认为“false” - 将新创建的
jobId
传递给在负载中调用的 Lambda - 当 Lambda 完成时,在
jobs
表中查找与传入的jobId
关联的作业并设置作业的completed
属性为true
然后您可以定期轮询 DynamoDB 表中的作业结果。
或者看看使用 DynamoDB Streams作为一种无需轮询即可近乎实时地了解作业何时完成的方法。
关于查看“输出”,AWS Lambda 只是 returns a success response without additional information .没有“输出”。将您可能需要的任何输出存储在持久性存储中 - 可能是每个作业的额外 output
属性作为 String
? - 稍后检索它。
关于amazon-web-services - 如何跟踪异步 AWS Lambda 调用的进度/状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72165019/