Step Functions で ECS タスク(Fargate)を定期実行してみる
アノテーション株式会社の hato です。
Step Functions を使って ECS タスク(Fargate)の実行失敗時にリトライを行う定期実行の仕組みを構築します。
ECS タスクの定期実行
ECS タスクを定期実行する方法として EventBridge ルールを使用した「スケジュールされたタスク」があります。
スケジュールされたタスク - Amazon Elastic Container Service
スケジュールされたタスクは、手軽に規則的な間隔やcron式を使用した柔軟なスケジュールを設定できますが、注意点としてタスクの実行が失敗してもリトライされません。 *1
タスクの実行に失敗した場合や、そもそもタスクの起動中にエラーが発生してしまった場合に、リトライを行いたい場合は Step Functions など別の方法を考える必要があります。
Step Functions のエラー処理では、リトライ回数に限らず、リトライを行うエラーや待機時間を柔軟に設定できます。
Step Functions の設定項目
ErrorEquals
:リトライを行うエラーIntervalSeconds
:リトライ時の待機時間MaxAttempts
:リトライの最大回数BackoffRate
:リトライ間隔の増加乗数
参考:Step Functions のエラー処理 - AWS Step Functions
やってみた
構成図
事前準備として、ECS クラスターやタスク定義、サブネットは用意しておきます。
準備が完了したら、以下手順を進めてきます。
Step Functions コンソール を開き、「ステートマシンの作成」をクリックします。
「コードでワークロードを記述」を選択します。
定義(赤枠で囲った部分)に、次のコードを参考に ECS タスクを起動するフローを入力します。
{ "Comment": "Example of executing an ECS task", "StartAt": "Run an ECS Task", "States": { "Run an ECS Task": { "Type": "Task", "Resource": "arn:aws:states:::ecs:runTask.sync", "Parameters": { "LaunchType": "FARGATE", "Cluster": "<クラスター ARN>", "TaskDefinition": "<タスク定義 ARN>:<リビジョン番号>", "NetworkConfiguration": { "AwsvpcConfiguration": { "Subnets": [ "<サブネットID>" ], "SecurityGroups": [ "<セキュリティグループID>" ], "AssignPublicIp": "ENABLED" } } }, "Retry": [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 3 } ], "End": true } } }
「次へ」をクリックします。
「ステートマシン名」に任意の名前を入力し、「ステートマシンの作成」を選択します。
「ステートマシンは正常に作成されました」と表示されたことを確認します。
EventBridge の作成
「アクション」から「EventBridge(CloudWatch イベント)ルールを作成」を選択します。
「名前」に任意の名前を入力し、「スケジュール」を選択します。「次へ」をクリックします。
実行間隔となるスケジュールパターンを入力し、「次へ」をクリックします。
「AWS のサービス」、「Step Functions ステートマシン」、作成したステートマシンの順に選択し、「次へ」をクリックします。
「次へ」をクリックします。
「ルールの作成」をクリックします。
「正常に作成しました」と表示されたことを確認します。
実際の挙動
EventBridgeで設定したタイミングになると、自動的にECSタスクが起動します。
タスクが正常に終了した場合、一度だけ実行されます。
タスクの実行時にエラーが発生した場合、Retryフィールドの設定に応じてリトライが実行されます。
参考資料
- Step Functions で Amazon ECS または Fargate タスクを管理する - AWS Step Functions
- Amazon ECS タスクのスケジューリング - Amazon Elastic Container Service
- スケジュールされたタスク - Amazon Elastic Container Service
- Step Functions ステートを作成マシンLambda の使用 - AWS Step Functions
- Step Functions のエラー処理 - AWS Step Functions
最後に
この記事が誰かのお役にたてば幸いです。
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。
脚注
- EventBridge ルールの再試行ポリシーはタスクの実行結果ではなく、RunTask APIの処理結果が対象 ↩