Ao usar o Alibaba Cloud CLI para chamar APIs, talvez você precise recuperar todos os dados paginados de uma vez, aguardar a criação de um recurso antes de prosseguir ou verifique a correção de um comando sem que o execute de fato. Este tópico descreve os parâmetros globais para esses três cenários e como os configure.
Escolha o parâmetro adequado
Os três são parâmetros globais que se aplicam a uma única chamada de API. Escolha o parâmetro de acordo com o seu cenário:
|
Cenário |
Parâmetro |
|
Uma API do tipo List retorna apenas uma página, mas você precisa de todos os dados |
|
|
Aguardar a disponibilidade de um recurso após a criação |
|
|
Verifique a correção de um comando sem que o execute de fato |
|
Regras de exclusão mútua
O
--pagere o--waiternão podem ser usados juntos. O CLI retorna o seguinte erro se você combiná-los:ERROR: flag --pager is exclusive with --waiter.O
--cli-dry-runpode coexistir com o--pagerou o--waiter, mas o CLI não envia a requisição, portanto a paginação e o polling não são executados.
Agregação automática de todas as páginas (--pager)
Uso básico
Adicione o --pager a qualquer API paginada do tipo List ou Describe. O CLI itera automaticamente por todas as páginas e mescla os resultados em uma única saída.
aliyun ecs describe-instances --biz-region-id cn-hangzhou --pager
Dois modos de paginação
O CLI determina automaticamente qual modo usar. Nenhuma configuração manual é necessária.
Modo PageNumber: A resposta da API contém os campos
PageNumber,PageSizeeTotalCount. O CLI incrementa o número da página até que todas as páginas sejam recuperadas.Modo NextToken: A resposta da API contém um campo
NextToken. O CLI passa o valor deNextTokenretornado como o próximo parâmetro da requisição até que oNextTokenseja uma string vazia.
Se a resposta contiver um campo NextToken com um valor não vazio, o modo NextToken será usado. Caso contrário, o modo PageNumber será utilizado.
Mapeamento de campos
Os subparâmetros a seguir são todos opcionais. Especifique estes apenas quando uma API usar nomes de campo não padrão para as informações de paginação, indicando ao CLI quais nomes de campo a API utiliza. Na maioria dos casos, apenas adicionar o --pager é suficiente.
|
Subparâmetro |
Padrão |
Quando especificar |
|
|
(nenhum) |
O caminho do array de dados na resposta não está no nível superior (por exemplo, |
|
|
PageNumber |
A API usa um nome de campo diferente para o número da página |
|
|
PageSize |
A API usa um nome de campo diferente para o tamanho da página |
|
|
TotalCount |
A API usa um nome de campo diferente para a contagem total de registros |
|
|
NextToken |
A API usa um nome de campo diferente para o token de paginação |
Sintaxe: --pager key=value key=value. Vários subparâmetros são separados por espaços. O value é o nome real do campo na resposta da API, não um valor específico. Por exemplo, PageNumber=CurrentPage significa que a API usa o campo CurrentPage para representar o número da página, e não que você está especificando uma página inicial.
Exemplos de mapeamento de campos personalizados
O array de dados está aninhado em Vpcs.Vpc[] na resposta da API:
aliyun vpc describe-vpcs --biz-region-id cn-hangzhou --pager path=Vpcs.Vpc[]
A API usa Token em vez de NextToken (xxx e list-yyy são comandos de espaço reservado):
aliyun xxx list-yyy --biz-region-id cn-hangzhou --pager NextToken=Token
Aguarde o status do recurso (--waiter)
Uso básico
O CLI chama o comando atual repetidamente, extrai um valor de cada resposta usando a expressão expr e interrompe o polling quando o valor extraído é igual ao valor de to, retornando a última resposta. Quando timeout e interval não são especificados, o CLI faz o polling a cada 5 segundos por no máximo 180 segundos (3 minutos) por padrão.
aliyun ecs describe-instances \
--biz-region-id cn-hangzhou \
--instance-ids '["i-bp1xxxxx"]' \
--waiter expr='Instances.Instance[0].Status' to=Running
Subparâmetros
|
Subparâmetro |
Obrigatório |
Padrão |
Intervalo de valores |
Descrição |
|
|
Sim |
— |
— |
Uma expressão JMESPath que especifica o campo a ser consultado no polling da resposta JSON. |
|
|
Sim |
— |
— |
O valor alvo. O polling é interrompido e os dados são retornados quando o resultado de |
|
|
Não |
180 |
1–600 (segundos) |
O tempo máximo de espera do polling. Se o valor alvo não for correspondido dentro deste período, o CLI retorna um erro e encerra a execução. |
|
|
Não |
5 |
2–10 (segundos) |
O intervalo entre duas tentativas de polling. |
O campo referenciado por
exprdeve ser do tipo string. Se o campo na resposta da API for um número ou um booleano JSON (true/false), o CLI retornará um erro imediatamente.O valor de
toé sempre comparado como uma string. Para status numéricos, escrevato=1(e nãoto=1.0). Se a API retornar um booleano como string (por exemplo,"true"), escrevato=true.Se uma chamada de API retornar um erro HTTP durante o polling, o CLI será interrompido imediatamente e exibirá o erro sem tentar novamente.
-
Quando o período de
timeoutexpira sem corresponder ao valor alvo, o CLI encerra com um código de saída diferente de zero e envia o seguinte para ostderr:wait 'Instances.Instance[0].Status' to 'Running' timeout(180seconds), last='Pending'O valor
lasté o valor real obtido na última consulta do polling.
Controle a frequência do polling
Reduza o intervalo de polling (aguarde até 30 segundos, faça polling a cada 2 segundos):
aliyun ecs describe-instances \
--biz-region-id cn-hangzhou \
--instance-ids '["i-bp1xxxxx"]' \
--waiter expr='Instances.Instance[0].Status' to=Running timeout=30 interval=2
Aumente o tempo de espera para recursos que demoram mais para iniciar (aguarde até 10 minutos, faça polling a cada 10 segundos):
aliyun ecs describe-instances \
--biz-region-id cn-hangzhou \
--instance-ids '["i-bp1xxxxx"]' \
--waiter expr='Instances.Instance[0].Status' to=Running timeout=600 interval=10
Verifique o comando sem executá-lo (--cli-dry-run)
Uso básico
Um interruptor booleano que entra em vigor quando adicionado. Nenhuma atribuição de valor é necessária. O CLI constrói a requisição completa, imprime os detalhes da requisição, mas não a envia para o servidor.
aliyun ecs describe-instances --biz-region-id cn-hangzhou --cli-dry-run
Conteúdo da saída
A saída inclui: método HTTP, Endpoint, API Action e Query Parameters. Você pode usar isso para verificar se o endpoint está correto e se a serialização dos parâmetros está conforme o esperado.
Exemplo de saída:
============================================================
DRY-RUN MODE: Request Details (No actual API call)
============================================================
Method: POST
URL:
Endpoint: ecs.cn-hangzhou.aliyuncs.com
API Version: 2014-05-26
API Action: DescribeInstances
Protocol: HTTPS
Style: RPC
Query Parameters:
RegionId: cn-hangzhou
============================================================
Request NOT sent (dry-run mode)
============================================================
{
"message": "dry-run mode - no request sent"
}
Cenários típicos
Visualize antes de executar operações sensíveis (como
delete-instanceoustop-instance). Confirme que os parâmetros estão corretos, remova o--cli-dry-rune execute.Verifique a correção da montagem do comando em pipelines de CI/CD (sem consumir recursos ou gerar custos).
Cenário de automação: fluxo de trabalho assíncrono completo
Cenário: Crie uma VPC, aguarde até que o status fique disponível e, em seguida, recupere a lista completa de VPCs. O exemplo a seguir demonstra como os três parâmetros trabalham juntos para concluir uma operação assíncrona.
Passo 1: Verifique o comando de criação com o --cli-dry-run**
aliyun vpc create-vpc \
--biz-region-id cn-hangzhou \
--cidr-block 172.16.0.0/12 \
--vpc-name test-vpc \
--cli-dry-run
Confirme que o Endpoint e a serialização dos parâmetros estão corretos, remova o --cli-dry-run e execute.
Passo 2: Execute a criação e extraia o ID da VPC
VPC_ID=$(aliyun vpc create-vpc \
--biz-region-id cn-hangzhou \
--cidr-block 172.16.0.0/12 \
--vpc-name test-vpc \
--cli-query 'VpcId')
O --cli-query extrai o ID da VPC da resposta.
Passo 3: Aguarde a instância ficar pronta com o --waiter**
O CLI faz polling a cada 5 segundos até que o status mude para Available ou o tempo limite de 60 segundos seja atingido:
aliyun vpc describe-vpcs \
--biz-region-id cn-hangzhou \
--vpc-id "$VPC_ID" \
--waiter expr='Vpcs.Vpc[0].Status' to=Available timeout=60
Passo 4: Recupere todas as VPCs com o --pager**
Quando você tem muitas VPCs, sem o --pager, apenas a primeira página é retornada e a nova VPC pode não ficar visível. Use o --pager para confirmar que a VPC recém-criada aparece na lista:
aliyun vpc describe-vpcs --biz-region-id cn-hangzhou --pager
Passo 5: Exclua a VPC (opcional)
Exclua a VPC criada anteriormente:
aliyun vpc delete-vpc --vpc-id $VPC_ID
Perguntas frequentes
O --pager e o --waiter podem ser usados juntos?
Não. Eles são mutuamente exclusivos. O CLI retorna o seguinte erro: ERROR: flag --pager is exclusive with --waiter. Se você precisar aguardar um recurso ficar pronto e, em seguida, recuperar a lista completa, use dois comandos separados.