【AWS CLI】--queryオプションの使い方を徹底解説!JMESPathとJQとの違いも初心者向けにわかりやすく解説
生徒
「AWS CLIでコマンドを実行するとJSONがたくさん表示されて、どこを見ればいいのかわかりません。」
先生
「AWS CLIには--queryという便利なオプションがあります。必要な項目だけを抽出できます。」
生徒
「それは便利ですね。JQコマンドと何が違うのですか。」
先生
「AWS CLI標準のJMESPath構文を使うのが--queryです。違いも含めて基礎から解説していきましょう。」
1. AWS CLIの--queryとは何か
AWS CLIの--queryオプションは、コマンド実行結果のJSONデータから必要な値だけを抽出するための機能です。AWS CLI初心者の方がつまずきやすいポイントの一つが、大量のJSON出力です。EC2やS3、IAMなどのサービスを操作すると、複雑な構造のJSONが表示されます。
そこで活躍するのがJMESPathというクエリ言語です。--queryはこのJMESPath構文を利用して、JSONの中から特定のキーや配列要素を絞り込むことができます。サーバー構築や運用自動化、シェルスクリプト作成時に非常に重要なテクニックです。
AWS CLIクエリを使いこなすことで、必要な情報だけを取得し、スクリプト処理やレポート作成を効率化できます。
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で特定の値だけ抽出する方法
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 使い方の中でもよく利用される書き方です。
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コマンドとの違い
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での活用例
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. 初心者がつまずきやすいポイント
まずJSON構造を理解せずにクエリを書こうとすると失敗しやすいです。describe系コマンドで出力を確認し、どの階層に目的のキーがあるかを把握することが重要です。
次に、引用符の扱いに注意が必要です。シェル環境によってはシングルクォートとダブルクォートの使い分けが必要になります。特にLinux環境やmacOS環境では注意してください。
さらに、配列を示す角括弧を忘れると正しい結果が得られません。AWS CLI JMESPath クエリの基本構文を何度も練習することが上達への近道です。
8. AWS CLIクエリを使いこなすための学習方法
まずはEC2 describe-instancesで構造を確認し、InstanceIdやStateなど基本的な項目を抽出する練習をしましょう。その後、条件付きフィルタや複数項目抽出に挑戦すると理解が深まります。
クラウドエンジニアやインフラエンジニアを目指す方にとって、AWS CLI --query 使い方の理解は必須スキルです。TerraformやCloudFormationと組み合わせた自動化にも応用できます。
日々の運用で実際にコマンドを実行しながら、JMESPath構文に慣れることが最も効果的な学習方法です。
まとめ
(振り返りのまとめ)
【AWS CLI】--queryオプションの使い方を徹底解説!JMESPathとJQとの違いも初心者向けにわかりやすく解説
生徒
「AWS CLIでコマンドを実行するとJSONがたくさん表示されて、どこを見ればいいのかわかりません。」
先生
「AWS CLIには--queryという便利なオプションがあります。必要な項目だけを抽出できます。」
生徒
「それは便利ですね。JQコマンドと何が違うのですか。」
先生
「AWS CLI標準のJMESPath構文を使うのが--queryです。違いも含めて基礎から解説していきましょう。」
1. AWS CLIの--queryとは何か
AWS CLIの--queryオプションは、コマンド実行結果のJSONデータから必要な値だけを抽出するための機能です。AWS CLI初心者の方がつまずきやすいポイントの一つが、大量のJSON出力です。EC2やS3、IAMなどのサービスを操作すると、複雑な構造のJSONが表示されます。
そこで活躍するのがJMESPathというクエリ言語です。--queryはこのJMESPath構文を利用して、JSONの中から特定のキーや配列要素を絞り込むことができます。サーバー構築や運用自動化、シェルスクリプト作成時に非常に重要なテクニックです。
AWS CLIクエリを使いこなすことで、必要な情報だけを取得し、スクリプト処理やレポート作成を効率化できます。
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で特定の値だけ抽出する方法
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 使い方の中でもよく利用される書き方です。
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コマンドとの違い
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での活用例
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. 初心者がつまずきやすいポイント
まずJSON構造を理解せずにクエリを書こうとすると失敗しやすいです。describe系コマンドで出力を確認し、どの階層に目的のキーがあるかを把握することが重要です。
次に、引用符の扱いに注意が必要です。シェル環境によってはシングルクォートとダブルクォートの使い分けが必要になります。特にLinux環境やmacOS環境では注意してください。
さらに、配列を示す角括弧を忘れると正しい結果が得られません。AWS CLI JMESPath クエリの基本構文を何度も練習することが上達への近道です。
8. AWS CLIクエリを使いこなすための学習方法
まずはEC2 describe-instancesで構造を確認し、InstanceIdやStateなど基本的な項目を抽出する練習をしましょう。その後、条件付きフィルタや複数項目抽出に挑戦すると理解が深まります。
クラウドエンジニアやインフラエンジニアを目指す方にとって、AWS CLI --query 使い方の理解は必須スキルです。TerraformやCloudFormationと組み合わせた自動化にも応用できます。
日々の運用で実際にコマンドを実行しながら、JMESPath構文に慣れることが最も効果的な学習方法です。