Help us understand the problem. What is going on with this article?

CloudWatch Eventをトリガーにすると複数回実行されることがある

ECSでCloudWatch Eventスケジュール式(cron式)をトリガーにタスクを起動するよう設定していたのだが、なぜかまれにタスクが同時に2個起動することがある。エラーが起きたからリトライされたというわけではなく、タスクは2個とも正常終了した。

CloudWatch Eventはそういうもので、ちょうど1回だけ起動することを保証していないとAWSドキュメントに書いてある。

1 つのイベントに応じてルールが複数回トリガーされました。CloudWatch イベント で、ルールのトリガーまたはターゲットへのイベントの提供で何が保証されますか。
まれに、単一のイベントまたはスケジュールされた期間に対して同じルールを複数回トリガーしたり、特定のトリガーされたルールに対して同じターゲットを複数回起動したりする場合があります。
CloudWatch イベント のトラブルシューティング

Lambdaでも同様にCloudWatch Eventスケジュール式をトリガーにしていると多重起動することがあるらしい。Lambdaの場合は同期実行数を1に設定しておけばよいのかもしれない。

多重起動を防ぎたければ、DynamoDBを使ってロックを実装するのが良いらしい。ロックを解除しないままエラー終了してしまうと、ロックが残ったままになるので、DynamoDBテーブルにTTLを設定して、一定時間後に自動的に削除される(=ロック解除される)ようにしておくと良いかもしれない。

酷い話だ。

追記:
DynamoDBを使ってロックを実装しても、1個目のタスクが1分で終了してから2個目のタスクが起動されたことがあった。これはロックでは防げない…

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした