🍗

特定のタグを持つEC2のIDをすべて取得する(awscli,jq)

2023/06/13に公開

はじめに

特定のタグ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便利だけど難しいな...

参考

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-usage-filter.html
https://open-groove.net/aws-links/aws-cli-examples/
https://www.tohoho-web.com/ex/jq.html

Discussion