AWS CLI からのコマンド出力の制御 - AWS Command Line Interface

AWS CLI からのコマンド出力の制御

このトピックでは、AWS Command Line Interface (AWS CLI) からの出力を制御するさまざまな方法を示します。

出力形式を選択する方法

AWS CLI は、次の 4 つの出力形式をサポートしています。

  • jsonJSON 文字列形式で出力されます。

  • yamlYAML 文字列形式で出力されます。(AWS CLI バージョン 2 でのみ利用できます。)

  • yaml-stream – 出力はストリーミングされ、YAML 文字列としてフォーマットされます。ストリーミングにより、大きなデータ型の処理を高速化できます。(AWS CLI バージョン 2 でのみ利用できます。)

  • text – 複数行のタブ区切り文字列値の形式で出力されます。これは、grepsed、または awk などのテキストプロセッサに出力を渡すのに役立ちます。

  • table – セルの罫線を形成する文字列 +|- を使用して表形式で出力されます。通常、情報は他の形式よりも読みやすい「わかりやすい」形式で表示されますが、プログラムとしては役立ちません。

設定」トピックで説明したように、出力形式は 3 つの異なる方法で指定できます。

  • config ファイルの名前付きプロファイルでの output オプションの使用 – 以下の例では、デフォルトの出力形式を text に設定しています。

    [default] output=text
  • AWS_DEFAULT_OUTPUT 環境変数の使用 – 以下の出力では、変数が変更されるか、セッションが終了するまで、このコマンドラインセッションでのコマンドの形式を table に設定しています。この環境変数を使用すると、config ファイルで設定された値が上書きされます。

    $ export AWS_DEFAULT_OUTPUT="table"
  • コマンドラインでの --output オプションの使用 – 以下の例では、この 1 つのコマンドのみの出力を json に設定しています。このコマンドでこのオプションを使用すると、現在設定されている環境変数または config ファイルの値をオーバーライドします。

    $ aws swf list-domains --registration-status REGISTERED --output json

--query パラメータを使用すると、どの形式の結果もカスタマイズおよびフィルタリングすることができます。詳細については、「--query オプションを使用して出力をフィルタリングする方法」を参照してください。

JSON 出力形式

JSON は AWS CLI のデフォルトの出力形式です。ほとんどのプログラミング言語は、組み込み関数を使用するか、公開されているライブラリを使用して、簡単に JSON 文字列をデコードできます。JSON 出力と --query オプションを強力な方法で組み合わせて、AWS CLI JSON 形式の出力をフィルタリングおよび書式設定することができます。

--query ではできない可能性がある高度なフィルタリングを行うには、コマンドライン JSON プロセッサである jq の使用を検討してください。これをダウンロードし、公式のチュートリアルを http://stedolan.github.io/jq/ で見ることができます。

以下は、JSON 出力の例です。

$ aws iam list-users --output json
{ "Users": [ { "Path": "/", "UserName": "Admin", "UserId": "AIDA1111111111EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/Admin", "CreateDate": "2014-10-16T16:03:09+00:00", "PasswordLastUsed": "2016-06-03T18:37:29+00:00" }, { "Path": "/backup/", "UserName": "backup-user", "UserId": "AIDA2222222222EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/backup/backup-user", "CreateDate": "2019-09-17T19:30:40+00:00" }, { "Path": "/", "UserName": "cli-user", "UserId": "AIDA3333333333EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/cli-user", "CreateDate": "2019-09-17T19:11:39+00:00" } ] }

YAML 出力形式

この機能は、AWS CLI バージョン 2 でのみ使用できます。

次の機能は、AWS CLI バージョン 2 を使用している場合にのみ有効です。AWS CLI バージョン 1 を使用している場合には無効です。バージョン 2 をインストールする方法の詳細については、「AWS CLI バージョン 2 のインストール、更新、アンインストール」を参照してください。

YAML は、YAML 形式のテンプレートをサポートする AWS CloudFormation など、YAML 形式の文字列を出力または使用するサービスとツールにより、プログラムで出力を処理する場合に適しています。

--query ではできない可能性がある高度なフィルタリングを行うには、コマンドライン YAML プロセッサである yq を検討してください。https://mikefarah.gitbook.io/yq/ からダウンロードして、関連ドキュメントを参照できます。

