Resolución problemas de implementación de Amazon ECS - AWS CodeDeploy

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Resolución problemas de implementación de Amazon ECS

Se agota el tiempo de espera mientras se espera a que se establezca la tarea de reemplazo

Problema: aparece el siguiente mensaje de error al implementar la aplicación Amazon ECS mediante CodeDeploy:

The deployment timed out while waiting for the replacement task set to become healthy. This time out period is 60 minutes.

Causa posible: este error puede producirse si hay un error en el archivo de definición de tareas o en otros archivos relacionados con la implementación. Por ejemplo, si hay un error tipográfico en el campo image del archivo de definición de tareas, Amazon ECS intentará obtener la imagen del contenedor incorrecta y fallará continuamente, lo que provocará este error.

Posibles soluciones y próximos pasos:

  • Corrija los errores tipográficos y los problemas de configuración en el archivo de definición de tareas y en otros archivos.

  • Consulte el evento relacionado con el servicio de Amazon ECS y descubra por qué las tareas de reemplazo no funcionan correctamente. Para obtener más información sobre los eventos de Amazon ECS, consulte Eventos de Amazon ECS en la Guía para desarrolladores de Amazon Elastic Container Service.

  • Consulte la sección de solución de problemas de Amazon ECS de la Guía para desarrolladores de Amazon Elastic Container Service para ver los errores relacionados con los mensajes del evento.

Se agota el tiempo de espera mientras se espera a que continúe una notificación

Problema: aparece el siguiente mensaje de error al implementar la aplicación Amazon ECS mediante CodeDeploy:

The deployment timed out while waiting for a notification to continue. This time out period is n minutes.

Causa posible: este error puede producirse si especificó un tiempo de espera en el campo Especifique cuándo redirigir el tráfico al crear el grupo de implementación, pero la implementación no pudo finalizar antes de que expirara el tiempo de espera.

Posibles soluciones y próximos pasos:

El rol de IAM no tiene permisos suficientes

Problema: aparece el siguiente mensaje de error al implementar la aplicación Amazon ECS mediante CodeDeploy:

The IAM role role-arn does not give you permission to perform operations in the following AWS service: AWSLambda.

Causa posible: este error puede producirse si especificó una función Lambda en la Hookssección del AppSpec archivo, pero no otorgó CodeDeploy permiso al servicio Lambda.

Solución posible: añadir el lambda:InvokeFunction permiso a la función de CodeDeploy servicio. Para añadir este permiso, añada al rol una de las siguientes políticas administradas por AWS: AWSCodeDeployRoleForECS o AWSCodeDeployRoleForECSLimited. Para obtener información sobre estas políticas y cómo añadirlas al rol CodeDeploy de servicio, consultePaso 2: Crear un rol de servicio para CodeDeploy.

Se agotó el tiempo de espera de la implementación mientras se esperaba una llamada de estado

Problema: aparece el siguiente mensaje de error al implementar la aplicación Amazon ECS mediante 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 posible: este error puede producirse si especificó una función de Lambda en la Hookssección del AppSpec archivo, pero la función de Lambda no pudo llamar a la PutLifecycleEventHookExecutionStatus API necesaria para devolver un Succeeded estado o. Failed CodeDeploy

Posibles soluciones y próximos pasos:

  • Agregue el codedeploy:putlifecycleEventHookExecutionStatus permiso a la función de ejecución de Lambda utilizada por la función de Lambda que especificó en el archivo. AppSpec Este permiso otorga a la función Lambda la capacidad de devolver un estado igual Succeeded o Failed igual a. CodeDeploy Para obtener más información sobre el rol de ejecución de Lambda, consulte Rol de ejecución de Lambda en la Guía para desarrolladores de AWS Lambda .

  • Compruebe el código de la función Lambda y los registros de ejecución para asegurarse de que su función Lambda está llamando a la PutLifecycleEventHookExecutionStatus API para informar CodeDeploy sobre si la prueba de validación CodeDeploy del ciclo de vida o. Succeeded Failed Para obtener información sobre la putlifecycleEventHookExecutionStatus API, consulte la referencia PutLifecycleEventHookExecutionStatusde la AWS CodeDeploy API. Para obtener información sobre los registros de ejecución de Lambda, consulte Acceder a los CloudWatch registros de Amazon para. AWS Lambda

La implementación falló porque una o más de las funciones de validación de eventos del ciclo de vida fallaron

Problema: aparece el siguiente mensaje de error al implementar la aplicación Amazon ECS mediante CodeDeploy:

The deployment failed because one or more of the lifecycle event validation functions failed.

