Solución de problemas de las implementaciones azul/verde de Amazon ECS - Amazon Elastic Container Service

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 o UpdateService.

  • Ruta asíncrona: errores que aparecen en el campo statusReason de DescribeServiceDeployments 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 y testListenerRule, 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 como testListenerRule. Agregue un testListenerRule 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 campo advancedConfiguration. Cambie a un equilibrador de carga de aplicación o elimine el campo advancedConfiguration.

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 el advancedConfiguration 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 en SUCCEEDED o FAILED. 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" }