如何在写入S3的lambda中实现幂等行为?

时间:2019-06-26 10:48:36

标签: amazon-s3 aws-lambda idempotent

我有一个AWS lambda,它可以进行一些计算并将输出写入S3位置。 AWS lambda由cloudwatch cron表达式触发。由于lambda可以被多次触发,因此我想修改lamda代码,使其处理lambda的多个触发器。

我的lambda唯一的主要副作用是写信给S3并发送邮件。在这种情况下,如何确保lambda执行多次,但仍确保幂等行为?

1 个答案:

答案 0 :(得分:0)

您需要一个唯一的ID,并在进行处理之前对其进行检查。 查看事件是否有一个。例如,云监视规则中“ cron表达式”的Sample事件建议您将获得如下信息:

{
  "version": "0",
  "id": "89d1a02d-5ec7-412e-82f5-13505f849b41",
  "detail-type": "Scheduled Event",
  "source": "aws.events",
  "account": "123456789012",
  "time": "2016-12-30T18:44:49Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:events:us-east-1:123456789012:rule/SampleRule"
  ],
  "detail": {}
}

在这种情况下,您的代码将读取event.id并将其写入S3(例如yourbucket / running / 89d1a02d-5ec7-412e-82f5-13505f849b41)。启动lambda时,它可以在“ yourbucket / running”下列出密钥,并查看event.id是否与其中任何一个匹配。

如果没有匹配项,则创建它。

这不是防弹解决方案,您可能会遇到一些竞态条件,例如,如果另一个lambda触发了,而AWS生成密钥的速度很慢,但是启动另一个lambda的速度却很快,但这就是您必须忍受的如果您想使用s3。