Causa posible: este error puede producirse si especificó una función Lambda en la Hookssección del AppSpec archivo, pero la función Lambda regresó Failed a CodeDeploy ella cuando se llamó. PutLifecycleEventHookExecutionStatus Este error indica CodeDeploy que la prueba de validación del ciclo de vida ha fallado.

Posible paso siguiente: compruebe los registros de ejecución de Lambda para ver por qué falla el código de la prueba de validación. Para obtener información sobre los registros de ejecución de Lambda, consulte Acceder a los CloudWatch registros de Amazon para. AWS Lambda

No se pudo actualizar el ELB debido al siguiente error: el grupo objetivo del conjunto de tareas principal debe estar detrás del oyente

Problema: aparece el siguiente mensaje de error al implementar la aplicación Amazon ECS mediante CodeDeploy:

The ELB could not be updated due to the following error: Primary taskset target group must be behind listener

Causa posible: este error puede producirse si ha configurado un oyente de prueba opcional y está configurado con un grupo de destino incorrecto. Para obtener más información sobre el detector de pruebas en CodeDeploy, consulte Antes de comenzar una ECS implementación de Amazon yQué ocurre durante un ECS despliegue de Amazon. Para obtener más información sobre los conjuntos de tareas, consulte TaskSetla referencia de la API de Amazon Elastic Container Service y describe-task-setla sección Amazon ECS de la referencia de AWS CLI comandos.

Posible solución: asegúrese de que tanto el oyente de producción como el oyente de prueba de Elastic Load Balancing apunten al grupo de destino que actualmente atiende sus cargas de trabajo. Hay tres lugares para comprobarlo:

Mi implementación a veces falla cuando uso el escalado automático

Problema: Está utilizando Auto Scaling con CodeDeploy y observa que sus despliegues a veces fallan. Para obtener más información acerca de los síntomas de este problema, consulte el tema que dice Para los servicios configurados para utilizar el escalado automático del servicio y el tipo de implementación azul/verde, el escalado automático no se bloquea durante una implementación, pero la implementación puede fallar en algunas circunstancias en la Guía para desarrolladores de Amazon Elastic Container Service.

Causa posible: este problema puede producirse si CodeDeploy los procesos de Auto Scaling entran en conflicto.

Posible solución: Suspenda y reanude los procesos de Auto Scaling durante el CodeDeploy despliegue mediante la RegisterScalableTarget API (o el register-scalable-target AWS CLI comando correspondiente). Para obtener más información, consulte Suspender y reanudar el escalado para el escalado automático de aplicaciones en la Guía del usuario de escalado automático de aplicaciones.

nota

CodeDeploy no puedo llamar RegisterScaleableTarget directamente. Para utilizar esta API, debe configurarla CodeDeploy para enviar una notificación o un evento a Amazon Simple Notification Service (o Amazon CloudWatch). A continuación, debe configurar Amazon SNS (o CloudWatch) para que llame a una función de Lambda y configurar la función de Lambda para que llame a la API. RegisterScalableTarget Se debe llamar a la API de RegisterScalableTarget con el parámetro SuspendedState establecido en true para suspender las operaciones de escalado automático, y en false para reanudarlas.

La notificación o el evento que se CodeDeploy envía debe producirse cuando se inicia un despliegue (para activar la suspensión de las operaciones de Auto Scaling) o cuando un despliegue tiene éxito, falla o se detiene (para activar la reanudación de las operaciones de Auto Scaling).

Para obtener información sobre cómo CodeDeploy configurar la generación de notificaciones o CloudWatch eventos de Amazon SNS, consulteSupervisión de despliegues con Amazon Events CloudWatch . y. Monitoring Deployments with Amazon SNS Event Notifications

Solo ALB admite el enrutamiento de tráfico gradual; en su lugar, utilice el enrutamiento de AllAtOnce tráfico cuando cree o actualice un grupo de implementación

Problema: aparece el siguiente mensaje de error al crear o actualizar un grupo de implementación en: CodeDeploy

Only ALB supports gradual traffic routing, use AllAtOnce Traffic routing instead when you create/update Deployment group.

Causa posible: este error puede producirse si utiliza un equilibrador de carga de red e intenta utilizar una configuración de implementación predefinida distinta de CodeDeployDefault.ECSAllAtOnce.

Soluciones posibles:

A pesar de que mi implementación se realizó correctamente, el conjunto de tareas de reemplazo no pasa las comprobaciones de estado de Elastic Load Balancing y mi aplicación no funciona

Problema: aunque CodeDeploy indica que mi implementación se ha realizado correctamente, el conjunto de tareas de reemplazo no supera las comprobaciones de estado de Elastic Load Balancing y mi aplicación no funciona.

