Alibaba Cloud CLI コマンドは、JSON 形式で結果を返します。JMESPath 式を使用して特定のフィールドを抽出するには --cli-query オプションを使用し (出力は JSON のまま)、結果をテーブルとして表示するには --output オプションを使用できます。また、この 2 つを組み合わせることもできます。まずフィルタリングを行い、次にテーブル形式で表示します。
このトピックのコマンドを実行する前に、Alibaba Cloud CLI がインストールおよび設定されていることを確認してください。詳細については、「Alibaba Cloud CLI のインストール、更新、アンインストール」および「認証情報の設定と管理」をご参照ください。
--cli-query による JSON 出力のフィルタリング
--cli-query オプションは JMESPath 式を受け取り、API レスポンスに適用します。フィルタリングされた結果は JSON のままなので、スクリプトや jq などの後続のツールで直接処理できます。
構文:
aliyun <product> <operation> --cli-query "<JMESPath expression>"
以下の例では、Elastic Compute Service (ECS) の DescribeInstances レスポンスを使用して、一般的なフィルタリングパターンを示します。
例 1: 値のリストを抽出する
すべてのインスタンス ID を抽出します。
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].InstanceId"
出力例:
[
"i-1234567891234567****",
"i-abcdefghijklmnop****"
]
例 2: 複数のフィールドを抽出する
各インスタンスの InstanceId と Status を抽出します。
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].[InstanceId,Status]"
出力例:
[
[
"i-1234567891234567****",
"Stopped"
],
[
"i-abcdefghijklmnop****",
"Running"
]
]
例 3: 条件によるフィルタリング
実行中のインスタンスの ID のみを抽出します。
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[?Status=='Running'].InstanceId"
出力例:
[
"i-abcdefghijklmnop****"
]
例 4: 出力構造の再構成
JMESPath の複数選択ハッシュ式を使用して、レスポンスをカスタムキー名を持つオブジェクトの配列に再構成します。
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].{id:InstanceId,status:Status}"
出力例:
[
{
"id": "i-1234567891234567****",
"status": "Stopped"
},
{
"id": "i-abcdefghijklmnop****",
"status": "Running"
}
]
上記の例では、一般的な構文のみを取り上げています。JMESPath は、パイプ式、組み込み関数、その他の高度な機能もサポートしています。完全な構文については、「JMESPath Tutorial」をご参照ください。
--cli-query が null を返す場合は、式内のフィールド名が API レスポンスのキーと完全に一致していることを確認してください (フィールド名ではケースセンシティブです)。
適切なオプションの選択
次のテーブルを参考に、シナリオに適したオプションを判断してください。
|
シナリオ |
オプション |
説明 |
|
スクリプトで値を抽出する |
|
出力は JSON なので、 |
|
ターミナルで結果を参照する |
|
テーブル形式は、生の JSON よりも読みやすくなります。 |
|
フィルタリングしてテーブルとして表示する |
両方 |
|
--output オプションのパラメーター
Alibaba Cloud CLI は、レスポンスから特定のフィールドを抽出してテーブルとして表示するための --output オプションを提供します。
--output オプションは、次のパラメーターをサポートしています。
|
パラメーター |
説明 |
例 |
|
cols |
テーブルに表示する列。 形式:
|
|
|
rows |
テーブル行のデータソースパス。JMESPath 構文を使用して、JSON レスポンス内のデータの場所を指定します。 |
rows="Instances.Instance[]" |
|
num |
行番号列を表示するかどうかを指定します。
|
num="true" |
例
背景情報
Alibaba Cloud API のクエリ操作は、JSON 形式の構造化データを返しますが、これは読みにくい場合があります。
-
すべての ECS インスタンスを取得する場合を例に、次のコマンドを実行します。
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou -
レスポンス例 (一部):
{ "PageNumber": 1, "TotalCount": 2, "PageSize": 10, "RequestId": "2B76ECBD-A296-407E-BE17-7E668A609DDA", "Instances": { "Instance": [ { "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd", "InstanceTypeFamily": "ecs.xn4", "VlanId": "", "InstanceId": "i-1234567891234567****", "Status": "Stopped", "SecurityGroupIds": { "SecurityGroupId": [ "sg-bp12345678912345****", "sg-bp98765432198765****" ] } }, { "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd", "InstanceTypeFamily": "ecs.xn4", "VlanId": "", "InstanceId": "i-abcdefghijklmnop****", "Status": "Running", "SecurityGroupIds": { "SecurityGroupId": [ "sg-bp1abcdefghijklm****", "sg-bp1zyxwvutsrqpon****" ] } } ] } }
例 1: ルートレベルのフィールドを抽出する
-
次のコマンドを実行して、
RequestIdフィールドを抽出します。このフィールドはレスポンスのルートレベルにあるため、rowsパラメーターは必要ありません。aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols=RequestId -
出力例:
RequestId --------- 2B76ECBD-A296-407E-BE17-7E668A609DDA
例 2: ネストされたフィールドを抽出する
-
次のコマンドを実行して、
InstanceIdとStatusフィールドを抽出します。これらのフィールドの JMESPath パスはInstances.Instance[]なので、rowsをrows="Instances.Instance[]"に設定します。JMESPath 構文の詳細については、「JMESPath Tutorial」をご参照ください。aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="InstanceId,Status" rows="Instances.Instance[]" -
出力例:
InstanceId | Status ---------- | ------ i-1234567891234567**** | Stopped i-abcdefghijklmnop**** | Running -
行番号を表示するには、
numをtrueに設定します。出力例:Num | InstanceId | Status --- | ---------- | ------ 0 | i-1234567891234567**** | Stopped 1 | i-abcdefghijklmnop**** | Running
例 3: 配列から要素を抽出する
-
次のコマンドを実行して、
SecurityGroupId配列から特定の要素を抽出します。この配列の JMESPath パスはInstances.Instance[].SecurityGroupIds.SecurityGroupIdです。aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="sg1:0,sg2:1" rows="Instances.Instance[].SecurityGroupIds.SecurityGroupId" -
出力例:
sg1 | sg2 --- | --- sg-bp12345678912345**** | sg-bp98765432198765**** sg-bp1abcdefghijklm**** | sg-bp1zyxwvutsrqpon****