Solucionar problemas de implantação do Amazon ECS - AWS CodeDeploy

Solucionar problemas de implantação do Amazon ECS

Ocorre um tempo limite enquanto se aguarda o conjunto de tarefas de substituição

Problema: você vê a seguinte mensagem de erro ao implantar seu aplicativo Amazon ECS usando o CodeDeploy:

The deployment timed out while waiting for the replacement task set to become healthy. This time out period is 60 minutes.

Possível causa: esse erro pode ocorrer se houver um erro no arquivo de definição de tarefas ou em outros arquivos relacionados à implantação. Por exemplo, se houver um erro de digitação no campo image do seu arquivo de definição de tarefa, o Amazon ECS tentará extrair a imagem errada do contêiner e falhará continuamente, causando esse erro.

Possíveis correções e próximas etapas:

  • Corrija erros tipográficos e problemas de configuração no arquivo de definição de tarefas e em outros arquivos.

  • Confira o evento relacionado ao serviço Amazon ECS e descubra por que as tarefas de substituição não estão ficando íntegras. Para mais informações sobre eventos do Amazon ECS, consulte Eventos do Amazon ECS no Guia do desenvolvedor do Amazon Elastic Container Service.

  • Consulte a seção de Solução de problemas do Amazon ECS no Guia do desenvolvedor do Amazon Elastic Container Service para ver se há erros relacionados às mensagens do evento.

Ocorre um limite de tempo enquanto se aguarda a continuação de uma notificação

Problema: você vê a seguinte mensagem de erro ao implantar seu aplicativo Amazon ECS usando o CodeDeploy:

The deployment timed out while waiting for a notification to continue. This time out period is n minutes.

Possível causa: esse erro pode ocorrer se você especificou um tempo de espera no campo Especificar quando redirecionar o tráfego ao criar seu grupo de implantação, mas a implantação não pôde ser concluída antes que o tempo de espera expirasse.

Possíveis correções e próximas etapas:

O perfil do IAM não tem permissões suficientes

Problema: você vê a seguinte mensagem de erro ao implantar seu aplicativo Amazon ECS usando o CodeDeploy:

The IAM role role-arn does not give you permission to perform operations in the following AWS service: AWSLambda.

Possível causa: esse erro pode ocorrer se você especificou uma função do Lambda na seção Hooks do arquivo AppSpec, mas não deu permissão ao CodeDeploy para o serviço Lambda.

Possível correção: adicione a permissão lambda:InvokeFunction ao perfil de serviço CodeDeploy. Para adicionar essa permissão, adicione uma das seguintes políticas gerenciadas pela AWS ao perfil: AWSCodeDeployRoleForECS ou AWSCodeDeployRoleForECSLimited. Para obter informações sobre essas políticas e como adicioná-las ao perfil de serviço CodeDeploy, consulte Etapa 2: Criar um perfil de serviço para CodeDeploy.

A implantação atingiu o tempo limite enquanto aguardava um retorno de chamada de status

Problema: você vê a seguinte mensagem de erro ao implantar seu aplicativo Amazon ECS usando o CodeDeploy:

The deployment timed out while waiting for a status callback. CodeDeploy expects a status callback within one hour after a deployment hook is invoked.

Possível causa: esse erro pode ocorrer se você especificou uma função do Lambda na seção Hooks do arquivo AppSpec, mas a função do Lambda não conseguiu chamar a API PutLifecycleEventHookExecutionStatus necessária para retornar um status Succeeded ou Failed para o CodeDeploy.

Possíveis correções e próximas etapas:

  • Adicione a permissão codedeploy:putlifecycleEventHookExecutionStatus ao perfil de execução do Lambda usado pela função do Lambda que você especificou no arquivo AppSpec. Essa permissão concede à função do Lambda a capacidade de retornar um status de Succeeded ou Failed para o CodeDeploy. Para obter informações sobre funções de execução do Lambda, consulte Função de execução do Lambda no Guia do usuário do AWS Lambda.

  • Verifique o código da função do Lambda e os logs de execução do Lambda para ter certeza de que sua função do Lambda está chamando a API PutLifecycleEventHookExecutionStatus do CodeDeploy para informar o CodeDeploy sobre se o teste de validação do ciclo de vida é Succeeded ou Failed. Para obter mais informações sobre a API putlifecycleEventHookExecutionStatus, consulte PutLifecycleEventHookExecutionStatus na Referência de API do AWS CodeDeploy. Para obter mais informações sobre logs de execução do Lambda, consulte Acessar o Amazon CloudWatch Logs para AWS Lambda.

A implantação falhou porque uma ou mais funções de validação de evento do ciclo de vida falharam

