1. aosho235

    No comment

    aosho235
Changes in body
Source | HTML | Preview
@@ -1,16 +1,16 @@
ECSでCloudWatch Eventスケジュール式(cron式)をトリガーにタスクを起動するよう設定していたのだが、なぜかまれにタスクが同時に2個起動することがある。
-CloudWatch Eventはそういうもので、ちょうど1回だけ起動することを保証していないらしい。Lambdaでも同様にCloudWatch Eventスケジュール式をトリガーにしていると多重起動することがあるらしい。
+CloudWatch Eventはそういうもので、ちょうど1回だけ起動することを保証していないらしい。Lambdaでも同様にCloudWatch Eventスケジュール式をトリガーにしていると多重起動することがあるらしい。Lambdaの場合は同期実行数を1に設定しておけばよいのかもしれない。
多重起動を防ぎたければ、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/)