カテゴリ: AWS CLI 更新日: 2026/07/21

【AWS CLI】--queryオプションの使い方を徹底解説!JMESPathとJQとの違いも初心者向けにわかりやすく解説

507
【AWS】CLIでクエリ(--query)の使い方を徹底解説【JQとの違いも】

先生と生徒の会話形式で理解しよう

生徒

「AWS CLIでコマンドを実行するとJSONがたくさん表示されて、どこを見ればいいのかわかりません。」

先生

「AWS CLIには--queryという便利なオプションがあります。必要な項目だけを抽出できます。」

生徒

「それは便利ですね。JQコマンドと何が違うのですか。」

先生

「AWS CLI標準のJMESPath構文を使うのが--queryです。違いも含めて基礎から解説していきましょう。」

1. AWS CLIの--queryとは何か

1. AWS CLIの--queryとは何か
1. AWS CLIの--queryとは何か

AWS CLIの--queryオプションは、コマンド実行結果のJSONデータから必要な値だけを抽出するための機能です。AWS CLI初心者の方がつまずきやすいポイントの一つが、大量のJSON出力です。EC2やS3、IAMなどのサービスを操作すると、複雑な構造のJSONが表示されます。

そこで活躍するのがJMESPathというクエリ言語です。--queryはこのJMESPath構文を利用して、JSONの中から特定のキーや配列要素を絞り込むことができます。サーバー構築や運用自動化、シェルスクリプト作成時に非常に重要なテクニックです。

AWS CLIクエリを使いこなすことで、必要な情報だけを取得し、スクリプト処理やレポート作成を効率化できます。

2. --queryを使わない場合の出力例

2. --queryを使わない場合の出力例
2. --queryを使わない場合の出力例

まずはEC2インスタンス一覧を取得するコマンドを見てみましょう。


aws ec2 describe-instances
{
    "Reservations": [
        {
            "Instances": [
                {
                    "InstanceId": "i-1234567890abcdef0",
                    "InstanceType": "t2.micro",
                    "State": {
                        "Name": "running"
                    }
                }
            ]
        }
    ]
}

このようにJSON形式で大量のデータが表示されます。初心者にとってはどのキーを参照すればよいのか迷いやすいです。特にAWS CLI入門段階では、InstanceIdやStateだけ取得したいというケースが多いでしょう。

3. --queryで特定の値だけ抽出する方法

3. --queryで特定の値だけ抽出する方法
3. --queryで特定の値だけ抽出する方法

InstanceIdだけ取得したい場合は、次のように--queryを指定します。


aws ec2 describe-instances --query "Reservations[].Instances[].InstanceId"
[
    "i-1234567890abcdef0"
]

配列を表す角括弧を使うことで、複数のReservationやInstancesを横断して値を取得できます。AWS CLIクエリの基本は、JSONの構造を理解し、ドット記法と配列指定を組み合わせることです。

複数項目を同時に取得することも可能です。


aws ec2 describe-instances --query "Reservations[].Instances[].{ID:InstanceId,Type:InstanceType}"
[
    {
        "ID": "i-1234567890abcdef0",
        "Type": "t2.micro"
    }
]

このようにキー名を独自に定義することもできます。AWS CLI --query 使い方の中でもよく利用される書き方です。

AWSの基本用語や仕組みを、図解でサクッと理解したい人には、 入門の定番書がこちらです。

AWSの基本が全部わかる教科書をAmazonで見る

※ Amazon広告リンク

4. フィルタ条件を指定する応用テクニック

4. フィルタ条件を指定する応用テクニック
4. フィルタ条件を指定する応用テクニック

JMESPathでは条件式を使って絞り込みも可能です。例えば、起動中のインスタンスのみを取得したい場合は次のように記述します。


aws ec2 describe-instances --query "Reservations[].Instances[?State.Name=='running'].InstanceId"
[
    "i-1234567890abcdef0"
]

クエリ内で比較演算子を使用することで、特定条件のリソースだけ取得できます。AWS CLIでの運用管理や自動化処理では非常に重要な書き方です。

