Os comandos do Alibaba Cloud CLI retornam resultados no formato JSON. Use a opção --cli-query para extrair campos específicos com expressões JMESPath (a saída permanece em JSON) ou a opção --output para exibir os resultados como tabela. Você também pode combinar as duas abordagens: filtre primeiro e depois tabule.
Antes de executar os comandos deste tópico, verifique se o Alibaba Cloud CLI está instalado e configurado. Para mais informações, consulte Instalar, atualizar e desinstalar o Alibaba Cloud CLI e Configurar e gerenciar credenciais.
Filtrar saída JSON com --cli-query
A opção --cli-query aceita uma expressão JMESPath e a aplica à resposta da API. O resultado filtrado permanece em JSON, o que permite o processamento direto por scripts e ferramentas subsequentes, como jq.
Sintaxe:
aliyun <product> <operation> --cli-query "<JMESPath expression>"
Os exemplos a seguir usam a resposta do ECS DescribeInstances para demonstrar padrões comuns de filtragem.
Exemplo 1: Extrair uma lista de valores
Extraia todos os IDs das instâncias.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].InstanceId"
Saída de exemplo:
[
"i-1234567891234567****",
"i-abcdefghijklmnop****"
]
Exemplo 2: Extrair vários campos
Extraia o InstanceId e o Status de cada instância.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].[InstanceId,Status]"
Saída de exemplo:
[
[
"i-1234567891234567****",
"Stopped"
],
[
"i-abcdefghijklmnop****",
"Running"
]
]
Exemplo 3: Filtrar por condição
Extraia apenas os IDs das instâncias em execução.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[?Status=='Running'].InstanceId"
Saída de exemplo:
[
"i-abcdefghijklmnop****"
]
Exemplo 4: Reestruturar a saída
Use uma expressão hash de multisseleção JMESPath para reorganizar a resposta em um array de objetos com nomes de chave personalizados.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].{id:InstanceId,status:Status}"
Saída de exemplo:
[
{
"id": "i-1234567891234567****",
"status": "Stopped"
},
{
"id": "i-abcdefghijklmnop****",
"status": "Running"
}
]
Os exemplos anteriores abrangem apenas a sintaxe comum. O JMESPath também oferece suporte a expressões pipe, funções integradas e outros recursos avançados. Para a sintaxe completa, consulte o Tutorial do JMESPath.
Se --cli-query retornar null, verifique se os nomes dos campos na expressão correspondem exatamente às chaves na resposta da API (os nomes dos campos diferenciam maiúsculas de minúsculas).
Escolha a opção adequada
Use a tabela a seguir para decidir qual opção melhor se adapta ao seu cenário:
|
Cenário |
Opção |
Descrição |
|
Extrair valores em um script |
|
A saída é JSON, que ferramentas como |
|
Navegar pelos resultados no terminal |
|
Uma tabela facilita a leitura em comparação ao JSON bruto. |
|
Filtrar e exibir como tabela |
Ambas |
|
Parâmetros da opção --output
O Alibaba Cloud CLI fornece a opção --output para extrair campos específicos da resposta e exibi-los em formato de tabela.
A opção --output aceita os seguintes parâmetros:
|
Parâmetro |
Descrição |
Exemplo |
|
cols |
Colunas a exibir na tabela. Formato:
|
|
|
rows |
Caminho da source de dados para as linhas da tabela. Usa sintaxe JMESPath para especificar a localização dos dados na resposta JSON. |
rows="Instances.Instance[]" |
|
num |
Define se uma coluna com numeração de linha será exibida. Quando definido como |
num="true" |
Exemplos
Contexto
As operações de consulta da API do Alibaba Cloud retornam dados estruturados em JSON, cuja leitura pode ser difícil.
-
Como exemplo, considere todas as instâncias ECS e execute o seguinte comando.
aliyun ecs DescribeInstances --biz-region-id cn-hangzhou -
Resposta de exemplo (parcial):
{ "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****" ] } } ] } }
Exemplo 1: Extrair um campo de nível raiz
-
Execute o comando a seguir para extrair o campo
RequestId. Como esse campo está no nível raiz da resposta, o parâmetrorowsnão é necessário.aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols=RequestId -
Saída de exemplo:
RequestId --------- 2B76ECBD-A296-407E-BE17-7E668A609DDA
Exemplo 2: Extrair campos aninhados
-
Execute o comando a seguir para extrair os campos
InstanceIdeStatus. O caminho JMESPath para esses campos éInstances.Instance[], portanto definarowscomorows="Instances.Instance[]". Para mais detalhes sobre a sintaxe JMESPath, consulte o Tutorial do JMESPath.aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="InstanceId,Status" rows="Instances.Instance[]" -
Saída de exemplo:
InstanceId | Status ---------- | ------ i-12345678912345678123 | Stopped i-abcdefghijklmnopqrst | Running -
Para exibir números de linha, defina
numcomotrue. Saída de exemplo:Num | InstanceId | Status --- | ---------- | ------ 0 | i-12345678912345678123 | Stopped 1 | i-abcdefghijklmnopqrst | Running
Exemplo 3: Extrair elementos de um array
-
Execute o comando a seguir para extrair elementos específicos do array
SecurityGroupId. O caminho JMESPath para este array éInstances.Instance[].SecurityGroupIds.SecurityGroupId.aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="sg1:0,sg2:1" rows="Instances.Instance[].SecurityGroupIds.SecurityGroupId" -
Saída de exemplo:
sg1 | sg2 --- | --- sg-bp12345678912345**** | sg-bp98765432198765**** sg-bp1abcdefghijklm**** | sg-bp1zyxwvutsrqpon****