🍗
特定のタグを持つEC2のIDをすべて取得する(awscli,jq)
はじめに
特定のタグxxxx
を持つリソースのyyyy
を抜き出す
というのは往々にしてあると思います。
今回はその練習のため、awscliとjqで特定のタグを持つEC2のインスタンスIDをすべて抜き出しました。
題材
ASGで生み出した、
- key:Name
- value:SpotTest
なインスタンスのIDを抜き出します。
awscli
ワンライナー
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=SpotTest" --query "Reservations[*].Instances[*].InstanceId" --output text
i-08d541693bd9e00e4
i-08a0a29180d744a9b
i-0fc21fe6e5a615c68
ポイント
-
--filters
で出力結果をタグで絞り込み -
--query
で出力項目をインスタンスIDで絞り込み - keyがNameであることを表す
Name=tag:Name
は慣れない
jq
ワンライナー
$ aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(any(.Tags[]; .Key == "Name" and .Value == "SpotTest")) | .InstanceId'
i-08d541693bd9e00e4
i-0ab41c87194dbcd4b
i-08a0a29180d744a9b
i-0b2ec237c2489fdef
i-0fc21fe6e5a615c68
i-03d627a074856a114
ポイント
-
any
でタグ配列内.key.valueが指定した値であればtrueを返す -
any
の結果がtrueであった場合、.Reservations[].Instances[]
を選択し、そのInstanceId
を取得する - jq便利だけど難しいな...
参考
Discussion