Solucionar problemas de implantações azuis/verdes do Amazon ECS
Veja as soluções para problemas comuns que podem surgir ao usar implantações azul/verde com o Amazon ECS. Erros de implantação azul/verde podem ocorrer durante as seguintes fases:
-
Caminho síncrono: erros que surgem imediatamente em resposta às chamadas de API
CreateService
ouUpdateService
. -
Caminho assíncrono: erros que surgem no campo
statusReason
deDescribeServiceDeployments
e causam uma reversão da implantação
Problemas de configuração do balanceador de carga
A configuração do balanceador de carga é um componente crítico das implantações azul/verde no Amazon ECS. A configuração adequada das regras do receptor, dos grupos-alvo e dos tipos de balanceador de carga é essencial para implantações bem-sucedidas. Esta seção aborda problemas comuns de configuração do balanceador de carga que podem causar falhas nas implantações azul/verde.
Ao solucionar problemas de balanceador de carga, é importante entender a relação entre regras de receptores e grupos de destino. Em uma implantação azul/verde:
-
A regra do receptor de produção direciona o tráfego para a revisão de serviço ativa no momento (azul)
-
A regra do receptor de teste pode ser usada para validar a nova revisão de serviço (verde) antes de mudar o tráfego de produção
-
Os grupos de destino são usados para registrar as instâncias do contêiner de cada revisão de serviço
-
Durante a implantação, o tráfego é gradualmente transferido da revisão de serviço azul para a revisão de serviço verde mediante o ajuste dos pesos dos grupos de destino nas regras do receptor
Erros de configuração da regra do receptor
Os problemas a seguir estão relacionados à configuração incorreta de regras de receptor para implantações azul/verde.
- Usar um ARN de receptor do Application Load Balancer em vez de um ARN de regra de receptor
-
Mensagem de erro:
productionListenerRule has an invalid ARN format. Must be RuleArn for ALB or ListenerArn for NLB. Got: arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-alb/abc123/def456
Solução: ao usar um Application Load Balancer, é necessário especificar um ARN de regra de receptor para
productionListenerRule
etestListenerRule
, e não um ARN de receptor. Para Network Load Balancers, é necessário usar o ARN do receptor.Para obter mais informações sobre como encontrar o ARN do receptor, consulte Receptores para seus Application Load Balancers no Guia do usuário do Application Load Balancer. O ARN de uma regra tem o formato
.arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/...
- Usar a mesma regra para receptores de produção e teste
-
Mensagem de erro:
The following rules cannot be used as both production and test listener rules: arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-alb/abc123/def456/ghi789
Solução: é necessário usar regras de receptor diferentes para tráfego de produção e teste. Crie uma regra de receptor separada para o tráfego de teste que é roteado para seu grupo de destino de teste.
- Regra do receptor de teste ausente para um Network Load Balancer
-
Mensagem de erro:
TestListenerRule is required for NLB with arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/nlb-targetgroup/abc123
Solução: ao usar um Network Load Balancer, é necessário especificar
productionListenerRule
etestListenerRule
. Adicione umtestListenerRule
com um ARN de receptor válido à sua configuração. Para obter mais informações, consulte Criar um receptor para seu Network Load Balancer no Guia do usuário do Network Load Balancer - Grupo de destino não associado às regras do receptor
-
Mensagem de erro:
Service deployment rolled back because of invalid networking configuration: Target group arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/myAlternateTG/abc123 is not associated with either productionListenerRule or testListenerRule.
Solução: tanto o grupo de destino principal quanto o grupo de destino alternativo devem estar associados à regra do receptor de produção ou à regra do receptor de teste. Atualize a configuração do balanceador de carga para garantir que os dois grupos de destino estejam associados adequadamente às suas regras de receptor.
- Regra do receptor de teste ausente para um Application Load Balancer
-
Mensagem de erro:
For Application LoadBalancer, testListenerRule is required when productionListenerRule is not associated with both targetGroup and alternateTargetGroup
Solução: ao usar um Application Load Balancer, se ambos os grupos de destino não estiverem associados à regra de receptor de produção, você deverá especificar uma regra de receptor de teste. Adicione
testListenerRule
à sua configuração e garanta que os dois grupos de destino estejam associados à regra de receptor de produção ou de teste. Para obter mais informações, consulte Cotas para seus Application Load Balancers no Guia do usuário do Application Load Balancer.
Erros de configuração do grupo de destino
Os problemas a seguir estão relacionados à configuração incorreta de grupos de destino para implantações azul/verde.
- Vários grupos de destino com tráfego na regra do receptor
-
Mensagem de erro:
Service deployment rolled back because of invalid networking configuration. productionListenerRule arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-alb/abc123/def456/ghi789 should have exactly one target group serving traffic but found 2 target groups which are serving traffic
Solução: antes de iniciar uma implantação azul/verde, certifique-se de que somente um grupo de destino esteja recebendo tráfego (com um peso diferente de zero) na sua regra de receptor. Atualize a configuração da regra do receptor para definir o peso como zero para qualquer grupo de destino que não deveria receber tráfego.
- Grupos de destino duplicados nas entradas do balanceador de carga
-
Mensagem de erro:
Duplicate targetGroupArn found: arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/myecs-targetgroup/abc123
Solução: cada ARN de grupo de destino deve ser exclusivo em todas as entradas do balanceador de carga em sua definição de serviço. Revise sua configuração e certifique-se de usar grupos de destino diferentes para cada entrada do balanceador de carga.
- Grupo de destino inesperado na regra do receptor de produção
-
Mensagem de erro:
Service deployment rolled back because of invalid networking configuration. Production listener rule is forwarding traffic to unexpected target group arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/random-nlb-tg/abc123. Expected traffic to be forwarded to either targetGroupArn: arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/nlb-targetgroup/def456 or alternateTargetGroupArn: arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/nlb-tg-alternate/ghi789
Solução: a regra do receptor de produção está encaminhando o tráfego para um grupo de destino que não está especificado em sua definição de serviço. Certifique-se de que a regra do receptor esteja configurada para encaminhar o tráfego somente para os grupos de destino especificados em sua definição de serviço.
Para obter mais informações, consulte ações de encaminhamento no Guia do usuário do Application Load Balancer.
Erros de configuração do tipo de balanceador de carga
Os problemas a seguir estão relacionados à configuração incorreta do tipo de balanceador de carga para implantações azul/verde.
- Misturando configurações de Classic Load Balancer e Application Load Balancer ou Network Load Balancer
-
Mensagem de erro:
All loadBalancers must be strictly either ELBv1 (defining loadBalancerName) or ELBv2 (defining targetGroupArn)
nota
Os Classic Load Balancers são balanceadores de carga da geração anterior ao Elastic Load Balancing. Recomendamos migrar para um balanceador de carga da geração atual. Para obter mais informações, consulte Migrar seus Classic Load Balancers.
Solução: . Use somente Classic Load Balancers ou então Application Load Balancers e Network Load Balancers.
Para Application Load Balancers e Network Load Balancers, especifique apenas o campo
targetGroupArn
. - Usar configuração avançada com um Classic Load Balancer
-
Mensagem de erro:
advancedConfiguration field is not allowed with ELBv1 loadBalancers
Solução: a configuração avançada para implantações azul/verde só é compatível com Application Load Balancers e Network Load Balancers. Se você usa um Classic Load Balancer (especificado com
loadBalancerName
), não poderá usar o campoadvancedConfiguration
. Migre para um Application Load Balancer ou remova o campoadvancedConfiguration
. - Configuração avançada inconsistente entre balanceadores de carga
-
Mensagem de erro:
Either all or none of the provided loadBalancers must have advancedConfiguration defined
Solução: se você estiver usando vários balanceadores de carga, deverá definir
advancedConfiguration
para todos eles ou para nenhum deles. Atualize sua configuração para garantir a consistência em todas as entradas do balanceador de carga. - Ausência de configuração avançada com implantação azul/verde
-
Mensagem de erro:
advancedConfiguration field is required for all loadBalancers when using a non-ROLLING deployment strategy
Solução: ao usar uma estratégia de implantação azul/verde com Application Load Balancers, é necessário especificar o campo
advancedConfiguration
para todas as entradas do balanceador de carga. Adicione oadvancedConfiguration
necessário à configuração do balanceador de carga.
Problemas com permissões
Os problemas a seguir estão relacionados a permissões insuficientes para implantações azul/verde.
- Política de confiança ausente em perfil de infraestrutura
-
Mensagem de erro:
Service deployment rolled back because of invalid networking configuration. ECS was unable to manage the ELB resources due to missing permissions on ECS Infrastructure Role 'arn:aws:iam::123456789012:role/Admin'.
Solução: o perfil do IAM especificado para gerenciar recursos do balanceador de carga não tem a política de confiança correta. Atualize a política de confiança do perfil para permitir que o serviço assuma o perfil. A política de confiança deve incluir:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- Permissões de leitura ausentes no perfil do balanceador de carga
-
Mensagem de erro:
service myService failed to describe target health on target-group myTargetGroup with (error User: arn:aws:sts::123456789012:assumed-role/myELBRole/ecs-service-scheduler is not authorized to perform: elasticloadbalancing:DescribeTargetHealth because no identity-based policy allows the elasticloadbalancing:DescribeTargetHealth action)
Solução: o perfil do IAM usado para gerenciar recursos do balanceador de carga não tem permissão para ler as informações de integridade do destino. Adicione a permissão
elasticloadbalancing:DescribeTargetHealth
à política do perfil. Para obter informações sobre as permissões do Elastic Load Balancing, consulte Perfil do IAM da infraestrutura do Amazon ECS para balanceadores de carga. - Permissões de gravação ausentes no perfil do balanceador de carga
-
Mensagem de erro:
service myService failed to register targets in target-group myTargetGroup with (error User: arn:aws:sts::123456789012:assumed-role/myELBRole/ecs-service-scheduler is not authorized to perform: elasticloadbalancing:RegisterTargets on resource: arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/myTargetGroup/abc123 because no identity-based policy allows the elasticloadbalancing:RegisterTargets action)
Solução: o perfil do IAM usado para gerenciar recursos do balanceador de carga não tem permissão para registrar destinos. Adicione a permissão
elasticloadbalancing:RegisterTargets
à política do perfil. Para obter informações sobre as permissões do Elastic Load Balancing, consulte Perfil do IAM da infraestrutura do Amazon ECS para balanceadores de carga. - Ausência de permissão para modificar as regras do receptor
-
Mensagem de erro:
Service deployment rolled back because TEST_TRAFFIC_SHIFT lifecycle hook(s) failed. User: arn:aws:sts::123456789012:assumed-role/myELBRole/ECSNetworkingWithELB is not authorized to perform: elasticloadbalancing:ModifyListener on resource: arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-alb/abc123/def456 because no identity-based policy allows the elasticloadbalancing:ModifyListener action
Solução: o perfil do IAM usado para gerenciar recursos do balanceador de carga não tem permissão para modificar receptores. Adicione a permissão
elasticloadbalancing:ModifyListener
à política do perfil. Para obter informações sobre as permissões do Elastic Load Balancing, consulte Perfil do IAM da infraestrutura do Amazon ECS para balanceadores de carga.
Para implantações azul/verde, recomendamos anexar a política gerenciada AmazonECS-ServiceLinkedRolePolicy
ao seu perfil de infraestrutura, o qual inclui todas as permissões necessárias para gerenciar os recursos do balanceador de carga.
Problemas de gancho do ciclo de vida
Os problemas a seguir estão relacionados a ganchos do ciclo de vida em implantações azul/verde.
- Política de confiança incorreta no perfil do hook do Lambda
-
Mensagem de erro:
Service deployment rolled back because TEST_TRAFFIC_SHIFT lifecycle hook(s) failed. ECS was unable to assume role arn:aws:iam::123456789012:role/Admin
Solução: o perfil do IAM especificado para o gancho do ciclo de vida do Lambda não tem a política de confiança correta. Atualize a política de confiança do perfil para permitir que o serviço assuma o perfil. A política de confiança deve incluir:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- O hook do Lambda retorna o status de FALHA
-
Mensagem de erro:
Service deployment rolled back because TEST_TRAFFIC_SHIFT lifecycle hook(s) failed. Lifecycle hook target arn:aws:lambda:us-west-2:123456789012:function:myHook returned FAILED status.
Solução: a função do Lambda especificada como um gancho do ciclo de vida retornou um status de FALHA. Verifique os logs da função Lambda nos logs do Amazon CloudWatch para determinar o motivo da falha e atualize a função para lidar com o evento de implantação corretamente.
- Ausência de permissão para invocar função do Lambda
-
Mensagem de erro:
Service deployment rolled back because TEST_TRAFFIC_SHIFT lifecycle hook(s) failed. ECS was unable to invoke hook target arn:aws:lambda:us-west-2:123456789012:function:myHook due to User: arn:aws:sts::123456789012:assumed-role/myLambdaRole/ECS-Lambda-Execution is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-west-2:123456789012:function:myHook because no identity-based policy allows the lambda:InvokeFunction action
Solução: o perfil do IAM usado para o gancho do ciclo de vida do Lambda não tem permissão para invocar a função do Lambda. Adicione a permissão
lambda:InvokeFunction
à política do perfil para o ARN da função do Lambda específica. Para obter informações sobre as permissões do Lambda, consulte Permissões necessárias para funções do Lambda em implantações azul/verde do Amazon ECS. - Tempo limite excedido ou resposta inválida da função do Lambda
-
Mensagem de erro:
Service deployment rolled back because TEST_TRAFFIC_SHIFT lifecycle hook(s) failed. ECS was unable to parse the response from arn:aws:lambda:us-west-2:123456789012:function:myHook due to HookStatus must not be null
Solução: a função Lambda atingiu o tempo limite ou retornou uma resposta inválida. Certifique-se de que sua função do Lambda retorne uma resposta válida com um campo
hookStatus
definido comoSUCCEEDED
ouFAILED
. Além disso, verifique se o tempo limite da função do Lambda está definido adequadamente para sua lógica de validação. Para obter mais informações, consulte Ganchos do ciclo de vida para implantações de serviços do Amazon ECS.Exemplo de uma resposta do Lambda válida:
{ "hookStatus": "SUCCEEDED", "reason": "Validation passed" }