Causa posible: este problema puede producirse si ha realizado una CodeDeploy all-at-once implementación y el conjunto de tareas de reemplazo (verde) contiene un código incorrecto que provoca que las comprobaciones de estado de Elastic Load Balancing no se realicen correctamente. Con la configuración de all-at-once despliegue, las comprobaciones de estado del balanceador de cargas comienzan a ejecutarse en el conjunto de tareas de reemplazo una vez que el tráfico se ha transferido a él (es decir, después de que se produzca el evento CodeDeploy del AllowTraffic ciclo de vida). Por este motivo, observará que las comprobaciones de estado no se superarán en el conjunto de tareas de reemplazo después de desviar el tráfico, pero no antes. Para obtener información sobre los eventos del ciclo de vida que se CodeDeploy generan, consulteQué ocurre durante un ECS despliegue de Amazon.

Soluciones posibles:

  • Cambie la configuración de despliegue all-at-once a canaria o lineal. En una configuración lineal o lineal, las comprobaciones de estado del balanceador de cargas comienzan a ejecutarse en el conjunto de tareas de reemplazo mientras se CodeDeploy instala la aplicación en el entorno de reemplazo y antes de que se desplace el tráfico (es decir, durante el evento Install del ciclo de vida y antes del AllowTraffic evento). Al permitir que las comprobaciones se ejecuten durante la instalación de la aplicación, pero antes de que se desvíe el tráfico, se detectará un código incorrecto de la aplicación y se producirán errores de implementación antes de que la aplicación esté disponible públicamente.

    Para obtener más información acerca de cómo configurar implementaciones de valor controlado o lineales, consulte Cambie la configuración del grupo de implementación con CodeDeploy.

    Para obtener información sobre los eventos CodeDeploy del ciclo de vida que se ejecutan durante una implementación de Amazon ECS, consulteQué ocurre durante un ECS despliegue de Amazon.

    nota

    Las configuraciones de implementación lineal y de valor controlado solo son compatibles con los equilibradores de carga de aplicación.

  • Si desea conservar la configuración de la all-at-once implementación, configure un detector de pruebas y compruebe el estado de la tarea de reemplazo establecida con el enlace de BeforeAllowTraffic ciclo de vida. Para obtener más información, consulte Lista de enlaces a eventos del ciclo de vida para una ECS implementación de Amazon.

¿Puedo asociar varios equilibradores de carga a un grupo de implementación?

No. Si desea utilizar varios balanceadores de carga de aplicaciones o balanceadores de carga de red, utilice las actualizaciones sucesivas de Amazon ECS en lugar de las implementaciones CodeDeploy azul/verde. Para obtener más información acerca de las actualizaciones continuas, consulte Actualización continua en la Guía para desarrolladores de Amazon Elastic Container Service. Para obtener más información acerca del uso de varios equilibradores de carga con Amazon ECS, consulte Registro de varios grupos de destino con un servicio en la Guía para desarrolladores de Amazon Elastic Container Service.

¿Puedo realizar despliegues CodeDeploy azules o verdes sin un balanceador de carga?

No, no puedes realizar despliegues CodeDeploy azules o verdes sin un balanceador de carga. Si no puede utilizar un equilibrador de carga, utilice en su lugar la característica de actualizaciones continuas de Amazon ECS. Para obtener más información acerca de las actualizaciones continuas de Amazon ECS, consulte Actualización continua en la Guía para desarrolladores de Amazon Elastic Container Service.

¿Cómo puedo actualizar mi servicio de Amazon ECS con nueva información durante una implementación?

Para CodeDeploy actualizar su servicio Amazon ECS con un parámetro nuevo mientras lleva a cabo una implementación, especifique el parámetro en la resources sección del AppSpec archivo. Solo se admiten algunos parámetros de Amazon ECS CodeDeploy, como el archivo de definición de tareas y los parámetros del nombre del contenedor. Para obtener una lista completa de los parámetros de Amazon ECS que CodeDeploy se pueden actualizar, consulte AppSpec sección de «recursos» para las ECS implementaciones de Amazon.

nota

Si necesita actualizar su servicio Amazon ECS con un parámetro que no es compatible con CodeDeploy, complete estas tareas:

  1. Llame a la API UpdateService de Amazon ECS con el parámetro que desee actualizar. Para obtener una lista completa de los parámetros que se pueden actualizar, consulte la referencia UpdateServicede la API de Amazon Elastic Container Service.

  2. Para aplicar el cambio a las tareas, cree una nueva implementación azul/verde de Amazon ECS. Para obtener más información, consulte Crear una implementación de Amazon ECS Compute Platform (consola).