Consistência eventual na API da Amazon EC2 - Amazon Elastic Compute Cloud

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 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.