Solucionar problemas de implantação do Amazon ECS - 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á.

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: 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: 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: 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 Lambda na Hooksseção do AppSpec arquivo, mas não deu CodeDeploy permissão ao serviço Lambda.

Possível correção: adicione a lambda:InvokeFunction permissão à função CodeDeploy de serviço. 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 à função CodeDeploy de serviço, consulteEtapa 2: criar uma função 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: 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ê especificar uma função Lambda na Hooksseção do AppSpec arquivo, mas a função Lambda não conseguiu chamar a PutLifecycleEventHookExecutionStatus API necessária para retornar um Succeeded status ou para. Failed CodeDeploy

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

  • Adicione a codedeploy:putlifecycleEventHookExecutionStatus permissão à função de execução do Lambda usada pela função Lambda que você especificou no arquivo. AppSpec Essa permissão concede à função Lambda a capacidade de retornar um status de Succeeded ou Failed para. 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 Lambda e os registros de execução para garantir que sua função Lambda esteja chamando a PutLifecycleEventHookExecutionStatus API CodeDeploy do Lambda para informar se o teste de validação do ciclo CodeDeploy de vida é ou não. Succeeded Failed Para obter informações sobre a putlifecycleEventHookExecutionStatus API, consulte PutLifecycleEventHookExecutionStatusa Referência AWS CodeDeploy da API. Para obter informações sobre os registros de execução do Lambda, consulte Acessando os CloudWatch registros da Amazon 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: 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 Lambda na Hooksseção do AppSpec arquivo, mas a função Lambda retornou Failed quando foi chamada. CodeDeploy PutLifecycleEventHookExecutionStatus Essa falha indica 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 informações sobre os registros de execução do Lambda, consulte Acessando os CloudWatch registros da Amazon 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: 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 ouvinte de teste em CodeDeploy, consulte Antes de começar uma ECS implantação da Amazon e. O que acontece durante uma ECS implantação da Amazon Para obter mais informações sobre conjuntos de tarefas, consulte TaskSetna Referência de API do Amazon Elastic Container Service e describe-task-setna seção Amazon ECS da Referência de AWS CLI Comandos.

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 Auto Scaling com 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 CodeDeploy os processos do Auto Scaling entrarem em conflito.

Possível correção: suspender e retomar os processos do Auto Scaling durante CodeDeploy a implantação usando RegisterScalableTarget a API (ou o comando register-scalable-target AWS CLI correspondente). 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

CodeDeploy não consigo ligar RegisterScaleableTarget diretamente. Para usar essa API, você deve configurar 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 CloudWatch) para chamar uma função Lambda e configurar a função 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 CodeDeploy enviado deve ocorrer quando uma implantação é iniciada (para acionar as operações de suspensão do Auto Scaling) ou quando uma implantação é bem-sucedida, falha ou é interrompida (para acionar a retomada das operações do Auto Scaling).

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

Somente o ALB oferece suporte ao roteamento gradual de tráfego; em vez disso, use o roteamento de AllAtOnce tráfego 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 em 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 CodeDeploy indique que minha implantação foi bem-sucedida, o conjunto de tarefas de substituição falha nas verificações de saúde do Elastic Load Balancing e meu aplicativo está inativo.

Possível causa: Esse problema pode ocorrer se você executou uma CodeDeploy all-at-once implantação e seu conjunto de tarefas de substituição (verde) contém um código incorreto que está causando a falha nas verificações de integridade do Elastic Load Balancing. Com a configuração de all-at-once implantação, 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, após a ocorrência CodeDeploy do evento do AllowTraffic ciclo de vida). É 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 do ciclo de vida que são CodeDeploy gerados, consulte. O que acontece durante uma ECS implantação da Amazon

Correções possíveis:

  • Altere sua configuração de implantação all-at-once de canária ou linear. Em uma configuração linear ou canária, as verificações de integridade do balanceador de carga começam a ser executadas no conjunto de tarefas de substituição durante a CodeDeploy instalação do aplicativo no ambiente de substituição e antes do deslocamento do tráfego (ou seja, durante o evento do Install ciclo de vida 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 Altere as configurações do grupo de implantação com CodeDeploy.

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

    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 all-at-once implantação, configure um ouvinte de teste e verifique o status de integridade do conjunto de tarefas de substituição com o gancho de BeforeAllowTraffic ciclo de vida. Para ter mais informações, consulte Lista de ganchos de eventos de ciclo de vida para uma implantação da 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 de CodeDeploy implantações azul/verdes. 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 em CodeDeploy azul/verde sem um balanceador de carga?

Não, você não pode realizar implantações em CodeDeploy azul/verde 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 CodeDeploy atualizar seu serviço Amazon ECS com um novo parâmetro enquanto ele conduz uma implantação, especifique o parâmetro na resources seção do AppSpec arquivo. Somente alguns parâmetros do Amazon ECS são compatíveis 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 CodeDeploy podem ser atualizados, consulte AppSpec seção 'recursos' para ECS implantações da Amazon.

nota

Se você precisar atualizar seu serviço Amazon ECS com um parâmetro que não é suportado pelo CodeDeploy, conclua 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 UpdateServicea Amazon Elastic Container Service API Reference.

  2. Para aplicar a alteração às tarefas, crie uma nova implantação azul/verde do Amazon ECS. Para ter mais informações, consulte Crie uma implantação da Amazon ECS Compute Platform (console).