AWS CLIでのオプションquery句の使い方


aws cliで取得した結果について、その後に別言語の処理で一生懸命パース処理していませんか?
自分でも、以前はrubyで一生懸命パースしてました、しかし、欲しい値が決まっている場合には、queryで絞り込むのが効率的です。

query句を使用しない場合

aws cli でec2のdescribe-instancesをそのまま実行する例で

コマンド

aws ec2 describe-instances

結果例

{
    "Reservations": [
        {
            "Instances": [
                {
                    "InstanceId": "i-xxaeb3215cbbfxxxx",
                    "InstanceType": "t2.micro",
                    、、、、
                }
            ]
        },
        {
            "Instances": [
                {
                    "InstanceId": "i-xxefe9832fbbcxxxx",
                    "InstanceType": "t2.nano",
                    、、、、
                }
            ]
        },
        、、、、
    ]
}

のようなjsonの戻り値があるはずです。

query句を使用して出力結果を絞り込む

単一項目を取得したい

単一項目の時は簡単です。
例えば、InstanceIdを取得したい場合
InstanceIdは、Reservations->Instances->InstanceIdという構造の項目なので
コマンド

aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId'

結果

[
    "i-xxaeb3215cbbfxxxx",
    "i-xxefe9832fbbcxxxx",
    、、、、
]

複数項目

複数項目の時は、少し難しくなります
例えば、InstanceIdとInstanceTypeを取得したい場合

1次元配列複数で取得する

コマンド

aws ec2 describe-instances --query '[Reservations[].Instances[].InstanceId, Reservations[].Instances[].InstanceType]'

結果

[
    [
        "i-xxaeb3215cbbfxxxx",
        "i-xxefe9832fbbcxxxx",
        、、、、
    ],
    [
        "t2.micro",
        "t2.nano",
        、、、、
    ]
]

2次元配列で取得する

コマンド

aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId, InstanceType]'

結果

[
    [
        "i-xxaeb3215cbbfxxxx",
        "t2.micro"
    ],
    [
        "i-xxefe9832fbbcxxxx",
        "t2.nano"
    ],
    、、、、
]

まとめ

今回はのように同じ深さの項目ではない、違う深さの項目を取得する場合にはもう少し難易度があがりますが、まぁ、このような感じです。
では、皆様頑張りましょう