Integração CodeDeploy com o Amazon EC2 Auto Scaling - AWS CodeDeploy

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

Integração CodeDeploy com o Amazon EC2 Auto Scaling

CodeDeploy oferece suporte ao Amazon EC2 Auto Scaling, AWS um serviço que lança instâncias do Amazon EC2 automaticamente de acordo com as condições definidas por você. Essas condições podem incluir limites excedidos em um intervalo de tempo especificado para utilização da CPU, leituras ou gravações de disco ou tráfego de rede de entrada ou saída. O Amazon EC2 Auto Scaling encerra as instâncias quando elas não são mais necessárias. Para obter mais informações, consulte O que é o Amazon EC2 Auto Scaling? no Guia do usuário do Amazon EC2 Auto Scaling.

Quando novas instâncias do Amazon EC2 são lançadas como parte de um CodeDeploy grupo do Amazon EC2 Auto Scaling, você pode implantar suas revisões nas novas instâncias automaticamente. Você também pode coordenar implantações com instâncias do Amazon EC2 Auto Scaling registradas CodeDeploy com balanceadores de carga do Elastic Load Balancing. Para obter mais informações, consulte Integrating CodeDeploy with Elastic Load Balancing e Configure um balanceador de carga no Elastic Load Balancing para implantações do Amazon CodeDeploy EC2.

nota

Lembre-se de que você pode ter problemas se associar vários grupos de implantação a um único grupo do Amazon EC2 Auto Scaling. Se uma implantação falhar, por exemplo, a instância começará a ser desligada, mas as outras implementações que estavam em execução poderão demorar uma hora para atingirem o tempo limite. Para obter mais informações, consulte Evite associar vários grupos de implantação a um único grupo de Amazon EC2 Auto Scaling Under the hood: CodeDeploy and Amazon EC2 Auto Scaling integration.

Implantação de CodeDeploy aplicativos em grupos do Amazon EC2 Auto Scaling

Para implantar uma revisão CodeDeploy do aplicativo em um grupo do Amazon EC2 Auto Scaling:

  1. Crie ou localize um perfil de instância do IAM que permita que o grupo do Amazon EC2 Auto Scaling funcione com o Amazon S3. Para ter mais informações, consulte Etapa 4: criar um perfil de instância do IAM para as suas instâncias do Amazon EC2.

    nota

    Você também pode usar CodeDeploy para implantar revisões de GitHub repositórios para grupos do Amazon EC2 Auto Scaling. Embora as instâncias do Amazon EC2 ainda exijam um perfil de instância do IAM, o perfil não precisa de nenhuma permissão adicional para ser implantado a partir de um GitHub repositório.

  2. Crie ou use um grupo do Amazon EC2 Auto Scaling, especificando o perfil de instância do IAM no modelo ou na configuração de execução. Para obter mais informações, consulte Perfil do IAM para aplicativos que são executados em instâncias do Amazon EC2.

  3. Crie ou localize uma função de serviço que permita CodeDeploy criar um grupo de implantação que contenha o grupo Amazon EC2 Auto Scaling.

  4. Crie um grupo de implantação com CodeDeploy, especificando o nome do grupo Amazon EC2 Auto Scaling, a função do serviço e algumas outras opções. Para obter mais informações, consulte Criar um grupo de implantação para uma implantação no local (console) ou Criar um grupo de implantação para uma implantação no local (console).

  5. Use CodeDeploy para implantar sua revisão no grupo de implantação que contém o grupo Amazon EC2 Auto Scaling.

Para ter mais informações, consulte Tutorial: Use CodeDeploy para implantar um aplicativo em um grupo do Auto Scaling.

Ativar implantações de encerramento durante eventos de redução da escala horizontal do Auto Scaling

Uma implantação de encerramento é um tipo de CodeDeploy implantação que é ativada automaticamente quando ocorre um evento de expansão do Auto Scaling. CodeDeploy executa a implantação de encerramento logo antes do serviço Auto Scaling encerrar a instância. Durante uma implantação de encerramento, CodeDeploy não implanta nada. Em vez disso, ele gera eventos de ciclo de vida, que você pode fazer hook com seus próprios scripts para ativar a funcionalidade de encerramento personalizada. Por exemplo, você pode fazer hook do evento de ciclo de vida ApplicationStop em um script que encerra a aplicação, normalmente antes da instância ser encerrada.

Para obter uma lista dos eventos do ciclo de vida que são CodeDeploy gerados durante uma implantação de encerramento, consulte. Disponibilidade de hooks de eventos de ciclo de vida

