2021/05/26

AWS CLIのqueryオプションとは?概要や使い方を紹介

 
  

AWS CLIとは?


AWS CLIとは、Command Line Interfaceの略で、Amazonが提供しているクラウドコンピューティングサービスのAWSにアクセスし、管理できるオープンソースツールです。

AWS CLIは、入力されたコマンドを解釈するシェルを使用することでAWSのサービスとやり取りできます。シェルとは、キーボード入力のみでコンピュータに命令するCUIのコマンドラインシェルを意味します。

AWS CLIのシェルは、LinuxやmacOSで利用できる「Linuxシェル」や、WindowsのPowerShellやコマンドプロンプトで利用できる「Windowsコマンドライン」、また、PuTTYやSSHを使って「リモート」でも操作できます。

AWS CLIを利用すれば、AWSマネジメントコンソール上と同様に、アプリなどを実装するコマンドをシェルから実行できたり、GUIで行なっていた操作を自動化できたりします。

AWS CLIのqueryとは?


AWS CLIのqueryオプションとは、検索するデータ項目を指定するオプション構文です。AWS CLIのqueryオプションは、キーワードを組み合わせ、取り出すデータを制限したり、条件付与したりできます。

AWS CLIのqueryオプションは、データ項目を指定して出力できるSQL文でいうところのSELECT文が同等の役割を果たしています。また、AWS CLIでは、同じくデータベースを操作するfiltersオプションがありますが、SQL文でいうところのWHERE文の役割と同等な構文と言えます。

AWS CLIでは、queryオプションとfiltersオプションを組み合わせて、データを制御して出力するなど、様々な操作ができます。

ここからは、実際にAWS CLIのインストールから、queryオプションの利用例までを順番に紹介します。

AWS CLIをインストールする方法は?


MSIを使用して、WindowsにAWS CLIをインストールします。MSIとは、Microsoft Windows Installerの略でソフトウェアをインストールするためにパッケージ化されたファイル形式のひとつです。

今回のAWS CLIをインストールする前提として、OSはWindowsで、64ビットバージョンのWindows XP、またはそれ以降のもの、さらに管理者権限があることを条件とします。

AWS公式サイトに記載されている、AWS CLI MSIのダウンロードURLをクリックして、最新バージョンのAWS CLIインストーラをダウンロードします。

ダウンロードしたMSIを実行し、インストール先を選んで、画面の指示に従いインストールします。最後に「Finish」をクリックするとAWS CLIのインストールは完了です。

出典:Windows での AWS CLI バージョン 2 のインストール、更新、アンインストール|AWS
参照:https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cli

AWS CLI の基本設定


今回は、「aws configure」コマンドを利用して基本設定します。

「aws configure」コマンドを入力すると、AWS CLIから4つの認証情報の入力を求められます。4つの認証情報とは、アクセスキーID、アクセスキー、AWSリージョン、出力形式です。

まず、アクセスキーIDとアクセスキーは、IAMユーザーから確認します。AWSリージョンは、デフォルトのリージョン(東京リージョンなら「ap-northeast-1」)、そして、出力形式は、今回「json」で入力します。

4つの認証が成功したら、「aws ec2 describe-instances」とコマンドを入力して、AWSで起動中のAmazon EC2を表示させます。正常に動作できていれば、AWS CLIの基本設定は完了です。

queryオプションのコマンドで出力する方法は?


AWS CLIのqueryオプションをコマンドで出力する場合、「–query」コマンドを使用します。AWS CLIのqueryオプションは、JMESPathに準拠しています。JMESPathとは、JSON形式のクエリ言語のことです。

Queryオプションがどのような動作なのか比較するため、デフォルトでJSON形式の出力を紹介します。以下では、別のAmazon EC2インスタンスに添付された2つのAmazon EBSの例を記載しています。

queryを使わない場合

queryオプションを使用しないコマンド出力例は、以下の通りです。全て出力されるため、不要な情報まで引き出すことになり、読みづらくなります。

$ aws ec2 describe-volumes
{
    "Volumes": [
        {
            "AvailabilityZone": "us-west-2a",
            "Attachments": [
                {
                    "AttachTime": "2013-09-17T00:55:03.000Z",
                    "InstanceId": "i-a071c394",
                    "VolumeId": "vol-e11a5288",
                    "State": "attached",
                    "DeleteOnTermination": true,
                    "Device": "/dev/sda1"
                }
            ],
            "VolumeType": "standard",
            "VolumeId": "vol-e11a5288",
            "State": "in-use",
            "SnapshotId": "snap-f23ec1c8",
            "CreateTime": "2013-09-17T00:55:03.000Z",
            "Size": 30
        },
        {
            "AvailabilityZone": "us-west-2a",
            "Attachments": [
                {
                    "AttachTime": "2013-09-18T20:26:16.000Z",
                    "InstanceId": "i-4b41a37c",
                    "VolumeId": "vol-2e410a47",
                    "State": "attached",
                    "DeleteOnTermination": true,
                    "Device": "/dev/sda1"
                }
            ],
            "VolumeType": "standard",
            "VolumeId": "vol-2e410a47",
            "State": "in-use",
            "SnapshotId": "snap-708e8348",
            "CreateTime": "2013-09-18T20:26:15.000Z",
            "Size": 8
        }
    ]
}


