Fargate ECSで1回限りのバッチ処理を実行する

公開日時

ECSで1回限りのバッチ処理を実行したい場合はタスクを使用する。

公式ドキュメントだとマネージメントコンソールからの操作方法しか載っていなかったが、cliで実行したかったのでaws cliを使ってecs run-taskコマンドを実行することにした。

Fargate上にClusterやServiceが動いている前提で、1回限りのタスク(今回は例としてRailsのrake routes)を実行する場合は以下のようにする。

aws ecs run-task \
--region ${AWS_DEFAULT_REGION} \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[${SUBNET_ID}],securityGroups=[${SECURITY_GROUP_ID}],assignPublicIp=ENABLED}" \
--cluster ${CLUSTER_NAME} \
--task-definition ${TASK_NAME} \
--overrides "{\"containerOverrides\": [{\"name\": \"${CONTAINER_NAME}\",\"command\": [\"bundle\", \"exec\", \"rake\", \"routes\"]}]}"

network-configurationオプションを指定しないと↓のエラーになるので注意。

An error occurred (InvalidParameterException) when calling the RunTask operation: 
Network Configuration must be provided when networkMode 'awsvpc' is specified.

network-configurationオプションに指定する内容については↓を実行すると確認できる。

aws ecs describe-services --region ${AWS_DEFAULT_REGION} --cluster ${CLUSTER_NAME} --services ${SERVICE_NAME}

これで1回限りのECSタスクを手軽に実行できるようになった。

参考


Related #aws

Step Functionsステートマシンから別のStep Functionsを呼び出す

複雑なステートマシンを小さいステートマシンに分割しておけばテストと確認がやりやすくなる

マネージメントコンソール上のエディタでLambdaのコードを書く際にnpmライブラリを追加したい

ローカルでライブラリをインストールしてからインポートする必要があった

Amazon API Gatewayのタイムアウト設定は最大29秒まで

上限緩和もできないので注意

MFA必須のスイッチロールアカウントでaws cliを使う

switch role用のprofileを追加する

AWSのコスト異常検出を設定する

意図しない課金を防ぐためにとりあえず設定しておくと良さそう