Todos os produtos
Search
Central de documentação

Elastic Compute Service:Como garantir a idempotência

Última atualização: Jul 03, 2026

Se ocorrer um tempo limite de solicitação ou um erro interno do servidor ao chamar uma operação da API do Elastic Compute Service (ECS), o cliente pode tentar reenviar a requisição. Nesse cenário, especifique o parâmetro ClientToken na requisição para evitar que o cliente a envie repetidamente.

O que é idempotência?

A idempotência é uma propriedade de certas operações ou recursos na matemática e na ciência da computação. Ela indica que uma operação ou recurso produz sempre o mesmo resultado, independentemente da quantidade de requisições enviadas. Esse conceito desempenha um papel fundamental no design de sistemas distribuídos.

Garantir a idempotência

Geralmente, o cliente precisa repetir uma requisição apenas quando recebe o erro 500 (InternalError) ou 503 (ServiceUnavailable), ou quando não obtém resposta. Ao utilizar a API do Alibaba Cloud ECS, o cliente gera um valor de parâmetro composto por até 64 caracteres ASCII. Atribua esse valor a ClientToken para assegurar a idempotência das requisições repetidas.

Detalhes sobre ClientToken

Esta seção descreve os detalhes sobre ClientToken:

  • O valor de ClientToken é uma string única, sensível a maiúsculas e minúsculas, gerada pelo cliente e com comprimento máximo de 64 caracteres ASCII. Exemplo: ClientToken=123e4567-e89b-12d3-a456-426655440000.

  • Caso você especifique uma requisição com um valor de ClientToken já em uso, mas com parâmetros diferentes, o ECS retornará o código de erro IdempotentParameterMismatch. Altere o valor de ClientToken e tente novamente.

  • Ao reutilizar um valor de ClientToken mantendo os demais parâmetros inalterados na requisição, o cliente recebe a mesma resposta obtida no primeiro envio, sem impacto no status da sua instância ECS no servidor.

    Nota

    É obrigatório alterar os valores de SignatureNonce, Timestamp e Signature ao repetir uma requisição de API. O ECS utiliza SignatureNonce para garantir a unicidade de cada requisição e prevenir ataques de replay, além de usar Timestamp para registrar o carimbo de data/hora de cada requisição. Portanto, defina valores distintos para SignatureNonce e Timestamp em uma requisição repetida. Consequentemente, isso altera o valor de Signature.

  • Após adicionar o parâmetro ClientToken a uma requisição repetida:

    • Se o código de status HTTP 200 for retornado, a nova tentativa produzirá o mesmo resultado da última requisição, sem afetar o status do servidor.

    • Se um código de status HTTP 4xx for retornado, a nova tentativa falhará. Caso o código venha acompanhado da mensagem de erro try it later, o servidor está ocupado; tente novamente mais tarde. Resolva os problemas com base na mensagem de erro retornada antes de reenviar a requisição.

Exemplos de requisições idempotentes

Por exemplo, suponha que você chame a operação RunInstances para crie uma instância ECS. Se utilizar o mesmo valor de ClientToken mantendo os outros parâmetros da requisição inalterados, o servidor retornará a mesma resposta e gerará apenas um valor de InstanceId. Se não for possível crie a instância devido à insuficiência de recursos, resolva o problema de capacidade, altere o valor de ClientToken e então crie a instância.

https://ecs.aliyuncs.com/?Action=RunInstances
&RegionId=cn-hangzhou
&InstanceType=ecs.cm4.6xlarge
&ImageId=win2008r2_64_ent_sp1_en-us_40G_alibase_20170915.vhd
&SecurityGroupId=sg-securitygroupid
&Amount=1
.......
&ClientToken=123e4567-e89b-12d3-a456-426655440000
&<Common request parameters>

Sem o uso de ClientToken, múltiplas instâncias ECS podem ser criadas quando o cliente repete operações após a ocorrência de erros.

Operações de API

A lista abaixo apresenta algumas operações de API que incluem ClientToken para sua referência. Para verificar se uma determinada operação de API suporta ClientToken, consulte o tópico específico dessa operação.