Quando você está usando o Auto Scaling e o Load Balancing, deseja que todas as instâncias do EC2 sejam idênticas. Então, eles estão todos (a) com base na mesma imagem da AMI e (b) passam pelas mesmas etapas de inicialização para obter o mesmo código e ativos neles. Dessa forma, todos eles responderão da mesma forma com a mesma entrada do seu cliente HTTP.
Para isso, não tente atualizar suas instâncias do EC2 manualmente. Quando você está aumentando e diminuindo, seu trabalho será perdido.
Quando você precisar implantar uma nova versão do seu código, deverá fazer um (ou mais) dos seguintes padrões.
Padrão 1:
- Implemente seu código em uma instância EC2 "gold" e não faça parte do seu grupo Auto Scaling.
- Crie uma AMI dessa instância "gold".
- Atualize seu grupo do Auto Scaling para usar essa nova imagem da AMI.
- Excluir instâncias antigas do EC2 (que usam a antiga AMI) e substituí-las pela nova instância do EC2 (que usa a nova AMI)
Padrão 2:
- Baseie seu grupo Auto Scaling a partir de uma imagem AMI "básica"
- Quando suas instâncias do EC2 são iniciadas pela primeira vez, elas baixam o código-fonte de algum local comum (como o S3)
- Quando você implanta um novo código, termina as instâncias antigas e lança novas para obter o novo código
Padrão 3:
- Faça o padrão 2, mas
- Use uma ferramenta automatizada para implantar seu novo código em sua instância existente do EC2 em vez de terminá-lo
Existem outros padrões, mas estes são alguns comuns que funcionam.
Se você é novo em Auto Scaling e Load Balancing, eu recomendo que você dê uma boa olhada no Elastic Beanstalk. Ele gerenciará todos os itens acima para você, tornando as implantações e atualizações muito mais fáceis.
Algumas notas adicionais:
- Dependendo do seu aplicativo, pode ser válido usar uma instância do EC2 por trás de um balanceador de carga. Você pode não precisar de mais de 2 instâncias. Você pode ampliar de 1 instância à medida que sua carga aumenta. Você simplesmente perde a alta disponibilidade.