Vamos repassar suas dúvidas.
So basically I want my original instance to be running at all times. Then when it starts going over capacity I want the Auto Scaling Group to start launching instances and the Load Balancer to distribute the load across them. Is my thinking here sound?
Eu diria sim , mas tenho algumas reservas. Se bem entendi, você colocou sua instância "principal" fora do grupo de dimensionamento automático. Teoricamente, isso garantiria que o escalonamento automático não eliminasse sua instância original. Há algumas coisas que gostaria de mencionar:
- Você não está aproveitando totalmente as possibilidades do Auto Scaling. O Auto Scaling não apenas permite que sua configuração seja dimensionada, mas também pode garantir limites. Se, por qualquer motivo, sua instância "principal" morrer, sua política de dimensionamento automático não entrará em ação. Se você mantiver sua instância em um grupo de dimensionamento automático com
min-size
de 1, o Auto Scaling substituirá automaticamente a instância com falha. - Quando o escalonamento automático é geralmente uma boa prática para tratar suas instâncias como "descartáveis", porque é assim que você cria sistemas resilientes. Não dependa de uma instância para estar sempre disponível.
- Você pode definir a política de finalização do seu grupo de dimensionamento automático para que termine sempre as instâncias mais recentes primeiro. Isso garantiria que sua instância "principal" seja mantida (desde que seja saudável). Meu comentário anterior ainda se aplica.
When I make code and data changes to my original instance, do I have to remake the image my Launch Configuration uses?
Eu diria no , mas isso é mais um problema de design. Sua imagem deve descrever o estado do seu servidor, mas não deve ser responsável pela distribuição do código. Considere uma situação em que você teria que atualizar seu aplicativo devido a um bug urgente, mas seus servidores estão sob carga alta. Faz a atualização do seu servidor principal, criando uma AMI, atualizando sua configuração de inicialização e matando seus servidores escalonados automaticamente para que possam ser recuperados com o som mais recente da AMI como uma solução atraente? Minha resposta para isso seria não (novamente). Observe as estratégias de controle e implantação da versão do código-fonte (sou desenvolvedor do Rails em 60% do tempo e uso git
e capistrano
, por exemplo).
Há situações em que sua abordagem também funcionaria e há muito meio-termo aqui (eu também recomendaria ver os scripts Chef
e userdata
). Eu mesmo, na verdade, raramente uso AMIs personalizadas, graças a Chef
.
What needs to be down with DNS names and IPs? I'm currently using Route 53, do I make that point to my Load Balancer and that's it?
Basicamente, sim . Você pode selecionar o (s) balanceador (s) de carga que deve (m) ser anexado (s) a novas instâncias ao criar seu grupo de dimensionamento automático. Eu ainda não usei a GUI para Auto Scaling, mas tenho certeza que está lá em algum lugar. Caso contrário, a CLI ainda a suporta. Aponte seu registro Route53 para seu ELB alias
e é basicamente isso.
Resposta a perguntas adicionais (2014/02/23):
Se você está desenvolvendo usando o Rails, eu recomendo o Capistrano para implementações, que podem levar uma versão específica do seu aplicativo em seu sistema de controle de versão preferido (como o git) e implemente-o em vários servidores em um ambiente específico. Há um monte de tutoriais por aí, mas os Railscasts revisados (e pro) de Ryan Bates sobre o assunto são muito concisos, embora você precise de uma assinatura em seu site para assistir a ambos. A maioria dos outros tutoriais irá ajudá-lo também. Acione um novo servidor com a sua AMI e um script de lançamento que extrai um clone temporário do seu git repo e executa um comando local do Capistrano para ativar seu aplicativo. Isso garante que, mais tarde, você também possa implantar novas versões de seu aplicativo usando o Capistrano com apenas um comando para todos os servidores em execução.
O Capistrano também oferece alguns outros benefícios, incluindo a possibilidade de executar tarefas específicas em todos ou em apenas um dos seus servidores e reverter uma implantação, o que é muito difícil de realizar usando apenas o git.