環境変数の更新など、ECSのタスク定義を更新したいが、数が膨大で人の手に負えないことがある。 そんなときはシェルスクリプトを使って更新しろ。
このスクリプトはタスク定義ごとに最新のものを取得し、そのタスク定義をそのまま新しいものとして登録する。
タスク定義の一部を更新したいときはsedなどで./task-def/${name}
へjsonを一時出力する前にパイプで置換してやれば良い。
#!/bin/bash set -euo pipefail cd "$(dirname "$0")" mkdir -p ./task-def aws ecs list-task-definitions --status ACTIVE --query "taskDefinitionArns" | jq --raw-output --monochrome-output '.[]' | tac | awk -F':' 'tmp!=$6{print $0}{tmp=$6}' | \ while read task; do name=$(echo ${task} | sed -E 's/.+\/(.+):[0-9]+$/\1/') echo "${name}" aws ecs describe-task-definition --task-definition "${task}" | jq --monochrome-output '.taskDefinition | del(.status, .compatibilities, .taskDefinitionArn, .revision, .requiresAttributes, .registeredAt, .registeredBy)' > ./task-def/${name} aws ecs register-task-definition --family ${name} --cli-input-json fileb://./task-def/${name} > /dev/null done