さらに出力形式を変更する場合は--outputオプションと組み合わせます。


aws ec2 describe-instances --query "Reservations[].Instances[].InstanceId" --output text
i-1234567890abcdef0

JSONではなくtext形式にすることで、シェルスクリプトとの連携が容易になります。AWS CLI 自動化やバッチ処理では頻繁に使われます。

5. JQコマンドとの違い

5. JQコマンドとの違い
5. JQコマンドとの違い

JQはJSONを加工するためのLinuxコマンドです。一方で--queryはAWS CLI標準機能です。大きな違いは次の通りです。

第一に、--queryは追加インストール不要で利用できます。AWS CLIを導入すればすぐに使用可能です。第二に、JMESPathという専用構文を使います。JQは独自のフィルタ構文を使用します。

例えばJQを使う場合は次のようになります。


aws ec2 describe-instances | jq ".Reservations[].Instances[].InstanceId"
"i-1234567890abcdef0"

JQは柔軟性が高い反面、パイプ処理が必要です。AWS CLI初心者やクラウドエンジニア入門者には、まず--queryを理解することをおすすめします。シンプルな抽出であれば--queryで十分対応できます。

6. S3やIAMでの活用例

6. S3やIAMでの活用例
6. S3やIAMでの活用例

EC2だけでなく、S3バケット一覧取得にも活用できます。


aws s3api list-buckets --query "Buckets[].Name"
[
    "sample-bucket-1",
    "sample-bucket-2"
]

IAMユーザー一覧の取得例です。


aws iam list-users --query "Users[].UserName"
[
    "admin",
    "developer"
]

AWS CLIクエリは、EC2、S3、IAM、RDSなどあらゆるAWSサービスで利用可能です。クラウドエンジニアとしてスキルアップするためには必須の知識です。

7. 初心者がつまずきやすいポイント

7. 初心者がつまずきやすいポイント
7. 初心者がつまずきやすいポイント

まずJSON構造を理解せずにクエリを書こうとすると失敗しやすいです。describe系コマンドで出力を確認し、どの階層に目的のキーがあるかを把握することが重要です。

次に、引用符の扱いに注意が必要です。シェル環境によってはシングルクォートとダブルクォートの使い分けが必要になります。特にLinux環境やmacOS環境では注意してください。

さらに、配列を示す角括弧を忘れると正しい結果が得られません。AWS CLI JMESPath クエリの基本構文を何度も練習することが上達への近道です。

8. AWS CLIクエリを使いこなすための学習方法

8. AWS CLIクエリを使いこなすための学習方法
8. AWS CLIクエリを使いこなすための学習方法

まずはEC2 describe-instancesで構造を確認し、InstanceIdやStateなど基本的な項目を抽出する練習をしましょう。その後、条件付きフィルタや複数項目抽出に挑戦すると理解が深まります。

クラウドエンジニアやインフラエンジニアを目指す方にとって、AWS CLI --query 使い方の理解は必須スキルです。TerraformやCloudFormationと組み合わせた自動化にも応用できます。

日々の運用で実際にコマンドを実行しながら、JMESPath構文に慣れることが最も効果的な学習方法です。

まとめ

まとめ
まとめ

AWS CLIの--queryオプションは、JSON形式で出力される大量のデータの中から必要な情報だけを抽出するための非常に重要な機能です。AWS CLIを使い始めたばかりの初心者にとって、describeコマンドの結果として表示されるJSONは複雑に見えますが、JMESPath構文を理解することで必要な値を効率よく取り出せるようになります。特にEC2インスタンスのInstanceIdやState、S3バケット名、IAMユーザー名など、日常的に確認したい情報をピンポイントで取得できる点は、クラウド運用やインフラ管理において大きなメリットです。

