dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

AWS CLIでECSのタスク定義を更新する

環境変数の更新など、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