Se a implantação de encerramento falhar por qualquer motivo, CodeDeploy permitirá que o encerramento da instância continue. Isso significa que a instância será encerrada mesmo que CodeDeploy não tenha executado o conjunto completo (ou nenhum) dos eventos do ciclo de vida até a conclusão.

Se você não habilitar implantações de encerramento, o serviço Auto Scaling ainda encerrará as instâncias do Amazon EC2 quando ocorrer CodeDeploy um evento de escalabilidade, mas não gerará eventos de ciclo de vida.

nota

Independentemente de você ativar ou não implantações de encerramento, se o serviço Auto Scaling encerrar uma instância do Amazon EC2 enquanto a implantação estiver em andamento, poderá ocorrer CodeDeploy uma condição de corrida entre os eventos do ciclo de vida gerados pelo Auto Scaling e os serviços. CodeDeploy Por exemplo, o evento de Terminating ciclo de vida (gerado pelo serviço Auto Scaling) pode substituir ApplicationStart o evento (gerado pela implantação). CodeDeploy Nesse cenário, você pode enfrentar uma falha no encerramento da instância do Amazon EC2 ou na CodeDeploy implantação.

Para permitir a execução CodeDeploy de implantações de rescisão

Depois que o hook de encerramento é instalado, um evento de redução da escala horizontal (encerramento) ocorre da seguinte forma:

  1. O serviço de Auto Scaling (ou simplesmente o Auto Scaling) determina que uma redução da escala horizontal precisa ocorrer e entra em contato com o serviço EC2 para encerrar uma nova instância do EC2.

  2. O serviço EC2 começa a encerrar a instância do EC2. A instância se move para o estado Terminating e depois para o estado Terminating:Wait.

  3. DuranteTerminating:Wait, o Auto Scaling executa todos os ganchos do ciclo de vida conectados ao grupo Auto Scaling, incluindo o gancho de terminação instalado pelo. CodeDeploy

  4. O gancho de terminação envia uma notificação para a fila do Amazon SQS que é pesquisada por. CodeDeploy

  5. Ao receber a notificação, CodeDeploy analisa a mensagem, realiza alguma validação e executa uma implantação de encerramento.

  6. Enquanto a implantação de encerramento está em execução, CodeDeploy envia pulsações a cada cinco minutos para o Auto Scaling para que ele saiba que a instância ainda está sendo trabalhada.

  7. Até o momento, a instância do EC2 ainda está no estado Terminating:Wait (ou possivelmente no estado Warmed:Pending:Wait, se você tiver ativado Pools de aquecimento de grupos do Auto Scaling).

  8. Quando a implantação é concluída, CodeDeploy indica ao Auto Scaling CONTINUE o processo de encerramento do EC2, independentemente de a implantação de encerramento ter sido bem-sucedida ou falhada.

Como o Amazon EC2 Auto Scaling funciona com CodeDeploy

Quando você cria ou atualiza um grupo de CodeDeploy implantação para incluir um grupo do Auto Scaling, CodeDeploy acessa o grupo do Auto Scaling usando a função de CodeDeploy serviço e, em seguida, instala os ganchos do ciclo de vida do Auto Scaling nos grupos do Auto Scaling.

nota

Os ganchos de ciclo de vida do Auto Scaling são diferentes dos eventos de ciclo de vida (também chamados de ganchos de eventos de ciclo de vida) gerados e descritos neste guia. CodeDeploy AppSpec seção 'ganchos'

Os ganchos do ciclo de vida do Auto Scaling que são instalados são: CodeDeploy

  • Um gancho de lançamento — Esse gancho notifica CodeDeploy que um evento de expansão do Auto Scaling está em andamento e CodeDeploy que precisa iniciar uma implantação de lançamento.

    Durante uma implantação de lançamento, CodeDeploy:

    • Implanta uma revisão da aplicação na instância com aumento da escala horizontal.

    • Gera eventos do ciclo de vida para indicar o progresso da implantação. Você pode fazer hook desses eventos do ciclo de vida em seus próprios scripts para ativar a funcionalidade de inicialização personalizada. Para obter mais informações, consulte a tabela em Disponibilidade de hooks de eventos de ciclo de vida.

    O hook de inicialização e a implantação de inicialização associada estão sempre ativados e não podem ser desativados.

  • Um gancho de terminação — Esse gancho opcional notifica CodeDeploy que um evento de escalonamento do Auto Scaling está em andamento e CodeDeploy que precisa iniciar uma implantação de terminação.

    Durante uma implantação de encerramento, CodeDeploy gera eventos de ciclo de vida para indicar o progresso do desligamento da instância. Para ter mais informações, consulte Ativar implantações de encerramento durante eventos de redução da escala horizontal do Auto Scaling.

