Solución de problemas de las implementaciones azul/verde de Amazon ECS
Las siguientes son las soluciones para los problemas más comunes que puede encontrar al utilizar las implementaciones azul/verde con Amazon ECS. Los errores de las implementaciones azul/verde pueden producirse durante las siguientes fases:
-
Ruta sincrónica: errores que aparecen inmediatamente en respuesta a las llamadas a la API
CreateService
oUpdateService
. -
Ruta asíncrona: errores que aparecen en el campo
statusReason
deDescribeServiceDeployments
y provocan una reversión de la implementación
Problemas en la configuración del equilibrador de carga
La configuración del equilibrador de carga es un componente fundamental de las implementaciones azul/verde en Amazon ECS. La configuración adecuada de las reglas de oyente, los grupos objetivo y los tipos de equilibradores de carga es esencial para que las implementaciones tengan éxito. En esta sección, se describen los problemas de configuración más comunes del equilibrador de carga que pueden provocar que las implementaciones azul/verde fallen.
Al solucionar problemas con el equilibrador de carga, es importante comprender la relación entre las reglas de oyente y los grupos de destino. En una implementación azul/verde:
-
La regla de oyente de producción dirige el tráfico a la revisión del servicio actualmente activa (azul).
-
La regla de oyente de prueba se puede utilizar para validar la nueva revisión del servicio (verde) antes de desplazar el tráfico de producción.
-
Los grupos objetivo se utilizan para registrar las instancias de contenedor de cada revisión del servicio.
-
Durante la implementación, el tráfico se desplaza gradualmente de la revisión de servicio azul a la revisión de servicio verde ajustando las ponderaciones de los grupos objetivo en las reglas de oyente.
Errores de configuración en la regla de oyente
Los siguientes problemas se refieren a una configuración incorrecta de la regla de oyente en las implementaciones azul/verde.
- Uso de un ARN de oyente del equilibrador de carga de aplicación en lugar de un ARN de la regla de oyente
-
Mensaje de error:
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
Solución: cuando utilice un equilibrador de carga de aplicación, debe especificar un ARN de regla de oyente para
productionListenerRule
ytestListenerRule
, no un ARN de oyente. Para los equilibradores de carga de red, debe usar el ARN de oyente.Para obtener más información sobre cómo encontrar el ARN de oyente, consulte Oyentes para Equilibrador de carga de aplicación en la Guía del usuario de equilibradores de carga de aplicación. El ARN de una regla tiene el formato
.arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/...
- Uso de la misma regla tanto para los oyentes de producción como para los de prueba
-
Mensaje de error:
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
Solución: debe usar reglas de oyente diferentes para el tráfico de producción y de prueba. Cree una regla de oyente independiente para el tráfico de prueba que se dirija al grupo de destino de prueba.
- Falta la regla de oyente de prueba para un equilibrador de carga de red
-
Mensaje de error:
TestListenerRule is required for NLB with arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/nlb-targetgroup/abc123
Solución: cuando utilice un equilibrador de carga de red, debe especificar tanto
productionListenerRule
comotestListenerRule
. Agregue untestListenerRule
con un ARN de oyente válido a su configuración. Para obtener más información, consulte Crear un oyente para el equilibrador de carga de red en la Guía del usuario de equilibradores de carga de red. - El grupo de destino no está asociado con las reglas de oyente
-
Mensaje de error:
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.
Solución: tanto el grupo de destino principal como el grupo de destino alternativo deben estar asociados a la regla de oyente de producción o a la regla de oyente de prueba. Actualice la configuración del equilibrador de carga para asegurarse de que ambos grupos objetivo estén asociados correctamente a sus reglas de oyente.
- Falta una regla de oyente de prueba con un equilibrador de carga de aplicación
-
Mensaje de error:
For Application LoadBalancer, testListenerRule is required when productionListenerRule is not associated with both targetGroup and alternateTargetGroup
Solución: cuando utiliza un equilibrador de carga de aplicación, si ambos grupos objetivo no están asociados a la regla de oyente de producción, debe especificar una regla de oyente de prueba. Añada un
testListenerRule
a su configuración y asegúrese de que ambos grupos objetivo estén asociados a la regla de escucha de producción o de prueba. Para obtener más información, consulte Oyentes para Equilibrador de carga de aplicación en la Guía del usuario de los equilibradores de carga de aplicaciones.
Errores en la configuración de grupo de destino
Los siguientes problemas se refieren a una configuración incorrecta del grupo de destino en las implementaciones azul/verde.
- Varios grupos objetivo con tráfico en la regla de oyente
-
Mensaje de error:
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
Solución: antes de iniciar una implementación azul/verde, asegúrese de que solo un grupo de destino reciba tráfico (con un peso distinto de cero) en la regla de oyente. Actualice la configuración de las reglas de oyente para establecer el peso en cero para cualquier grupo de destino que no deba recibir tráfico.
- Grupos objetivo duplicados en las entradas del equilibrador de carga
-
Mensaje de error:
Duplicate targetGroupArn found: arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/myecs-targetgroup/abc123
Solución: el ARN de cada grupo de destino debe ser único en todas las entradas del equilibrador de carga de la definición del servicio. Revise la configuración y asegúrese de usar grupos de destino diferentes para cada entrada del equilibrador de carga.
- Grupo de destino inesperado en la regla de oyente de producción
-
Mensaje de error:
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
Solución: la regla de oyente de producción está reenviando el tráfico a un grupo de destino que no está especificado en la definición del servicio. Asegúrese de que la regla de oyente esté configurada para reenviar el tráfico únicamente a los grupos de destino especificados en la definición del servicio.
Para obtener más información, consulte forward actions en la Guía del usuario de equilibradores de carga de aplicaciones.
Errores en la configuración del tipo de equilibrador de carga
Los siguientes problemas se refieren a una configuración incorrecta del tipo de equilibrador de carga en las implementaciones azul/verde.
- Mezcla de configuraciones del equilibrador de carga clásico, el equilibrador de carga de aplicación y el equilibrador de carga de red
-
Mensaje de error:
All loadBalancers must be strictly either ELBv1 (defining loadBalancerName) or ELBv2 (defining targetGroupArn)
nota
Los equilibradores de carga clásicos son los equilibradores de carga de la generación anterior de Elastic Load Balancing. Se recomienda que migre a un equilibrador de carga de la generación actual. Para obtener más información, consulte Migrar el Equilibrador de carga clásico.
Solución: Use todos los equilibradores de carga clásicos o todos los equilibradores de carga de aplicación y los equilibradores de carga de red.
Para los equilibradores de carga de aplicación y los equilibradores de carga de red, especifique solo el campo
targetGroupArn
. - Uso de una configuración avanzada con un equilibrador de carga clásico
-
Mensaje de error:
advancedConfiguration field is not allowed with ELBv1 loadBalancers
Solución: la configuración avanzada para las implementaciones azul/verde solo se admite con los equilibradores de carga de aplicación y los equilibradores de carga de red. Si utiliza un equilibrador de carga clásico (especificado con
loadBalancerName
), no podrá usar el campoadvancedConfiguration
. Cambie a un equilibrador de carga de aplicación o elimine el campoadvancedConfiguration
. - Configuración avanzada incoherente en todos los equilibradores de carga
-
Mensaje de error:
Either all or none of the provided loadBalancers must have advancedConfiguration defined
Solución: si utiliza varios equilibradores de carga, debe definir
advancedConfiguration
para todos o para ninguno. Actualice la configuración para garantizar la coherencia en todas las entradas del equilibrador de carga. - Falta una configuración avanzada con una implementación azul/verde
-
Mensaje de error:
advancedConfiguration field is required for all loadBalancers when using a non-ROLLING deployment strategy
Solución: si utiliza una estrategia de implementación azul/verde con los equilibradores de carga de aplicación, debe especificar el campo
advancedConfiguration
para todas las entradas del equilibrador de carga. Añada eladvancedConfiguration
necesario a la configuración del equilibrador de carga.
Problemas con los permisos
Estos son los problemas relacionados con la falta de permisos para las implementaciones azul/verde.
- Falta una política de confianza sobre el rol de infraestructura
-
Mensaje de error:
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'.
Solución: el rol de IAM especificado para administrar los recursos del equilibrador de carga no tiene la política de confianza correcta. Actualice la política de confianza del rol para permitirle al servicio que lo asuma. La política de confianza debe incluir lo siguiente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- Faltan permisos de lectura en el rol del equilibrador de carga
-
Mensaje de error:
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)
Solución: el rol de IAM utilizado para administrar los recursos del equilibrador de carga no tiene permiso para leer la información sobre el estado del destino. Agregue el permiso
elasticloadbalancing:DescribeTargetHealth
a la política del rol. Para obtener información sobre los permisos de Elastic Load Balancing, consulte Rol de IAM de infraestructura de Amazon ECS para los equilibradores de carga. - Faltan permisos de escritura en el rol del equilibrador de carga
-
Mensaje de error:
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)
Solución: el rol de IAM utilizado para administrar los recursos del equilibrador de carga no tiene permiso para registrar los destinos. Agregue el permiso
elasticloadbalancing:RegisterTargets
a la política del rol. Para obtener información sobre los permisos de Elastic Load Balancing, consulte Rol de IAM de infraestructura de Amazon ECS para los equilibradores de carga. - Falta permiso para modificar las reglas de oyente
-
Mensaje de error:
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
Solución: el rol de IAM utilizado para administrar los recursos del equilibrador de carga no tiene permiso modificar los oyentes. Agregue el permiso
elasticloadbalancing:ModifyListener
a la política del rol. Para obtener información sobre los permisos de Elastic Load Balancing, consulte Rol de IAM de infraestructura de Amazon ECS para los equilibradores de carga.
Para las implementaciones azul/verde, recomendamos adjuntar la política administrada AmazonECS-ServiceLinkedRolePolicy
al rol de infraestructura, que incluye todos los permisos necesarios para administrar los recursos del equilibrador de carga.
Problemas del enlace de ciclo de vida
Estos son los problemas relacionados con los enlaces de ciclo de vida en las implementaciones azul/verde.
- Política de confianza incorrecta en el rol de enlace de Lambda
-
Mensaje de error:
Service deployment rolled back because TEST_TRAFFIC_SHIFT lifecycle hook(s) failed. ECS was unable to assume role arn:aws:iam::123456789012:role/Admin
Solución: el rol de IAM especificado para el enlace de ciclo de vida de Lambda no tiene la política de confianza correcta. Actualice la política de confianza del rol para permitirle al servicio que lo asuma. La política de confianza debe incluir lo siguiente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- El enlace de Lambda devuelve el estado FALLIDO
-
Mensaje de error:
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.
Solución: la función de Lambda especificada como enlace de ciclo de vida devolvió el estado FALLIDO. Compruebe los registros de funciones de Lambda en los registros de Amazon CloudWatch para determinar el motivo del error y actualice la función para gestionar correctamente el evento de implementación.
- Falta permiso para invocar una función de Lambda
-
Mensaje de error:
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
Solución: el rol de IAM utilizado para el enlace de ciclo de vida de Lambda no tiene permiso para invocar la función de Lambda. Agregue el permiso
lambda:InvokeFunction
a la política del rol para el ARN específico de la función de Lambda. Para obtener información acerca de los permisos de Lambda, consulte Permisos necesarios para las funciones de Lambda en las implementaciones azul/verde de Amazon ECS. - Caducidad del tiempo de espera de la función de Lambda o respuesta no válida
-
Mensaje de error:
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
Solución: la función de Lambda agotó el tiempo de espera o devolvió una respuesta no válida. Asegúrese de que la función de Lambda devuelva una respuesta válida con un campo
hookStatus
establecido enSUCCEEDED
oFAILED
. Además, compruebe que el tiempo de espera de la función de Lambda esté configurado de forma adecuada para su lógica de validación. Para obtener más información, consulte Enlaces de ciclo de vida para las implementaciones de servicios de Amazon ECS.Ejemplo de una respuesta de Lambda válida:
{ "hookStatus": "SUCCEEDED", "reason": "Validation passed" }