質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

1909閲覧

awsのcliでTagのNameをうまく取得できない

ketuge

総合スコア27

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/10/08 04:35

編集2021/10/08 04:36

要件 

cliにてElastic IpをTagのName順に一覧取得したい

状況

以下のコマンドにてElastic Ip情報を得られる

aws ec2 describe-addresses --output json

出力結果

{ "Addresses": [ { "Domain": "vpc", "PublicIpv4Pool": "amazon", "Tags": [ { "Value": "test4", "Key": "Name" } ], "PublicIp": "***.115***.***", "AllocationId": "eipalloc-***", "NetworkBorderGroup": "ap-northeast-1" }, { "Domain": "vpc", "PublicIpv4Pool": "amazon", "Tags": [ { "Value": "test2", "Key": "Name" } ], "PublicIp": "3.***.***.***", "AllocationId": "eipalloc-***", "NetworkBorderGroup": "ap-northeast-1" }, { "Domain": "vpc", "PublicIpv4Pool": "amazon", "Tags": [ { "Value": "test3", "Key": "Name" } ], "PublicIp": "54.***.***.***", "AllocationId": "eipalloc-***", "NetworkBorderGroup": "ap-northeast-1" } ] }

問題点

以下のシェルスクリプトで--queryのsort_byでTags:Tags[].Value順に
AllocationId一覧を出力しようとしたところエラーとなりました。

Tags:Tags[].Valueの代わりにPublicIpを指定したところ正常に出力されたので

Tags:Tags[].Valueの指定が悪いと思うのですがどのような形にすべきでしょうか?

そもそも、--queryによるsort_by()が公式ドキュメントではわかりにくく困っております。

REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk -F\" '{print $4}'` aws ec2 describe-addresses --region=$REGION --query 'sort_by(Addresses[].{Id:AllocationId,Tags:Tags[].Value},&Tags)'

エラー内容

In function sort_by(), invalid type for value: {u'Id': 'eipalloc-***', u'Tags': ['test4']}, expected one of: ['string', 'number'], received: "array"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

参考にした公式ドキュメントを貼っておきます。

AWS CLI 出力をフィルタリングする - AWS Command Line Interface

投稿2021/10/09 00:06

jhashimoto

総合スコア838

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

これでAllocationIdとリソース名がとれるので、

aws ec2 describe-addresses --region=$REGION --query 'Addresses[].[AllocationId, Tags[?Key == `Name`].Value]' [ [ "eipalloc-xxxxxxxxxx", [ "yyyyy" ] ] ]

これでどうでしょうか?

aws ec2 describe-addresses --region=$REGION --query 'sort_by(Addresses[].{Id:AllocationId, Name:Tags[?Key == `Name`].Value}, &Name[0])'

投稿2021/10/08 23:55

編集2021/10/09 00:03
jhashimoto

総合スコア838

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ketuge

2021/10/09 18:55

ありがとうございました。arrryでの比較エラーでしたがご指摘通り[0]指定でなおりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問