Problema: você vê a seguinte mensagem de erro ao implantar seu aplicativo Amazon ECS usando o CodeDeploy:

The deployment failed because one or more of the lifecycle event validation functions failed.

Possível causa: esse erro pode ocorrer se você especificou uma função do Lambda na seção Hooks do arquivo AppSpec, mas a função do Lambda retornou Failed ao CodeDeploy quando foi chamada PutLifecycleEventHookExecutionStatus. Essa falha indica ao CodeDeploy que o teste de validação do ciclo de vida falhou.

Próxima etapa possível: verifique seus logs de execução do Lambda para ver por que o código do teste de validação está falhando. Para obter mais informações sobre logs de execução do Lambda, consulte Acessar o Amazon CloudWatch Logs para AWS Lambda.

Não foi possível atualizar o ELB devido ao seguinte erro: o grupo de destino do conjunto de tarefas primário deve estar atrás do receptor

Problema: você vê a seguinte mensagem de erro ao implantar seu aplicativo Amazon ECS usando o CodeDeploy:

The ELB could not be updated due to the following error: Primary taskset target group must be behind listener

Possível causa: esse erro pode ocorrer se você tiver configurado um receptor de teste opcional, e ele estiver configurado com o grupo de destino errado. Para obter mais informações sobre o receptor de teste no CodeDeploy, consulte Antes de começar uma implantação do e O que acontece durante uma implantação do . Para obter mais informações sobre conjuntos de tarefas, consulte TaskSet, na Referência de API do Amazon Elastic Container Service, e describe-task-set, na seção Amazon ECS da Referência de comandos da AWS CLI.

Possível correção: certifique-se de que o receptor de produção e o receptor de teste do Elastic Load Balancing estejam apontando para o grupo de destino que atualmente atende aos seus workloads. Há três lugares para verificar:

Às vezes, minha implantação falha ao usar o ajuste de escala automático

Problema: você está usando o ajuste de escala automático com o CodeDeploy e percebe que suas implantações ocasionalmente falham. Para obter mais informações sobre os sintomas desse problema, consulte o tópico que diz Para serviços configurados para usar o ajuste de escala automático de serviço e o tipo de implantação azul/verde, o ajuste de escala automático não é bloqueado durante uma implantação, mas a implantação pode apresentar falha em algumas circunstâncias no Guia do desenvolvedor do Amazon Elastic Container Service.

Possível causa: esse problema pode ocorrer se os processos do CodeDeploy e do ajuste de escala automático entrarem em conflito.

Possível correção: suspender e retomar os processos do ajuste de escala automático durante a implantação do CodeDeploy usando a API RegisterScalableTarget (ou o comando correspondente register-scalable-target da AWS CLI). Para obter mais informações, consulte Suspender e retomar o ajuste de escala do ajuste de escala automático do aplicativo no Guia do usuário do ajuste de escala automático do aplicativo.

nota

O CodeDeploy não pode chamar RegisterScaleableTarget diretamente. Para usar essa API, você deve configurar o CodeDeploy para enviar uma notificação ou evento para o Amazon Simple Notification Service (ou Amazon CloudWatch). Em seguida, você deve configurar o Amazon SNS (ou o CloudWatch) para chamar uma função do Lambda e configurar a função do Lambda para chamar a API RegisterScalableTarget. A API RegisterScalableTarget deve ser chamada com o parâmetro SuspendedState definido como true, para suspender as operações de ajuste de escala automático, e como false, para retomá-las.

A notificação ou evento que o CodeDeploy envia deve ocorrer quando uma implantação começa (para acionar as operações de suspensão do ajuste de escala automático) ou quando uma implantação é bem-sucedida, falha ou é interrompida (para acionar as operações de retomada do ajuste de escala automático).

Para obter informações sobre como configurar o CodeDeploy para gerar notificações do Amazon SNS ou eventos do CloudWatch, consulte Monitorar implantações com o Amazon CloudWatch Events e Monitoring Deployments with Amazon SNS Event Notifications.

Somente o ALB suporta roteamento gradual de tráfego; em vez disso, use o roteamento de tráfego AllAtOnce ao criar/atualizar o grupo de implantação

Problema: você vê a seguinte mensagem de erro ao criar ou atualizar um grupo de implantação no CodeDeploy:

Only ALB supports gradual traffic routing, use AllAtOnce Traffic routing instead when you create/update Deployment group.

Possível causa: esse erro pode ocorrer se você estiver usando um Network Load Balancer e tentar usar uma configuração de implantação predefinida diferente de CodeDeployDefault.ECSAllAtOnce.

Correções possíveis:

Embora minha implantação tenha sido bem-sucedida, o conjunto de tarefas de substituição falha nas verificações de integridade do Elastic Load Balancing, e meu aplicativo está inativo