Depois de CodeDeploy instalar os ganchos de ciclo de vida, como eles são usados?

Depois que os ganchos do ciclo de vida de lançamento e encerramento são instalados, eles são usados durante os eventos de expansão e CodeDeploy expansão de grupos do Auto Scaling, respectivamente.

Um evento de aumento da escala horizontal (inicialização) ocorre da seguinte forma:

  1. O serviço de auste de escala automático (ou simplesmente ajuste de escala automático) determina que um evento de aumento de escala horizontal precisa ocorrer e entra em contato com o serviço EC2 para iniciar uma nova instância do EC2.

  2. O serviço do EC2 inicia uma nova instância do EC2. A instância se move para o estado Pending e depois para o estado Pending:Wait.

  3. DurantePending:Wait, o Auto Scaling executa todos os ganchos do ciclo de vida conectados ao grupo Auto Scaling, incluindo o gancho de lançamento instalado pelo. CodeDeploy

  4. O gancho de lançamento envia uma notificação para a fila do Amazon SQS que é pesquisada por. CodeDeploy

  5. Ao receber a notificação, CodeDeploy analisa a mensagem, realiza alguma validação e inicia uma implantação de lançamento.

  6. Enquanto a implantação de lançamento está em execução, CodeDeploy envia pulsações a cada cinco minutos para o Auto Scaling para que ele saiba que a instância ainda está sendo trabalhada.

  7. Até o momento, a instância do EC2 ainda está no estado Pending:Wait.

  8. Quando a implantação for concluída, CodeDeploy indica ao Auto Scaling CONTINUE um ABANDON ou o processo de inicialização do EC2, dependendo se a implantação foi bem-sucedida ou falhou.

    • Se CodeDeploy indicadoCONTINUE, o Auto Scaling continua o processo de inicialização, aguardando a conclusão de outros ganchos ou colocando a instância no estado Pending:Proceed e depois no estado. InService

    • Se CodeDeploy indicadoABANDON, o Auto Scaling encerra a instância do EC2 e reinicia o procedimento de inicialização, se necessário, para atender ao número desejado de instâncias, conforme definido na configuração de Capacidade Desejada do Auto Scaling.

Um evento de redução da escala horizontal (encerramento) ocorre da seguinte forma:

Consulte Ativar implantações de encerramento durante eventos de redução da escala horizontal do Auto Scaling.

Como CodeDeploy nomeia os grupos do Amazon EC2 Auto Scaling

Durante implantações azul/verde em uma plataforma de computação EC2/On-Premises, você tem duas opções para adicionar instâncias ao seu ambiente de substituição (verde):

  • Use instâncias já existentes ou que você cria manualmente.

  • Use as configurações de um grupo do Amazon EC2 Auto Scaling especificado para definir e criar instâncias em um novo grupo do Amazon EC2 Auto Scaling.

Se você escolher a segunda opção, CodeDeploy provisiona um novo grupo do Amazon EC2 Auto Scaling para você. Ele usa a seguinte convenção para nomear o grupo:

CodeDeploy_deployment_group_name_deployment_id

Por exemplo, se uma implantação com ID 10 implantar um grupo de implantação denominado alpha-deployments, o grupo provisionado do Amazon EC2 Auto Scaling se chamará CodeDeploy_alpha-deployments_10. Para obter mais informações, consulte Criar um grupo de implantação para uma implantação azul/verde de EC2/On-Premises (console) e GreenFleetProvisioningOption.

Ordem de execução de eventos de gancho do ciclo de vida personalizados

Você pode adicionar seus próprios ganchos de ciclo de vida aos grupos do Amazon EC2 Auto Scaling nos quais são implantados. CodeDeploy No entanto, a ordem na qual esses eventos de gancho de ciclo de vida personalizados são executados não pode ser predeterminada em relação aos eventos CodeDeploy padrão do ciclo de vida de implantação. Por exemplo, se você adicionar um gancho de ciclo de vida personalizado chamado ReadyForSoftwareInstall a um grupo do Amazon EC2 Auto Scaling, não poderá saber de antemão se ele será executado antes do primeiro ou depois do último evento de ciclo de vida de implantação padrão. CodeDeploy

Para saber como adicionar ganchos do ciclo de vida personalizados em um grupo do Amazon EC2 Auto Scaling, consulte Adição de ganchos de ciclo de vida no Guia do usuário do Amazon EC2 Auto Scaling.

Eventos de aumento de escala durante uma implantação

