Linux
aws-cli
ECS

aws cliを使ってECSのクラスタに紐づいた全コンテナインスタンスIDをAZごとに取得した件

やりたいこと

以下の赤い四角で囲まれた部分をAZごとに取得したい。

WS000000.JPG


取得した後の用途としては以下のようなコマンド

#指定したコンテナインスタンスの"Status"を"Draining"にする

aws ecs update-container-instances-state --cluster ${CLUSTERS} \
--container-instances ${CONTAINER_INSTANCE_ID} \
--status DRAINING

参考:https://docs.aws.amazon.com/cli/latest/reference/ecs/update-container-instances-state.html

#指定したコンテナインスタンスの"RunningTask"を取得

aws ecs describe-container-instances --cluster ${CLUSTERS} \
--container-instances ${CONTAINER_INSTANCE_ID} \
--query containerInstances[].runningTasksCount

参考:https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-container-instances.html

はまった点

クラスターに紐づいたコンテナインスタンスIDをAZごとに取得しようとすると以下のように出力されてしまう。

#実行コマンド

aws ecs list-container-instances \
--cluster ${CLUSTERS} \
--query containerInstanceArns[*] \
--filter "attribute:ecs.availability-zone == ${AZ}"
#出力結果

[
    "arn:aws:ecs:us-west-2:************:container-instance/********-****-****-****-************",
    "arn:aws:ecs:us-west-2:************:container-instance/********-****-****-****-************",
    "arn:aws:ecs:us-west-2:************:container-instance/********-****-****-****-************",
    "arn:aws:ecs:us-west-2:************:container-instance/********-****-****-****-************",
    "arn:aws:ecs:us-west-2:************:container-instance/********-****-****-****-************"
]

取得したいのは********-****-****-****-************となっている箇所。
リファレンスを読んでも、この箇所だけ抜き出すことができなそう。

取得方法

しょうがないので、ださいけど以下の方法で整形して取得。

#実行コマンド

aws ecs list-container-instances --cluster ${CLUSTERS} \
--query containerInstanceArns[*] \
--filter "attribute:ecs.availability-zone == ${AZ}" | \
sed "s/.\+\///g" | sed "s/[\"|\,]//g" | \
egrep -v "\[|\]"`
#出力結果

********-****-****-****-************
********-****-****-****-************
********-****-****-****-************
********-****-****-****-************
  1. sedコマンドで/より左を消す
  2. sedコマンドで行末にあるダブルクオーテーションとカンマを消す
  3. egrepコマンドで[, ]を消す