AWS CLIで階層の違う項目を一緒に出力する方法と注意点


やりたい事

ec2 describe-instancesの情報からインスタンスIDとステータス(異なる階層の情報)を並べて表示したい。

やってみた

AWSの公式サイトに以下のサンプルがあったので・・・

aws ec2 describe-volumes \
--query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}'

以下のコマンドを作成して実行!

aws ec2 describe-instances \
--query 'Reservations[].Instances[].{INSTANCE_ID:InstanceId,INSTANCE_TYPE:InstanceType,STATE:State[0].Name}'




が、駄目!
で、色々試してみたところ、以下のコマンドで表示する事に成功!

aws ec2 describe-instances \
--query 'Reservations[].Instances[].{INSTANCE_ID:InstanceId,INSTANCE_TYPE:InstanceType,STATE:State.Name}' \

わかった事

describe-volumesとdescribe-instancesの情報を見ていて微妙な違いを発見!

describe-volumesで表示している項目の内容

"Attachments": [
    {
        "AttachTime": "2018-03-29T02:01:46.000Z", 
        "InstanceId": "i-xxxxxxxx", 
        "VolumeId": "vol-yyyyyyyy", 
        "State": "attached", 
        "DeleteOnTermination": true, 
        "Device": "/dev/xvda"
    }
], 

describe-instancesで表示したい項目の内容。

"State": {
    "Code": 16, 
    "Name": "running"
}, cribe-instances

describe-volumesは大括弧で囲まれていて、describe-instancesは表示したい項目が中括弧で囲まれてる!!
だからいくら同じ書き方しても駄目だったんですねー。
これからもっと注意してデータを確認しようと思います...orz