以下に YAML 出力例を示します。

$ aws iam list-users --output yaml
Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

YAML ストリーム出力形式

この機能は、AWS CLI バージョン 2 でのみ使用できます。

次の機能は、AWS CLI バージョン 2 を使用している場合にのみ有効です。AWS CLI バージョン 1 を使用している場合には無効です。バージョン 2 をインストールする方法の詳細については、「AWS CLI バージョン 2 のインストール、更新、アンインストール」を参照してください。

yaml-stream 形式では YAML 形式を使用します。また、データをユーザーにストリーミングすることで、大きなデータセットの応答性を向上させ、より高速に表示できます。クエリ全体がダウンロードされる前に、YAML データの表示および使用を開始できます。

--query ではできない可能性がある高度なフィルタリングを行うには、コマンドライン YAML プロセッサである yq を検討してください。http://mikefarah.github.io/yq/ からダウンロードして、ドキュメントを入手できます。

yaml-stream 出力例を次に示します。

$ aws iam list-users --output yaml-stream
- IsTruncated: false Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

次に示す yaml-stream 出力例は、--page-size パラメータによるストリーミングされた YAML コンテンツのページ分割に関連しています。

$ aws iam list-users --output yaml-stream --page-size 2
- IsTruncated: true Marker: ab1234cdef5ghi67jk8lmo9p/q012rs3t445uv6789w0x1y2z/345a6b78c9d00/1efgh234ij56klmno78pqrstu90vwxyx Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - IsTruncated: false Users: - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

テキストの出力形式

text 形式では、AWS CLI の出力がタブ区切りの行に整形されます。grepsedawk など、従来の Unix テキストツールでも、PowerShell スクリプトによって実行されるテキスト処理でも機能します。

text 出力形式は、以下に示す基本的な構造に従います。列は、基になる JSON オブジェクトの対応するキー名によってアルファベット順にソートされます。

IDENTIFIER sorted-column1 sorted-column2 IDENTIFIER2 sorted-column1 sorted-column2

以下に text 出力例を示します。各フィールドは他のフィールドからタブで区切られ、空のフィールドがある追加のタブが含まれます。

$ aws iam list-users --output text
USERS arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 / AIDA1111111111EXAMPLE Admin USERS arn:aws:iam::123456789012:user/backup/backup-user 2019-09-17T19:30:40+00:00 /backup/ AIDA2222222222EXAMPLE backup-user USERS arn:aws:iam::123456789012:user/cli-user 2019-09-17T19:11:39+00:00 / AIDA3333333333EXAMPLE cli-user

4 番目の列は PasswordLastUsed フィールドで、最後の 2 つのエントリは空です。これらのユーザーは AWS マネジメントコンソール にサインインしないためです。

重要

text 出力を指定する場合は、--query オプションも必ず使用して、一貫した動作を確保することを強くお勧めします

これは、AWS サービスから返される、テキスト形式では出力列が基本の JSON オブジェクトのキー名のアルファベット順に並べられるためであり、同様のリソースが同じキー名を持つとは限らないためです。たとえば、Linux ベースの Amazon EC2 インスタンスの JSON 表現には、Windows ベースのインスタンスの JSON 表現にはない要素が含まれる場合があり、その逆の場合もあります。また、リソースのキー値要素が将来の更新で追加または削除されて、列の順序が変わる可能性があります。このような場合、--querytext 出力の機能を補強して、出力形式に対する完全な制御を提供します。

次の例では、コマンドは表示する要素を指定し、列の順序をリスト表記 [key1, key2, ...] で定義します。これにより、正しいキー値が常に予期される列に表示されることを確信できます。最後に、AWS CLI は存在しないキーの値として None を出力していることに注目してください。

$ aws iam list-users --output text --query 'Users[*].[UserName,Arn,CreateDate,PasswordLastUsed,UserId]'
Admin arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 AIDA1111111111EXAMPLE backup-user arn:aws:iam::123456789012:user/backup-user 2019-09-17T19:30:40+00:00 None AIDA2222222222EXAMPLE cli-user arn:aws:iam::123456789012:user/cli-backup 2019-09-17T19:11:39+00:00 None AIDA3333333333EXAMPLE

以下の例では、grep および awkaws ec2 describe-instances コマンドからの text 出力で使用する方法を示しています。最初のコマンドは各インスタンスのアベイラビリティーゾーン、現在の状態、およびインスタンス ID を text 出力で表示します。2 番目のコマンドは、その出力を処理して、us-west-2a アベイラビリティーゾーンで実行中のすべてのインスタンスのインスタンス ID のみを表示します。

$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text
us-west-2a running i-4b41a37c us-west-2a stopped i-a071c394 us-west-2b stopped i-97a217a0 us-west-2a running i-3045b007 us-west-2a running i-6fc67758
$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | grep us-west-2a | grep running | awk '{print $3}'
i-4b41a37c i-3045b007 i-6fc67758

次の例は、さらに一歩踏み込んで、出力をフィルタリングする方法だけでなく、その出力を使用して、停止した各インスタンスのインスタンスタイプの変更を自動化する方法も示しています。

$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[State.Name, InstanceId]' --output text | > grep stopped | > awk '{print $2}' | > while read line; > do aws ec2 modify-instance-attribute --instance-id $line --instance-type '{"Value": "m1.medium"}'; > done

text 出力は、PowerShell でも使用できます。text 出力の列はタブ区切りであるため、PowerShell の `t 区切り文字を使用して、出力を配列に簡単に分割できます。次のコマンドは、最初の列 (AvailabilityZone) が文字列 us-west-2a に一致する場合に 3 列目 (InstanceId) の値を表示します。

PS C:\>aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | %{if ($_.split("`t")[0] -match "us-west-2a") { $_.split("`t")[2]; } }
-4b41a37c i-a071c394 i-3045b007 i-6fc67758

前の例では、--query パラメータを使用して基になる JSON オブジェクトを解析し、目的の列を取り出す方法を示していますが、PowerShell には、プラットフォーム間の互換性がない場合に JSON を処理する独自の機能があります。ほとんどのコマンドシェルでは、出力をテキストとして扱う必要がありますが、PowerShell では、ConvertFrom-JSON コマンドレットを使用して階層構造のオブジェクトを生成できます。その後、そのオブジェクトから必要なメンバーに直接アクセスできます。

(aws ec2 describe-instances --output json | ConvertFrom-Json).Reservations.Instances.InstanceId
ヒント

テキスト出力を行い、--query パラメータを使用して出力を単一のフィールドにフィルタリングすると、出力は 1 行のタブ区切り値になります。次の例に示すように、各値を別々の行に入れるには、出力フィールドを角括弧で囲みます。

タブ区切りの単一の行の出力

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].GroupName"
HRDepartment Developers SpreadsheetUsers LocalAdmins

[GroupName] を角括弧で囲むことで、各値を 1 行におさめることができます。

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].[GroupName]"
HRDepartment Developers SpreadsheetUsers LocalAdmins

テーブルの出力形式

table 形式は、複雑な AWS CLI 出力を人間が読み取れる表現で、表形式で生成します。

$ 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 オプションを table 形式と組み合わせて、raw 出力から事前に選択された要素のセットを表示することができます。ディクショナリ表記とリスト表記の出力の違いに注意してください。最初の例では、列名はアルファベット順ですが、2 番目の例では、名前のない列がユーザーによって定義された順序になっています。--query オプションの詳細については、「--query オプションを使用して出力をフィルタリングする方法」を参照してください。

$ 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 | +--------------+--------------+--------------+-----+

--query オプションを使用して出力をフィルタリングする方法

AWS CLI は、--query オプションによって、組み込みの JSON ベースの出力フィルタリング機能を提供します。--query パラメータは、JMESPath の仕様に準拠している文字列を受け入れます。

重要

指定する出力タイプ (jsonyamltext、または table) により、--query オプションの動作に影響があります。

  • --output text を指定した場合、出力は --query フィルタが適用される前にページ分割され、AWS CLI は出力の各ページで 1 回クエリを実行します。これにより、予期しない追加の出力が生成される場合があります (特に、フィルタで [0] のような配列要素をしている場合)。その場合、出力には各ページで最初に一致する要素が含まれるためです。--output text によって余分な出力が生成されないようにするには、--no-paginate を指定できます。これにより、フィルタは完全な結果セットにのみ適用されます。ただし、ページ分割が削除されるため、出力が長くなる可能性があります。また、headtail など他のコマンドラインツールを使用して、必要な値のみにさらに出力をフィルタリングすることもできます。

  • --output json を指定した場合、完全に単一のネイティブな JSON 構造として処理されてから --query フィルタが適用されます。AWS CLI は JSON 構造全体に対してクエリを 1 回だけ実行し、フィルタリングされた JSON 結果を生成してから出力されます。

  • --output yaml を指定した場合、完全に単一のネイティブな JSON 構造として処理されてから --query フィルタが適用されます。AWS CLI は JSON 構造全体に対してクエリを 1 回だけ実行し、フィルタリングされた JSON 結果を生成してから、YAML 形式に変換されて出力されます。

--query がどのように動作するかを示すために、以下のデフォルトの JSON 出力から始めます。ここでは、別々の Amazon EC2 インスタンスにアタッチされた 2 つの Amazon Elastic Block Store (Amazon EBS) ボリュームについて説明します。

$ 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 } ] }

まず、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 }

次の例では、ワイルドカード表記 [*] を使用して、リストのすべてのボリュームを反復処理し、各ボリュームから VolumeIdAvailabilityZone、および Size の 3 つの要素を抽出します。ディクショナリ表記では、{Alias1:JSONKey1,Alias2:JSONKey2} のように、各 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 } ]

ディクショナリ表記では、key1.key2[0].key3 のようにキーを連結して、構造内で深く入れ子になった要素をフィルタリングすることもできます。以下の例では、単純に Attachments[0].InstanceId に対して InstanceId キーのエイリアスを作成して、これを示します。

$ aws ec2 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}'
[ { "InstanceId": "i-a071c394", "AZ": "us-west-2a", "ID": "vol-e11a5288", "Size": 30 }, { "InstanceId": "i-4b41a37c", "AZ": "us-west-2a", "ID": "vol-2e410a47", "Size": 8 } ]

リスト表記 [key1, key2] を使用して、複数の要素をフィルタリングすることもできます。これにより、フィルタリングされたすべての属性が、型に関係なく、オブジェクトごとに 1 つの順序付きリスト形式になります。

$ aws ec2 describe-volumes --query 'Volumes[*].[VolumeId, Attachments[0].InstanceId, AvailabilityZone, Size]'
[ [ "vol-e11a5288", "i-a071c394", "us-west-2a", 30 ], [ "vol-2e410a47", "i-4b41a37c", "us-west-2a", 8 ] ]

特定のフィールドの値によって結果をフィルタ処理するには、JMESPath "?" 演算子を使用します。次のクエリの例では、us-west-2a アベイラビリティーゾーンのボリュームのみを出力します。

$ aws ec2 describe-volumes \ --query 'Volumes[?AvailabilityZone==`us-west-2a`]'
注記

JMESPath クエリ式で上記の "us-west-2" のようなリテラル値を指定するときは、適切に読み込まれるように、値をバックティック (` `) で囲む必要があります。

コマンドの出力から必要な詳細のみを取得する方法を示す他の例を以下に示します。

以下の例では、Amazon EC2 ボリュームを表示します。このサービスでは、us-west-2a アベイラビリティーゾーンでアタッチされたすべてのボリュームのリストが生成されます。--query パラメータでは、Size 値が 50 を超えるボリュームにのみ出力を制限し、ユーザー定義の名前を持つ指定されたフィールドのみ表示されます。

$ aws ec2 describe-volumes \ --filters "Name=availability-zone,Values=us-west-2a" "Name=status,Values=attached" \ --query 'Volumes[?Size > `50`].{Id:VolumeId,Size:Size,Type:VolumeType}'
[ { "Id": "vol-0be9bb0bf12345678", "Size": 80, "Type": "gp2" } ]

次の例では、いくつかの基準を満たすイメージのリストを取得します。--query パラメータを使用して、CreationDate で出力を絞り込み、最新のイメージのみ選択します。最後に、1 つのイメージの ImageId が表示されます。

$ aws ec2 describe-images \ --owners amazon \ --filters "Name=name,Values=amzn*gp2" "Name=virtualization-type,Values=hvm" "Name=root-device-type,Values=ebs" \ --query "sort_by(Images, &CreationDate)[-1].ImageId" \ --output text
ami-00ced3122871a4921

次の例では、--query パラメータを使用してリスト上の特定の項目を検索し、その項目から情報を抽出します。この例では、指定されたサービスエンドポイントに関連付けられているすべてのアベイラビリティーゾーンをリストします。指定された ServiceName が含まれる ServiceDetails リストから項目を抽出し、選択されたその項目から AvailabilityZones フィールドを出力します。

$ aws --region us-east-1 ec2 describe-vpc-endpoint-services \ --query 'ServiceDetails[?ServiceName==`com.amazonaws.us-east-1.ecs`].AvailabilityZones'
[ [ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e", "us-east-1f" ] ]

また、--query パラメータを使用して、出力の項目をカウントすることもできます。以下の例では、length を使用してリスト内の数をカウントすることで、1,000 IOPS を超える利用可能なボリュームの数を表示します。

$ aws ec2 describe-volumes \ --filters "Name=status,Values=available" \ --query 'length(Volumes[?Iops > `1000`])'
3

次の例は、指定された日付以降に作成されたすべてのスナップショットを一覧表示する方法を示しています (例: 出力の利用可能な一部のフィールド)。

$ aws ec2 describe-snapshots --owner self \ --output json \ --query 'Snapshots[?StartTime>=`2018-02-07`].{Id:SnapshotId,VId:VolumeId,Size:VolumeSize}' \
[ { "id": "snap-0effb42b7a1b2c3d4", "vid": "vol-0be9bb0bf12345678", "Size": 8 } ]

次の例では、作成した最新の 5 つの Amazon マシンイメージ (AMI) を最新のものから古いものの順に並べ替えています。

$ aws ec2 describe-images \ --owners self \ --query 'reverse(sort_by(Images,&CreationDate))[:5].{id:ImageId,date:CreationDate}'
[ { "id": "ami-0a1b2c3d4e5f60001", "date": "2018-11-28T17:16:38.000Z" }, { "id": "ami-0a1b2c3d4e5f60002", "date": "2018-09-15T13:51:22.000Z" }, { "id": "ami-0a1b2c3d4e5f60003", "date": "2018-08-19T10:22:45.000Z" }, { "id": "ami-0a1b2c3d4e5f60004", "date": "2018-05-03T12:04:02.000Z" }, { "id": "ami-0a1b2c3d4e5f60005", "date": "2017-12-13T17:16:38.000Z" } ]

次の例では、指定した Auto Scaling グループ内の異常なインスタンスの InstanceId のみを表示しています。

$ aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-name My-AutoScaling-Group-Name \ --output text \ --query 'AutoScalingGroups[*].Instances[?HealthStatus==`Unhealthy`].InstanceId'

--query オプションは、このトピックで前述した出力形式と組み合わせて、出力の内容とスタイルのカスタマイズに使用できる強力なツールです。

JMESPath の詳細な例と完全な仕様、基盤となる JSON 処理ライブラリについては、「http://jmespath.org/specification.html」を参照してください。

出力のデフォルトのページャープログラムを設定する方法

この機能は、AWS CLI バージョン 2 でのみ使用できます。

次の機能は、AWS CLI バージョン 2 を使用している場合にのみ有効です。AWS CLI バージョン 1 を使用している場合には無効です。バージョン 2 をインストールする方法の詳細については、「AWS CLI バージョン 2 のインストール、更新、アンインストール」を参照してください。

AWS CLI バージョン 2 では、クライアント側のページャープログラムを出力に使用できます。デフォルトでは、この機能はオペレーティングシステムのデフォルトのページャープログラムを介してすべての出力を返します。クライアント側のページ分割は、指定したサーバー側のページ分割の後に実行されます。「ページ分割」を参照してください。

外部ページングプログラムの使用をすべて無効にするには、変数を空の文字列に設定します。

次の 2 つの方法で出力ページャーを指定できます。

config ファイルの cli_pager オプションを使用する

次の例では、デフォルトの出力ページャーを less プログラムに設定します。

[default] cli_pager=less

以下の例では、ページャーの使用を無効にします。

[default] cli_pager=

AWS_PAGER 環境変数を使用する

次の例では、デフォルトを less に設定します。

Linux and macOS
$ export AWS_PAGER="less"
Windows
C:\> setx AWS_PAGER "less"

以下の例では、ページャーの使用を無効にします。

Linux and macOS
$ export AWS_PAGER=""
Windows
C:\> setx AWS_PAGER ""