我有一个AWS lambda,它可以进行一些计算并将输出写入S3位置。 AWS lambda由cloudwatch cron表达式触发。由于lambda可以被多次触发,因此我想修改lamda代码,使其处理lambda的多个触发器。
我的lambda唯一的主要副作用是写信给S3并发送邮件。在这种情况下,如何确保lambda执行多次,但仍确保幂等行为?
答案 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。