aws-cli 1.3.6 を使用して、名前と状態を含む ec2 インスタンスの単純なテーブルを取得しようとしています。--query と JMESpath のドキュメントを見ていて、「キー」項目が名前と等しいマップの「値」項目を選択できました。これは、インスタンス名を取得するのに役立ちます。したがって、以下のコードは機能するようです
aws ec2 describe-instances --output table --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value'
そしてこれを提供します:
-------------------
|DescribeInstances|
+-----------------+
| Name1 |
| Name2 |
+-----------------+
ただし、状態を追加したい場合は、期待どおりにならないことがあります。使用する
aws ec2 describe-instances --output table --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value,State.Name]'
配達します
-------------------
|DescribeInstances|
+-----------------+
| Name1 |
| stopped |
| Name2 |
| stopped |
+-----------------+
名前と状態を持つ 2 列のテーブルの代わりに。
出力を JSON にすると、タグの選択によってリスト (1 要素のリスト) が返されることがわかります。これがおそらく問題です。
[
[
[
"Name1"
],
"stopped"
],
[
[
"Name2"
],
"stopped"
]
]
最初の要素を選択して、このリストをスカラーに変換できませんでした。これは動作しません。名前として空のリストを返します。
aws ec2 describe-instances --output json --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value[0],State.Name]'
これと同じ
aws ec2 describe-instances --output json --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value[][0],State.Name]'
これに対処する唯一の方法は、結合機能を使用することです。要素は 1 つしか期待していないので問題ありませんが、少しハッキリしているようです。
aws ec2 describe-instances --output table --query 'Reservations[].Instances[].[join(`,`,Tags[?Key==`Name`].Value),State.Name]'
---------------------------
| DescribeInstances |
+-------------+-----------+
| Name1 | stopped |
| Name2 | stopped |
+-------------+-----------+
したがって、問題は次のとおりです。フィルターの結果の最初の要素を選択する方法はあります(?Key==XXXX)
か[0]
?
前もって感謝します!