View a markdown version of this page

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.

Causa possível: esse erro pode ocorrer se você especificou uma função do Lambda na Hooks seção do AppSpec arquivo, mas não deu CodeDeploy permissão ao serviço do 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.

Causa possível: esse erro pode ocorrer se você especificou uma função do Lambda na Hooks seção do AppSpec arquivo, mas a função do Lambda não conseguiu chamar a PutLifecycleEventHookExecutionStatus API necessária para retornar um Failed status Succeeded or. 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 do Lambda que você especificou no AppSpec arquivo. 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 CodeDeploy do Lambda esteja chamando a PutLifecycleEventHookExecutionStatus API para CodeDeploy informar se o teste de validação do ciclo de vida ou. Succeeded Failed Para obter informações sobre a putlifecycleEventHookExecutionStatus API, consulte PutLifecycleEventHookExecutionStatus a Referência AWS CodeDeploy da API. Para obter informações sobre os registros de execução do Lambda, consulte Acessando CloudWatch os 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.

Causa possível: esse erro pode ocorrer se você especificou uma função do Lambda na Hooks seção do AppSpec arquivo, mas a função do Lambda retornou Failed CodeDeploy quando foi chamada. 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 CloudWatch os 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 implantação do e. O que acontece durante uma implantação do Para obter mais informações sobre conjuntos de tarefas, consulte TaskSet a Referência da API do Amazon Elastic Container Service e descreva-task-set na seção Amazon ECS da Referência de Comandos. 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 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 escalonamento automático de serviços e o tipo de blue/green implantação, o escalonamento automático não é bloqueado durante uma implantação, mas a implantação pode falhar em algumas circunstâncias no Guia do desenvolvedor do Amazon Elastic Container Service.

Causa possível: Esse problema pode ocorrer se CodeDeploy os processos do Auto Scaling entrarem em conflito.

Possível solução: suspenda e retome os processos de Auto Scaling durante a CodeDeploy implantação usando a RegisterScalableTarget API (ou o register-scalable-target AWS CLI comando 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 posso ligar RegisterScaleableTarget diretamente. Para usar essa API, você deve configurar o CodeDeploy envio de uma notificação ou evento para o Amazon Simple Notification Service (ou Amazon CloudWatch). Em seguida, você deve configurar o Amazon SNS (or 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 CodeDeploy enviado deve ocorrer quando uma implantação começa (para acionar as operações de suspensão do Auto Scaling) ou quando uma implantação é bem-sucedida, falha ou é interrompida (para acionar as operações de retomada 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 suporta roteamento de tráfego gradual; em vez disso, use o roteamento de AllAtOnce tráfego ao usar o grupo de implantação create/update

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 integridade do Elastic Load Balancing e meu aplicativo está inativo.

Causa possível: Esse problema pode ocorrer se você executou uma implantação CodeDeploy completa de uma só vez e seu conjunto de tarefas substituto (verde) contiver um código incorreto que está causando a falha nas verificações de integridade do Elastic Load Balancing. 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, após a ocorrência do evento CodeDeploy do AllowTraffic ciclo de vida). É por isso que você verá falhas nas verificações de integridade na tarefa de substituição definida após a mudança de tráfego, mas não antes. Para obter informações sobre os eventos do ciclo de vida que CodeDeploy geram, 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 canária ou linear, as verificações de integridade do balanceador de carga começam a ser executadas no conjunto de tarefas de substituição enquanto CodeDeploy instala seu aplicativo no ambiente de substituição e antes que o tráfego seja alterado (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 CodeDeploy do ciclo de vida 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 de implantações. CodeDeploy blue/green 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 CodeDeploy blue/green implantações sem um balanceador de carga?

Não, você não pode realizar CodeDeploy blue/green implantações 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 suportados pelo CodeDeploy, como os parâmetros do arquivo de definição de tarefas e do nome do contêiner. Para obter uma lista completa dos parâmetros do Amazon ECS que CodeDeploy podem ser atualizados, consulteAppSpec seção 'recursos' para implantações do Amazon ECS.

nota

Se você precisar atualizar seu serviço Amazon ECS com um parâmetro que não seja 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 de parâmetros que podem ser atualizados, consulte a Referência UpdateService de API do Amazon Elastic Container Service.

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