Problema: embora o CodeDeploy indique que minha implantação foi bem-sucedida, o conjunto de tarefas de substituição falha nas verificações de integridade do Elastic Load Balancing, e meu aplicativo está inativo.

Possível causa: esse problema pode ocorrer se você executou uma implantação completa do CodeDeploy, e seu conjunto de tarefas de substituição (verde) contém um código incorreto que está fazendo com que as verificações de integridade do Elastic Load Balancing falhem. Com a configuração de implantação completa, as verificações de integridade do balanceador de carga começam a ser executadas no conjunto de tarefas de substituição depois que o tráfego é transferido para ele (ou seja, depois da ocorrência do evento de ciclo de vida AllowTraffic do CodeDeploy). É por isso que você verá as verificações de integridade falharem no conjunto de tarefas de substituição após a mudança de tráfego, mas não antes. Para obter informações sobre os eventos de ciclo de vida que o CodeDeploy gera, consulte O que acontece durante uma implantação do .

Correções possíveis:

  • Altere sua configuração de implantação de tudo de uma vez para canário ou linear. Em uma configuração linear ou canário, as verificações de integridade do balanceador de carga começam a ser executadas no conjunto de tarefas de substituição enquanto o CodeDeploy instala seu aplicativo no ambiente de substituição e antes do deslocamento do tráfego (ou seja, durante o evento do ciclo de vida de Install e antes do evento AllowTraffic). Ao permitir que as verificações sejam executadas durante a instalação do aplicativo, mas antes que o tráfego seja transferido, um código incorreto do aplicativo será detectado e causará falhas na implantação antes que o aplicativo se torne disponível publicamente.

    Para obter informações sobre como configurar implantações canário ou lineares, consulte Alterar configurações do grupo de implantação com o CodeDeploy.

    Para obter informações sobre os eventos do ciclo de vida do CodeDeploy que são executados durante uma implantação do Amazon ECS, consulte O que acontece durante uma implantação do .

    nota

    As configurações de implantação canário e linear são compatíveis somente com Application Load Balancers.

  • Se você quiser manter sua configuração de implantação completa, configure um receptor de teste e verifique o status de integridade do conjunto de tarefas de substituição com o gancho do ciclo de vida BeforeAllowTraffic. Para obter mais informações, consulte Lista de hooks do evento do ciclo de vida para uma implantação Amazon ECS.

Posso conectar vários balanceadores de carga a um grupo de implantação?

Não. Se você quiser usar vários Application Load Balancers ou Network Load Balancers, use as atualizações contínuas do Amazon ECS em vez das implantações azul/verde do CodeDeploy. Para obter mais informações sobre as atualizações contínuas, consulte Atualização contínua no Guia do desenvolvedor do Amazon Elastic Container Service. Para obter mais informações sobre o uso de vários balanceadores de carga com o Amazon ECS, consulte Registrar vários grupos de destino com um serviço no Guia do desenvolvedor do Amazon Elastic Container Service.

Posso realizar implantações azul/verde do CodeDeploy sem um balanceador de carga?

Não, você não pode realizar implantações azul/verde do CodeDeploy sem um balanceador de carga. Se você não conseguir usar um balanceador de carga, use o atributo de atualizações contínuas do Amazon ECS. Para obter mais informações sobre as atualizações contínuas do Amazon ECS, consulte Atualização contínua no Guia do desenvolvedor do Amazon Elastic Container Service.

Como posso atualizar meu serviço Amazon ECS com novas informações durante uma implantação?

Para que o CodeDeploy atualize seu serviço Amazon ECS com um novo parâmetro enquanto conduz uma implantação, especifique o parâmetro na seção resources do arquivo AppSpec. Somente alguns parâmetros do Amazon ECS são compatíveis com o CodeDeploy, como o arquivo de definição da tarefa e os parâmetros do nome do contêiner. Para obter uma lista completa dos parâmetros do Amazon ECS que o CodeDeploy pode atualizar, consulte Seção “resources” AppSpec para implantações da Amazon ECS.

nota

Se você precisar atualizar seu serviço Amazon ECS com um parâmetro que não é compatível com o CodeDeploy, faça estas tarefas:

  1. Chame a API UpdateService do Amazon ECS com o parâmetro que você deseja atualizar. Para obter uma lista completa dos parâmetros que podem ser atualizados, consulte UpdateService na Referência de API do Amazon Elastic Container Service.

  2. Para aplicar a alteração às tarefas, crie uma nova implantação azul/verde do Amazon ECS. Para obter mais informações, consulte Criar uma implantação da plataforma de computação do Amazon ECS (console).