AWS CLIの出力をjqコマンドで整形したり、必要な部分だけ抜き出すときにタグ情報が厄介。
ちょっと調べて、いい感じにNameタグだけを抜き出す記述を見つけたのでメモ。
.Tags[]? | select( .Key=="Name") | .Value
何が厄介なのか
{ "Addresses": [ { "PublicIp": "123.123.123.123", "AllocationId": "eipalloc-12345", ... "Tags": [ { "Key": "Name", "Value": "EIP-NATGW", }, { "Key": "CostCenter", "Value": "ABC", } ] }, ... ] }
こんな出力にしたいときにタグ情報からNameだけを抜き出すのが面倒。
{ "PublicIp": "123.123.123.123", "AllocationId": "eipalloc-12345", ... "Name": "EIP-NATGW", }, ...
他にもCSVにするためにこのように出力したいこともある。
"123.123.123.123","eipalloc-12345","EIP-NATGW" ...
解説
.Tags[]? # Tags配列を抜き出して(なければ無視する) | select( .Key=="Name") # 抜き出したオブジェクトのうちキーKeyがNameのものだけに絞り込み | .Value # 絞り込まれたオブジェクトのキーValueだけを返す
例
上記の例を実際にやってみるとこんな感じ。
$ aws ec2 describe-addresses \ | jq '.Addresses[] | {PublicIp, AllocationId, Name: (.Tags[]? | select( .Key=="Name") | .Value)}' { "PublicIp": "123.123.123.123", "AllocationId": "eipalloc-12345", "Name": "EIP-NATGW" } $ aws ec2 describe-addresses \ | jq -r '.Addresses[] | [.PublicIp, .AllocationId, (.Tags[]? | select( .Key=="Name") | .Value)] | @csv' "123.123.123.123","eipalloc-12345","EIP-NATGW"