1. aosho235

    Posted

    aosho235
Changes in title
+CloudWatch Eventをトリガーにすると複数回実行されることがある
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,16 @@
+ECSでCloudWatch Eventスケジュール式(cron式)をトリガーにタスクを起動するよう設定していたのだが、なぜかまれにタスクが同時に2個起動することがある。
+
+CloudWatch Eventはそういうもので、ちょうど1回だけ起動することを保証していないらしい。Lambdaでも同様にCloudWatch Eventスケジュール式をトリガーにしていると多重起動することがあるらしい。
+
+多重起動を防ぎたければ、DynamoDBを使ってロックを実装するのが良いらしい。ロックを解除しないままエラー終了してしまうと、ロックが残ったままになるので、DynamoDBテーブルにTTLを設定して、一定時間後に自動的に削除される(=ロック解除される)ようにしておくと良いかもしれない。
+
+
+
+酷い話だ。
+
+## 参考
+
+- [Scheduled Task Running Twice](https://forums.aws.amazon.com/thread.jspa?messageID=873044)
+- [Lambda でアトミックなロック処理を実装する](https://blog.manabusakai.com/2016/07/lambda-atomic-lock/)
+- [Lambda is been executed several times by scheduled event](https://forums.aws.amazon.com/message.jspa?messageID=750312)
+- [DynamoDBの各データを自動で削除する機能(TTL:Time to Live)を試してみた | DevelopersIO](https://dev.classmethod.jp/cloud/aws/try-dynamodb-ttl/)