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

标签 amazon-web-services aws-lambda boto3 boto

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

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

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

我研究过使用 InvocationType='RequestResponse',但这需要我存储一个 future ,而我无法在数据库中做到这一点。

最佳答案

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

使用事件调用类型的异步 Lambda 调用是一个即发即弃的工作。因此,没有要获取或轮询的“进度”或“状态”。

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

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

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

工作流程如下:

  1. 在您的 API 中,创建并存储一个新作业,已完成 默认为“false”
  2. 将新创建的 jobId 传递给在负载中调用的 Lambda
  3. 当 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/

相关文章:

amazon-web-services - 了解 Dynamo DB 中的热键

amazon-web-services - Docker 推送错误保存凭据 : error storing credentials - err: exit status 1, 输出: `not implemented`

java - Http POST 失败,状态代码 : 406 and with status: Not Acceptable

amazon-web-services - 在 API 网关部署上更新阶段变量时如何避免停机?

amazon-web-services - 恢复 Etcd Quorum

node.js - 哪种方法更好?从客户端还是从服务器端上传文件?

javascript - AWS DynamoDB 未返回对 Lambda 函数的响应

aws-lambda - SNS 到 SQS 与直接 SQS 放入 Lambda@Edge 应用程序

jquery - AWS Lambda将文件上传到s3

python-3.x - 使用boto3 lib和AWS Lambda从坐在S3存储桶中的压缩文件中获取数据流