Se um evento de aumento da escala horizontal do Auto Scaling ocorrer enquanto uma implantação estiver em andamento, as novas instâncias serão atualizadas com a revisão da aplicação que foi implantada anteriormente, não com a revisão da aplicação mais recente. Se a implantação for bem-sucedida, as instâncias antigas e as instâncias recém-aumentadas em escala hospedarão diferentes revisões de aplicativos. Para atualizar as instâncias com a revisão mais antiga, inicia CodeDeploy automaticamente uma implantação subsequente (imediatamente após a primeira) para atualizar todas as instâncias desatualizadas. Se você quiser alterar esse comportamento padrão para que as instâncias desatualizadas do EC2 sejam deixadas na revisão mais antiga, consulte Automatic updates to outdated instances.

Se você quiser suspender os processos de escalabilidade horizontal do Amazon EC2 Auto Scaling enquanto as implantações estão ocorrendo, você pode fazer isso por meio de uma configuração no script que é usada para balanceamento de common_functions.sh carga com. CodeDeploy Se HANDLE_PROCS=true, os seguintes eventos do Auto Scaling serão suspensos automaticamente durante o processo de implantação:

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

Importante

Somente CodeDeployDefault o. OneAtA configuração de implantação do ATime oferece suporte a essa funcionalidade.

Para obter mais informações sobre como usar HANDLE_PROCS=true para evitar problemas de implantação ao usar o Amazon EC2 Auto Scaling, consulte Aviso importante sobre como AutoScaling lidar com processos em on. aws-codedeploy-samples GitHub

Eventos de redução da escala horizontal durante uma implantação

Se um grupo de Auto Scaling começar a escalar enquanto uma CodeDeploy implantação estiver em andamento nesse grupo de Auto Scaling, poderá ocorrer uma condição de corrida entre o processo de encerramento (incluindo os eventos do ciclo de vida da implantação de CodeDeploy encerramento) e outros eventos do ciclo de vida na instância de encerramento. CodeDeploy A implantação nessa instância específica pode falhar se a instância for encerrada antes da conclusão de todos os eventos CodeDeploy do ciclo de vida. Além disso, a CodeDeploy implantação geral pode ou não falhar, dependendo de como você definiu sua configuração de mínimo de hosts íntegros em sua configuração de implantação.

Ordem dos eventos nos scripts AWS CloudFormation cfn-init

Se você usar cfn-init (ou cloud-init) para executar scripts em instâncias Linux recém-provisionadas, suas implantações poderão falhar, a menos que você controle estritamente a ordem de eventos que ocorrerem após a inicialização da instância.

Essa ordem deve ser:

  1. A instância recém-provisionada é iniciada.

  2. Todos os scripts de inicialização cfn-init são executados até a conclusão.

  3. O CodeDeploy agente começa.

  4. A última revisão de aplicativo é implantada na instância.

Se a ordem dos eventos não for cuidadosamente controlada, o CodeDeploy agente poderá iniciar uma implantação antes que todos os scripts terminem de ser executados.

Para controlar a ordem dos eventos, use uma destas práticas recomendadas:

  • Instale o CodeDeploy agente por meio de um cfn-init script, colocando-o depois de todos os outros scripts.

  • Inclua o CodeDeploy agente em uma AMI personalizada e use um cfn-init script para iniciá-la, colocando-a depois de todos os outros scripts.

Para obter mais informações sobre o uso do cfn-init, consulte cfn-init no Guia do usuário do AWS CloudFormation .

Usando uma AMI personalizada com o CodeDeploy Amazon EC2 Auto Scaling

Existem duas opções para especificar a AMI base a ser usada quando novas instâncias do Amazon EC2 são iniciadas em um grupo do Amazon EC2 Auto Scaling:

  • Você pode especificar uma AMI personalizada básica que já tenha o CodeDeploy agente instalado. Como o agente já está instalado, essa opção inicia novas instâncias do Amazon EC2 com mais rapidez do que a outra opção. No entanto, essa opção oferece uma maior probabilidade de que as implantações iniciais das instâncias do Amazon EC2 falhem, especialmente se CodeDeploy o agente estiver desatualizado. Se você escolher essa opção, recomendamos que você atualize regularmente o CodeDeploy agente em sua AMI personalizada básica.

  • Você pode especificar uma AMI básica que não tenha o CodeDeploy agente instalado e tenha o agente instalado à medida que cada nova instância é executada em um grupo do Amazon EC2 Auto Scaling. Embora essa opção inicie novas instâncias do Amazon EC2 mais devagar do que a outra opção, com ela, são maiores as chances de que as implantações iniciais das instâncias sejam bem-sucedidas. Essa opção usa a versão mais recente do CodeDeploy agente.