queryを使った場合

queryオプションを使用したコマンド出力の例です。下記の例では、Volumesリストから最初のボリュームのみ表示するため、配列のインデックス作成に次のコマンドを使用しています。

aws ec2 describe-volumes --query 'Volumes[0]'


{
    "AvailabilityZone": "us-west-2a",
    "Attachments": [
        {
            "AttachTime": "2013-09-17T00:55:03.000Z",
            "InstanceId": "i-a071c394",
            "VolumeId": "vol-e11a5288",
            "State": "attached",
            "DeleteOnTermination": true,
            "Device": "/dev/sda1"
        }
    ],
    "VolumeType": "standard",
    "VolumeId": "vol-e11a5288",
    "State": "in-use",
    "SnapshotId": "snap-f23ec1c8",
    "CreateTime": "2013-09-17T00:55:03.000Z",
    "Size": 30
}


queryで*ワイルドカードを使った場合

次の例は、queryオプションでワイルドカード「*」を使用して、各ボリュームからVolumeIdとAvailabilityZone、Sizeの3つの要素を出力します。ワイルドカード「*」とは、任意の0文字以上を表します。JSONキーのエイリアスをそれぞれ指定する必要があります。

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


[
    {
        "AZ": "us-west-2a",
        "ID": "vol-e11a5288",
        "Size": 30
    },
    {
        "AZ": "us-west-2a",
        "ID": "vol-2e410a47",
        "Size": 8
    }
]


queryオプションでIAMユーザー一覧を表示する場合

queryオプションでIAMユーザー一覧を表示する場合は、AWS CLI出力を読みやすくするため、table形式で出力します。この場合、table型式(オプション)を使用しなければ、queryオプションのデフォルト出力は複雑で読みづらい表示になってしまいます。

aws iam list-users --output table


-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                                 ListUsers                                                                     |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
||                                                                                  Users                                                                      ||
|+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+|
||                         Arn                        |       CreateDate          |    PasswordLastUsed       |   Path   |        UserId         |   UserName  ||
|+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+|
||  arn:aws:iam::123456789012:user/Admin              | 2014-10-16T16:03:09+00:00 | 2016-06-03T18:37:29+00:00 | /        | AIDA1111111111EXAMPLE | Admin       ||
||  arn:aws:iam::123456789012:user/backup/backup-user | 2019-09-17T19:30:40+00:00 |                           | /backup/ | AIDA2222222222EXAMPLE | backup-user ||
||  arn:aws:iam::123456789012:user/cli-user           | 2019-09-17T19:11:39+00:00 |                           | /        | AIDA3333333333EXAMPLE | cli-user    ||
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+


queryオプションでEC2インスタンス一覧の取得

AWS CLIのqueryオプションとtableオプションを組み合わせて、選択した列要素を出力することができます。最初の例では、列名はアルファベット順ですが、2番目の例では、無名列が指定された順番に並んでいます。

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


------------------------------------------------------
|                   DescribeVolumes                  | 
+------------+----------------+--------------+-------+
|     AZ     |      ID        | InstanceId   | Size  |
+------------+----------------+--------------+-------+
|  us-west-2a|  vol-e11a5288  |  i-a071c394  |  30   |
|  us-west-2a|  vol-2e410a47  |  i-4b41a37c  |  8    |
+------------+----------------+--------------+-------+


aws ec2 describe-volumes --query 'Volumes[*].[VolumeId,Attachments[0].InstanceId,AvailabilityZone,Size]' --output table


----------------------------------------------------
|                  DescribeVolumes                 |
+--------------+--------------+--------------+-----+
|  vol-e11a5288|  i-a071c394  |  us-west-2a  |  30 |
|  vol-2e410a47|  i-4b41a37c  |  us-west-2a  |  8  |
+--------------+--------------+--------------+-----+


AWS CLIのqueryオプションを使って出力してみよう!


AWS CLIのqueryオプションは、ソフトウェアをインストールしないでAWSの各サービスとやり取りができ、また、tableオプションやfiltersオプションなどと組み合わせて使えるなど、多数のメリットがあります。

初めてAWS CLIを使う場合は、ヘルプコマンド「aws help」や「aws ec2 describe-instances help」などを使うと、使い方や多くのオプションを調べられます。

現在、AWSを導入する企業は増え続け、AWSエンジニアの需要が増加していくことが予測されます。AWSの知識を深めるためにも、無料で作成できるAWSアカウントを使ってみましょう。また、この記事を参考にしながら、ぜひAWS CLIのqueryオプションを使ってみてください。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】