AWS CLIのクエリの使い方

2018年3月9日

AWS Connand Line Interface

AWS CLI の使い方を 1 から教えるシリーズ 3 回目。前回はフィルタをやりました

AWS Connand Line Interface
AWS CLIのフィルタの使い方

AWS CLI の使い方を 1 から教えるシリーズ 2 回目。前回 は AWS CLI のインストール方法と初期設定につ ...

続きを見る

今回はクエリの使い方を紹介します。フィルタは検索条件を指定するときに使うのに対し、クエリは出力する項目を選択するときに使います。

目次

  1. クエリとは
  2. JMESPath の使い方
  3. ec2 describe-instances でのサンプル

クエリとは

--query オプションを使うと、出力する項目を指定することができます。

まずはクエリを使わない例です。サブネットの一覧を表示しています。

aws ec2 describe-subnets
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1c",
            "AvailableIpAddressCount": 4091,
            "CidrBlock": "172.31.0.0/20",
            "DefaultForAz": true,
            "MapPublicIpOnLaunch": true,
            "State": "available",
            "SubnetId": "subnet-30e19d68",
            "VpcId": "vpc-49ee852d",
            "AssignIpv6AddressOnCreation": false,
            "Ipv6CidrBlockAssociationSet": []
        },
        ...
    ]
}

--query オプションを使って、CidrBlock の項目だけ取り出した例です。

aws ec2 describe-subnets --query "Subnets[].CidrBlock"
[
    "172.31.0.0/20",
    "172.31.32.0/20",
    "172.31.16.0/20"
]

query オプションに Subnets[].CidrBlock と書いています。これは何でしょうか。help を調べてみましょう。

aws help
...
OPTIONS
...
       --query (string)
       A JMESPath query to use in filtering the response data.
...

query オプションには JMESPath が使えます。JMESPath とは JSON の クエリ言語です。JMEPath を使うと、JSON の情報を条件を指定して取り出したり、整形したりできます。

JMESPath の使い方

JMESPath はたくさんの機能があるので、まずは JMESPath Tutorial を見ながら試してみるのが良いです。

以下の 4 つをよく使うので、まずはこれだけ覚えましょう。

ec2 describe-instances でのサンプル

では、実際のよくある使い方を見ていきましょう。以下は ec2 describe-instances コマンドの結果(抜粋)です。

aws ec2 describe-instances
{
    "Reservations": [
        {
            "Groups": [],
            "Instances": [
                {
                    "InstanceId": "i-054c85600ebf0c9e9",
                    "PrivateIpAddress": "172.31.18.60",
                    "State": {
                        "Name": "running"
                    },
                    "Tags": [
                        {
                            "Key": "Name",
                            "Value": "my-instance"
                        },
                        {
                            "Key": "Environment",
                            "Value": "production"
                        }
                    ]
                }
        }
    ]
}

この中から、InstanceId と PrivateIpAddress と State.Name を取り出すには以下のようにします。

aws ec2 describe-instances \
    --query "Reservations[].Instances[].[InstanceId,PrivateIpAddress,State.Name]"
[
    [
        "i-054c85600ebf0c9e9",
        "172.31.18.60",
        "running"
    ]
],
[
    [
        "i-0c24df1929f892d2a",
        "172.31.24.253",
        "stopped"
    ]
]

--output text オプションを使うと見やすくなることもあります。状況に応じて使い分けます。

aws ec2 describe-instances \
    --query "Reservations[].Instances[].[InstanceId,PrivateIpAddress,State.Name]" \
    --output text
i-054c85600ebf0c9e9    172.31.18.60   running
i-0c24df1929f892d2a    172.31.24.253  stopped

Tags のように Key と Value の組み合わせを取り出すときはこのようにします。

aws ec2 describe-instances --query "Reservations[].Instances[].Tags[?Key=='Name'].Value"
 [
    [
        [
            "my-instance"
        ]
    ]
]

まとめ

いかがでしたか。3 回に渡って紹介した AWS CLI の使い方は今回で終わりです。第 1 回の記事でお伝えしたように、ポイントは help を使いこなすことです。知りたいことは help でその場で調べられるようにしましょう。

それでは良い AWS CLI ライフを。

第 1 回目の記事はこちらから。

AWS Connand Line Interface
AWS CLI入門

AWS CLI をの使い方を教える機会があったのでそのときのメモを残しておきます。AWS をコマンドラインで操作すること ...

続きを見る

-技術ブログ
-