

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Consistência eventual na API da Amazon EC2
<a name="eventual-consistency"></a>

A EC2 API da Amazon segue um modelo de consistência eventual, devido à natureza distribuída do sistema que suporta a API. Isso significa que o resultado de um comando de API que você executa e que afeta seus EC2 recursos da Amazon pode não ser imediatamente visível para todos os comandos subsequentes que você executar. Você deve ter isso em mente ao executar um comando de API que segue imediatamente um comando de API anterior.

A consistência eventual pode afetar a maneira como você gerencia seus recursos. Por exemplo, se você executar um comando para criar um recurso, ele, por fim, ficará visível para outros comandos. Isso significa que, se você executar um comando para modificar ou descrever o recurso que acabou de criar, é possível que o respectivo ID não tenha se propagado por todo o sistema, e você receberá um erro indicando que o recurso não existe.

Para gerenciar a consistência eventual, é possível fazer o seguinte:
+ Confirme o estado do recurso antes de executar um comando para modificá-lo. Execute o comando `Describe` apropriado usando um algoritmo de recuo exponencial para garantir tempo suficiente para que o comando anterior se propague pelo sistema. Para fazer isso, execute o `Describe` comando repetidamente, começando com alguns segundos de tempo de espera e aumentando gradualmente até alguns minutos de tempo de espera. 
+ Adicione o tempo de espera entre os comandos subsequentes, mesmo que um comando `Describe` exiba uma resposta precisa. Aplique um algoritmo de recuo exponencial começando com alguns segundos de tempo de espera e aumente gradualmente até alguns minutos de tempo de espera.

**Exemplos de erro de consistência eventual**  
Veja a seguir exemplos de códigos de erro que você pode encontrar como resultado de uma consistência eventual.
+ `InvalidInstanceID.NotFound`

  Se você executar o comando `RunInstances` com êxito e, depois, executar imediatamente outro comando usando o ID da instância fornecido na resposta de `RunInstances`, ele poderá exibir um erro `InvalidInstanceID.NotFound`. Isso não significa que a instância não existe. 

  Alguns comandos específicos que podem ser afetados são:
  + `DescribeInstances`: para confirmar o estado real da instância, execute esse comando usando um algoritmo de recuo exponencial.
  + `TerminateInstances`: para confirmar o estado da instância, primeiro execute o comando `DescribeInstances` usando um algoritmo de recuo exponencial.
**Importante**  
Se você receber um erro `InvalidInstanceID.NotFound` após a execução de `TerminateInstances`, isso não significa que a instância foi ou será encerrada. Sua instância ainda pode estar em execução. É por isso que é importante primeiro confirmar o estado da instância usando `DescribeInstances`.
+ `InvalidGroup.NotFound`

  Se você executar o comando `CreateSecurityGroup` com êxito e, depois, executar imediatamente outro comando usando o ID do grupo de segurança fornecido na resposta de `CreateSecurityGroup`, ele poderá exibir um erro `InvalidGroup.NotFound`. Para confirmar o estado do grupo de segurança, execute o comando `DescribeSecurityGroups` usando um algoritmo de recuo exponencial.
+ `InstanceLimitExceeded`

  Você solicitou mais instâncias do que o limite atual permite para o tipo de instância especificado. Você poderá atingir esse limite inesperadamente se estiver executando e encerrando instâncias rapidamente, pois as instâncias encerradas contam para seu limite de instâncias por um tempo depois de serem encerradas.