OK, isso foi perguntado há algum tempo, mas vou entrar em contato com meus 2 centavos de qualquer maneira. Acho que você está perdendo os benefícios da computação em nuvem.
Primeiramente, você deve separar o código do seu aplicativo e seus dados persistentes em duas máquinas virtuais diferentes. Isso vai lhe custar um pouco em latência de comunicação entre VMs, mas deve tornar sua administração muito mais simples. Lembre-se, ter 2 VMs pequenas em vez de 1 VM grande não é mais caro; escolha o número de hosts que melhor atenda às suas necessidades.
Se possível, você deseja que os servidores de aplicativos fiquem "sem estado", no sentido de que eles não devem ter dados persistentes, e você deve ser capaz de gerar uma nova instância com um mínimo de trabalho manual.
Em segundo lugar, você deve considerar se alguns dos serviços gerenciados da Amazon, como o SimpleDB ou o Relational Database Service (MySQL hospedado), são adequados para o armazenamento de dados persistente.
O fluxo ideal é algo assim:
-
Altere o sistema backend "mais recuado" primeiro. Por exemplo, se sua alteração exigir a adição de uma coluna a uma tabela de banco de dados, adicione-a usando as ferramentas normais do MySQL em uma instância do RDS em execução. (Isso pressupõe que sua arquitetura permite que seu armazenamento de dados seja alterado, mantendo a compatibilidade com versões anteriores, ou que você primeiro atualize o código do servidor de aplicativos para que seja compatível com versões futuras.)
-
Criar uma nova instância do servidor de aplicativos , usando uma AMI personalizada pronta para uso que você tenha preparado com antecedência.
-
Instale seu código atualizado no novo servidor de aplicativos, ou seja, o novo código que usa a nova coluna e tem a nova funcionalidade.
-
Teste .
-
Traga algum ou todo o tráfego, ou seja, mova o endereço IP / alterne o Elastic Load Balancing para o novo servidor de aplicativos. (Em um mundo ideal, você passaria por apenas uma pequena porcentagem, digamos, 5% do seu tráfego em primeiro lugar e depois observaria qualquer problema. O AFAIK Elastic Load Balancing não suporta roteamento fixo ponderado ainda, então você provavelmente não deve fazer isso. A alternância gradual também pode ser obtida com dois caminhos de execução em seu código, mas isso é demorado e irritante para realizar um balanceamento de carga fixo ponderado é mais simples.
-
Mantenha a antiga instância do servidor de aplicativos por alguns dias , caso o novo código tenha regressões e você precise retroceder.