ECSの「スケジュールされたタスク」で稀に ECS タスクが実行されていないときの対処方法

2022.03.31

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

困っていた内容

Amazon ECS の「スケジュールされたタスク」を使用して、定期的なバッチ処理を実施しています。先日、バッチ処理が行われない事象が発生し CloudWatch Logs を確認したところ、ログがなくタスクが実行されていないようでした。
再試行ポリシーも設定しているのでエラーが起きてもリトライがされるはずです。なぜ ECS タスクはなぜ正常に実行されなかったのでしょうか。

どう対応すればいいの?

ECS タスクの停止理由をご確認ください。

停止されたタスクでのエラーの確認 - Amazon ECS

スケジュールされたタスクは、EventBridge ルールをトリガーに RunTask API によって起動されます。RunTask API の実行に失敗した場合、EventBridge の再試行ポリシーに従いリトライが行われますが、RunTask API はタスクの開始が行われた時点で正常実行として終了します。
そのため、タスクの開始後にエラーが発生した場合はリトライが行われません。また、エラーのタイミング次第ではコンテナも起動していないため、ログも出力されません。

タスクが正常に起動しない理由は停止理由から確認でき、ネットワークエラーで Docker イメージが取得できない場合など一時的な問題の場合もあります。

停止理由に応じて ECS タスクの修正や、タスクの実行結果でリトライが可能な Step Functions による ECS タスクの実行もご検討ください。
なお、停止理由は1時間程度で非表示となるため、既に非表示で確認できない場合は今後に備えて CloudWatch Logs への保管もご検討ください。

参考資料