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

RDSを定期的に停止するLambdaを作る

手動起動は大変なので

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

CloudWatchアラームを一時的に無効化する

AWS CLIで設定する必要がある

Alexaに気温と二酸化炭素濃度を教えてもらう

「Alexa、気温」でセンサー情報を教えてくれるようになった

CloudWatchのカスタムメトリクスを減らす

あまりチェックしないセンサー値の送信を止めた