--queryを使わない場合は、ネストされたJSON構造を目視で確認しながら必要な情報を探す必要がありますが、--queryを活用することでその手間を大幅に削減できます。ドット記法と配列指定を組み合わせることで、複数の階層を横断してデータを取得できるため、複雑なレスポンスでも簡単に扱えるようになります。また、キー名を独自に定義する書き方を覚えることで、出力内容を見やすく整理することも可能です。

さらに、条件式を使ったフィルタリングを組み合わせることで、特定の状態のリソースだけを抽出することができます。例えば、起動中のEC2インスタンスのみを取得する処理や、特定の条件に一致するリソースを抽出する処理は、AWS運用の現場で頻繁に利用されます。--output textと組み合わせることで、シェルスクリプトやバッチ処理との連携も容易になり、自動化の効率が大きく向上します。

JQコマンドとの違いについても理解しておくことが重要です。--queryはAWS CLI標準機能であり、追加インストールなしで利用できる点が大きな特徴です。一方でJQは柔軟なJSON加工が可能ですが、パイプ処理が必要になります。初心者の段階では、まず--queryを使いこなせるようになることが重要であり、基本的な抽出やフィルタリングであれば--queryだけで十分対応できます。

学習のポイントとしては、まずdescribeコマンドの出力をしっかり確認し、JSON構造を理解することが大切です。その上で、配列の扱い方やドット記法、条件式の書き方を繰り返し練習することで、自然とJMESPath構文に慣れていきます。AWS CLIはクラウドエンジニアにとって必須スキルの一つであり、--queryオプションを活用できるようになることで、日々の作業効率が大きく向上します。

以下に、実務でもよく利用される--queryの組み合わせ例をまとめて紹介します。複数のサービスに対して共通の考え方で利用できる点を意識しながら確認してみましょう。


aws ec2 describe-instances --query "Reservations[].Instances[].InstanceId"
[
    "i-1234567890abcdef0"
]

aws s3api list-buckets --query "Buckets[].Name"
[
    "sample-bucket-1",
    "sample-bucket-2"
]

aws iam list-users --query "Users[].UserName"
[
    "admin",
    "developer"
]

このようにAWS CLIの--queryオプションは、EC2、S3、IAMなどさまざまなサービスで統一的に利用できるため、一度理解してしまえば幅広い場面で応用できます。クラウド環境の管理や自動化を効率化するためにも、基本からしっかりと身につけておきましょう。

先生と生徒の振り返り会話

生徒

「AWS CLIの--queryって、単なるオプションだと思っていましたが、かなり重要な機能なんですね。」

先生

「そうですね。JSONの中から必要な情報だけを取り出せるので、運用や自動化では必須の知識です。」

生徒

「最初はJSONが複雑で難しく感じましたが、ドット記法と配列の考え方が分かると少し楽になりました。」

先生

「その理解はとても大切です。構造を意識できるようになると、どんなクエリでも書けるようになります。」

生徒

「JQとの違いも理解できました。まずは--queryをしっかり使えるようにしたいです。」

先生

「良い考えですね。基本をしっかり押さえておけば、応用もスムーズに身につきます。」

生徒

「これからはAWS CLIを使うときに必ず--queryを意識してみます。」

先生

「ぜひ実際のコマンドで何度も試してみてください。使いこなせるようになると作業効率が大きく変わります。」

AWS CLIの一覧へ
新着記事
AWS
【AWS】CloudWatchで障害検知を自動化する設計パターン
【AWS】CloudWatchで障害検知を自動化する設計パターンを初心者向けに解説!AWS監視とアラート通知の基本
AWS
【AWS】RDSの無料枠とは?対象インスタンスタイプと注意点を解説
【AWS】RDSの無料枠とは?対象インスタンスタイプと注意点を解説
Flutter
Flutterの入力フォーム作成!TextField・TextFormFieldの基本
Flutterの入力フォーム作成!TextField・TextFormFieldの基本を初心者向けに解説
AWS
IAM Identity Centerの料金・SSO対応・Entra ID連携を詳しく解説
IAM Identity Centerの料金・SSO対応・Entra ID連携を詳しく解説【初心者向けAWS IAM】
人気記事
Flutter
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク