翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
での出力のフィルタリング AWS CLI
AWS Command Line Interface (AWS CLI) には、サーバー側とクライアント側のフィルタリングの両方があり、個別に、または一緒に使用して AWS CLI 出力をフィルタリングできます。サーバー側のフィルタリングが最初に処理され、クライアント側のフィルタリングのために出力が返されます。
-
サーバー側のフィルタリングは でサポートされておりAPI、通常は
--filter
パラメータを使用して実装します。このサービスは、大規模なデータセットのHTTP応答時間を短縮できる一致する結果のみを返します。 -
クライアント側のフィルタリングは、
--query
パラメータを使用して AWS CLI クライアントによってサポートされます。このパラメータには、サーバー側のフィルタリングにはない可能性がある機能があります。
サーバー側のフィルタリング
のサーバー側のフィルタリング AWS CLI は、 AWS サービス によって提供されますAPI。この AWS サービスは、フィルターに一致するHTTPレスポンス内のレコードのみを返します。これにより、大規模なデータセットのHTTPレスポンス時間が短縮される可能性があります。サーバー側のフィルタリングはサービス によって定義されるためAPI、パラメータ名と関数はサービスによって異なります。フィルタリングに使用される一般的なパラメータ名は次のとおりです。
-
--filters
(ec2、autoscaling 、rds など)。 -
単語「
filter
」で始まる名前 (aws dynamodb scan
コマンドの --filter-expression
など)。
特定のコマンドにサーバー側のフィルタリングとフィルタリングルールがあるかどうかについては、AWS CLI バージョン 2 リファレンスガイド
クライアント側のフィルタリング
AWS CLI には、 --query
パラメータを使用した組み込みJSONの ベースのクライアント側のフィルタリング機能があります。--query
パラメータは、出力の内容とスタイルをカスタマイズするために使用できる強力なツールです。--query
パラメータは、サーバーから返されるHTTPレスポンスを受け取り、結果を表示する前にフィルタリングします。フィルタリングの前にHTTPレスポンス全体がクライアントに送信されるため、クライアント側のフィルタリングは、大規模なデータセットのサーバー側のフィルタリングよりも遅くなる可能性があります。
クエリはJMESPath構文
重要
指定する出力タイプによって、--query
オプションの動作が変更されます。
-
を指定すると
--output text
、出力は--query
フィルターが適用される前にページ分割され、 は出力の各ページでクエリを 1 回 AWS CLI 実行します。このため、クエリには各ページで最初に一致する要素が含まれており、予期しない余分な出力が発生する可能性があります。出力をさらにフィルタリングするには、head
やtail
などの他のコマンドラインツールを使用できます。 -
--output json
、--output yaml
、--output yaml-stream
を指定する場合、単一のネイティブな構造として完全に処理されてから--query
フィルターが適用されます。は、構造全体に対してクエリを 1 回だけ AWS CLI 実行し、フィルタリングされた結果を生成して出力します。
クライアント側のフィルタリングのトピック
開始する前に
これらの例で使用されているフィルター式を使用する場合は、ターミナルシェルに正しい引用規則を使用してください。詳細については、「の文字列での引用符とリテラルの使用 AWS CLI」を参照してください。
次のJSON出力は、 --query
パラメータが生成できる内容の例を示しています。出力は、個別の Amazon EC2インスタンスにアタッチされた 3 つの 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 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ] }
識別子
識別子は、出力値のラベルです。フィルターを作成するときは、識別子を使用してクエリ結果を絞り込みます。次の出力例では、Volumes
、AvailabilityZone
、AttachTime
などのすべての識別子が強調表示されます。
$
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 }, { "AvailabilityZone
": "us-west-2a", "Attachments
": [ { "AttachTime
": "2020-11-20T19:54:06.000Z", "InstanceId
": "i-1jd73kv8", "VolumeId
": "vol-a1b3c7nd", "State
": "attached", "DeleteOnTermination
": true, "Device
": "/dev/sda1" } ], "VolumeType
": "standard", "VolumeId
": "vol-a1b3c7nd", "State
": "in-use", "SnapshotId
": "snap-234087fb", "CreateTime
": "2020-11-20T19:54:05.000Z", "Size
": 15 } ] }
詳細については、JMESPathウェブサイトの「識別子
リストから選択する
リストまたは配列は、[
における Volumes
や Attachments
などの角括弧「開始する前に」の後に続く識別子です。
[Syntax] (構文)
<listName>[ ]
配列からのすべての出力をフィルタリングするには、ワイルドカード表記を使用できます。ワイルドカード*
表記法を使用して要素を返すために使用される式です。
次の例では、すべての Volumes
コンテンツに対するクエリを実行します。
$
aws ec2 describe-volumes \ --query '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": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]
配列内の特定のボリュームをインデックス別に表示するには、配列インデックスを呼び出します。例えば、Volumes
配列の最初の項目のインデックスは 0 で、Volumes[0]
クエリが生成されます。配列インデックスの詳細については、JMESPathウェブサイトの「インデックス式
$
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 }
ボリュームの特定範囲をインデックス別に表示するには、次の構文とともに slice
を使用します。ここで、start は開始配列インデックス、stop はフィルターが処理を停止するインデックス、step はスキップ間隔です。
[Syntax] (構文)
<arrayName>[<start>:<stop>:<step>]
スライス式からこれらのいずれかを省略すると、次のデフォルト値が使用されます。
-
Start - リストの最初のインデックス、0。
-
Stop - リストの最後のインデックス。
-
Step - ステップスキップなし。値は 1 です。
最初の 2 つのボリュームだけを返すには、次の例に示すように、start 値 0、stop 値 2、step 値 1 を使用します。
$
aws ec2 describe-volumes \ --query 'Volumes[0:2:1]'
[ { "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[0:2:1]
から Volumes[:2]
に短縮できます。
次の例では、デフォルト値を省略し、配列全体におけるあらゆる 2 つのボリュームを返します。
$
aws ec2 describe-volumes \ --query 'Volumes[::2]'
[ { "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": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]
次の例に示すように、step には、配列の逆の順序でフィルタリングするために負の数を使用することもできます。
$
aws ec2 describe-volumes \ --query 'Volumes[::-2]'
[ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 }, { "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 } ]
詳細については、JMESPathウェブサイトの「スライス
ネストされたデータをフィルタリングする
ネストされた値の Volumes[*]
のフィルタリング結果を絞り込むには、ピリオドとフィルター条件を追加して部分式を使用します。
[Syntax] (構文)
<expression>.<expression>
次の例は、すべてのボリュームのすべての Attachments
情報を示しています。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments'
[ [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ] ]
ネストされた値までさらに絞り込むには、ネストされた各識別子の式を追加します。次の例では、すべての State
の Volumes
をリストします。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[*].State'
[ [ "attached" ], [ "attached" ], [ "attached" ] ]
結果をフラット化する
詳細については、JMESPathウェブサイトのSubExpressions
Volumes[*].Attachments[*].State
クエリの結果として生成されたワイルドカード表記を削除することで、Volumes[*].Attachments[].State
の結果をフラット化することができます。フラット化は、多くの場合、結果の可読性を向上させるのに役立ちます。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].State'
[ "attached", "attached", "attached" ]
詳細については、JMESPathウェブサイトの「フラット化
特定の値をフィルタリングする
リスト内の特定の値をフィルタリングするには、次の構文に示すように、フィルター式を使用します。
[Syntax] (構文)
? <expression> <comparator> <expression>]
式の比較演算子には、==
、!=
、<
、<=
、>
、>=
などがあります。次の例では、VolumeIds
Volumes
のすべての Attached
の State
をフィルタリングします。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId'
[ [ "vol-e11a5288" ], [ "vol-2e410a47" ], [ "vol-a1b3c7nd" ] ]
その後、これをフラット化することができ、次の例になります。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId[]'
[ "vol-e11a5288", "vol-2e410a47", "vol-a1b3c7nd" ]
次の例では、サイズが 20 未満のすべての VolumeIds
の Volumes
をフィルタリングします。
$
aws ec2 describe-volumes \ --query 'Volumes[?Size < `20`].VolumeId'
[ "vol-2e410a47", "vol-a1b3c7nd" ]
詳細については、JMESPathウェブサイトの「式をフィルタリングする
パイピング式
フィルターの結果を新しいリストにパイプ処理し、次の構文を使用して別の式で結果をフィルタリングできます。
[Syntax] (構文)
<expression> | <expression>]
次の例では、Volumes[*].Attachments[].InstanceId
式のフィルタリング結果を取得し、配列の最初の結果を出力します。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId | [0]'
"i-a071c394"
この例では、最初に次の式から配列を作成することによってこれを行います。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId'
"i-a071c394", "i-4b41a37c", "i-1jd73kv8"
その後、その配列の最初の要素を返します。
"i-a071c394"
詳細については、JMESPathウェブサイトの「パイプ式
複数の識別子の値をフィルタリングする
複数の識別子をフィルタリングするには、次の構文を使用して、複数選択リストを使用します。
[Syntax] (構文)
<listName>[].[<expression>, <expression>]
次の例では、VolumeId
および VolumeType
が Volumes
リストでフィルタリングされ、次の式になります。
$
aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType]'
[ [ "vol-e11a5288", "standard" ], [ "vol-2e410a47", "standard" ], [ "vol-a1b3c7nd", "standard" ] ]
ネストされたデータをリストに追加するには、別の複数選択リストを追加します。次の例では、ネストされた InstanceId
リストの State
および Attachments
もフィルタリングすることによって、前の例を拡張します。これにより、式は次のようになります。
$
aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State]]'
[ [ "vol-e11a5288", "standard", [ [ "i-a071c394", "attached" ] ] ], [ "vol-2e410a47", "standard", [ [ "i-4b41a37c", "attached" ] ] ], [ "vol-a1b3c7nd", "standard", [ [ "i-1jd73kv8", "attached" ] ] ] ]
可読性を向上させるには、次の例に示すように、式をフラット化します。
$
aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State][]][]'
[ "vol-e11a5288", "standard", [ "i-a071c394", "attached" ], "vol-2e410a47", "standard", [ "i-4b41a37c", "attached" ], "vol-a1b3c7nd", "standard", [ "i-1jd73kv8", "attached" ] ]
詳細については、JMESPathウェブサイトの「マルチ選択リスト
識別子の値にラベルを追加する
この出力を読みやすくするには、次の構文で複数選択ハッシュを使用します。
[Syntax] (構文)
<listName>[].{<label>: <expression>, <label>: <expression>}
識別子のラベルは、識別子の名前と同じである必要はありません。次の例では、VolumeType
値のラベル VolumeType
を使用します。
$
aws ec2 describe-volumes \ --query 'Volumes[].{VolumeType: VolumeType}'
[ { "VolumeType": "standard", }, { "VolumeType": "standard", }, { "VolumeType": "standard", } ]
簡単にするために、以下の例では、各ラベルの識別子名を保持し、すべてのボリュームの VolumeId
、VolumeType
、InstanceId
、および State
を表示します。
$
aws ec2 describe-volumes \ --query 'Volumes[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}'
[ { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" }, { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" } ]
詳細については、JMESPathウェブサイトの「マルチセレクトハッシュ
関数
JMESPath 構文には、クエリに使用できる多くの関数が含まれています。JMESPath 関数の詳細については、JMESPathウェブサイトの「組み込み関数
クエリに関数を組み込む方法を示すために、次の例では sort_by
関数を使用します。sort_by
関数は、次の構文を使用して、ソートキーとして式を使用して配列をソートします。
[Syntax] (構文)
sort_by(<listName>, <sort expression>)[].<expression>
次の例では、前述の複数選択ハッシュの例を使用して、出力を VolumeId
でソートします。
$
aws ec2 describe-volumes \ --query 'sort_by(Volumes, &VolumeId)[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}'
[ { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" }, { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" } ]
詳細については、JMESPathウェブサイトの「 sort_by
高度な --query
の例
特定のアイテムから情報を抽出するには
次の例では、--query
パラメータを使用してリスト上の特定の項目を検索し、その項目から情報を抽出します。この例では、指定されたサービスエンドポイントに関連付けられているすべての AvailabilityZones
をリストします。指定された ServiceDetails
が含まれる ServiceName
リストから項目を抽出し、選択されたその項目から 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" ] ]
指定した作成日より後のスナップショットを表示するには
次の例は、指定された日付以降に作成されたすべてのスナップショットを一覧表示する方法を示しています (例: 出力の利用可能な一部のフィールド)。
$
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 } ]
最新の を表示するには AMIs
次の例では、作成した最新の Amazon マシンイメージ (AMIs) を、最新のものから古いものまでソートして 5 つ示しています。
$
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 インスタンスを表示する方法
次の例は、指定した 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'
指定したタグを持つボリュームを含めるには
次の例では、test
タグを持つすべてのインスタンスを説明します。ボリュームにアタッチされた、test
ではない別のタグがある限り、ボリュームは結果に含まれて返されます。
以下の式は、test
タグを含むすべてのタグを配列に含めて返します。test
タグでないタグには null
値が含まれています。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Tags[?Value == `test`]'
指定したタグを持つボリュームを除外するには
次の例では、test
タグを持たないすべてのインスタンスを説明します。ボリュームは複数のタグを持つことができるため、シンプルな ?Value != `test`
式を使用しても、ボリュームを除外することはできません。ボリュームにアタッチされた、test
ではない別のタグがある限り、ボリュームは結果に含まれて返されます。
test
タグを持つすべてのボリュームを除外するには、以下の式から開始して、test
タグを含むすべてのタグを配列に含めて返します。test
タグでないタグには null
値が含まれています。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Tags[?Value == `test`]'
その後、test
関数を使用してすべての肯定的な not_null
の結果をフィルタリングで抽出します。
$
aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)]'
結果をパイプ処理して、結果をフラット化すると、次のクエリになります。
$
aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)] | []'
サーバー側とクライアント側のフィルタリングを組み合わせる
サーバー側とクライアント側のフィルタリングを一緒に使用できます。サーバー側のフィルタリングが最初に完了し、得られたデータがクライアントに送信され、--query
パラメータがそのデータをフィルタリングします。大規模なデータセットを使用している場合、サーバー側のフィルタリングを最初に使用すると、クライアント側のフィルタリングが提供する強力なカスタマイズを維持しながら、 AWS CLI 呼び出しごとにクライアントに送信されるデータの量を減らすことができます。
次の例では、サーバー側とクライアント側のフィルタリングの両方を使用する 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, "VolumeType": "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
次の例では、 を使用してリストに含まれるボリュームの数length
をカウントIOPSすることで、1000 を超える使用可能なボリュームの数を表示します。
$
aws ec2 describe-volumes \ --filters "Name=status,Values=available" \ --query 'length(Volumes[?Iops > `1000`])'
3
追加リソース
- AWS CLI 自動プロンプト
-
フィルター式の使用を開始するときは、 AWS CLI バージョン 2 の自動プロンプト機能を使用できます。F5 キーを押すと、自動プロンプト機能でプレビューが表示されます。詳細については、「でのコマンドプロンプトの有効化と使用 AWS CLI」を参照してください。
- JMESPath ターミナル
-
JMESPath Terminal は、クライアント側のフィルタリングに使用されるJMESPath式を試すためのインタラクティブなターミナルコマンドです。
jpterm
コマンドを使用すると、ターミナルに入力すると即時にクエリ結果が表示されます。 AWS CLI 出力をターミナルに直接パイプ処理できるため、高度なクエリ実験が可能になります。次の例では、JMESPathターミナルに直接
aws ec2 describe-volumes
出力をパイプします。$
aws ec2 describe-volumes | jpterm
JMESPath ターミナルとインストール手順の詳細については、「 のJMESPathターミナル
」を参照してくださいGitHub。 - jq ユーティリティ
-
jq
ユーティリティは、クライアント側の出力を必要な出力形式に変換する方法を提供します。jq
およびインストール手順の詳細については、「」の「jq」を参照してくださいGitHub。