ECSの「スケジュールされたタスク」で実行時間にズレがあるときの対処方法

2023.04.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Amazon ECS の「スケジュールされたタスク」を使用して、毎朝4時ピッタリに定期的なバッチ処理を実施しています。
先日、バッチ処理の開始タイミングを確認したところ、1分程度の差があることがわかりました。
バッチ処理の性質上、ピッタリに開始する必要があるのですが、どうしたら良いでしょうか。

どう対応すればいいの?

ECS タスク内で crond を実行するなど、独自のスケジューリングをご検討ください。

スケジュールされたタスクは、EventBridge ルールをトリガーにタスクを実行しますが、EventBridge ルールの最小精度は1分であり、1分程度の差は発生することが期待されます。

スケジュールに従って実行する Amazon EventBridge ルールの作成 - Amazon EventBridge

スケジュールの最小精度は 1 分です。スケジュールされたルールは、その分のうちに実行されますが、正確に 0 秒に実行されるわけではありません。

また、EventBridge ルールから実行される RunTask API はタスクを開始する API となり、開始後にコンテナイメージの取得など起動処理を経て、タスク内のコンテナが実行されるため、コンテナ内の処理が開始されるタイミングはその影響を受けます。

そのため、指定した時間ピッタリに処理を開始したい場合は、コンテナ内で crond 等を実行するなどの独自のスケジューリングをご検討ください。

なお、crond を使用するとログが取得されない場合がありますのでご注意ください。

ECSにて、コンテナ内のcrondで起動したアプリケーションログがログドライバで指定した箇所に出力されないときの対処方法 | DevelopersIO

参考資料