Integración CodeDeploy con Amazon EC2 Auto Scaling - 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.

Integración CodeDeploy con Amazon EC2 Auto Scaling

CodeDeploy es compatible con Amazon EC2 Auto Scaling, un AWS servicio que lanza instancias de Amazon EC2 automáticamente según las condiciones que defina. Estas condiciones pueden incluir que se supere un límite de tiempo específico para el uso de la CPU, que se lea o escriba el disco, o el tráfico de red entrante y saliente. Amazon EC2 Auto Scaling termina las instancias cuando dejan de ser necesarias. Para obtener más información, consulte Grupo de Amazon EC2 Auto Scaling en la Guía del usuario de Amazon EC2 Auto Scaling.

Cuando se lanzan nuevas instancias de Amazon EC2 como parte de un CodeDeploy grupo de Auto Scaling de Amazon EC2, puede implementar sus revisiones en las nuevas instancias automáticamente. También puede coordinar las implementaciones CodeDeploy con instancias de Auto Scaling de Amazon EC2 registradas en los balanceadores de carga de Elastic Load Balancing. Para obtener más información, consulte Integrating CodeDeploy with Elastic Load Balancing y Configurar un balanceador de carga en Elastic Load Balancing para las implementaciones de CodeDeploy Amazon EC2.

nota

Tenga en cuenta que es posible que surjan problemas si asocia varios grupos de implementación con un único grupo de Amazon EC2 Auto Scaling. Por ejemplo, si falla una implementación, la instancia comenzará a cerrarse, pero el resto de las implementaciones en ejecución puede que tarden una hora en agotar el tiempo de espera. Para obtener más información, consulte Under Evite asociar varios grupos de implementación a un único grupo de Amazon EC2 Auto Scaling the Hood: CodeDeploy y la integración de Auto Scaling de Amazon EC2.

Implementación de CodeDeploy aplicaciones en grupos de Auto Scaling de Amazon EC2

Para implementar una revisión de CodeDeploy la aplicación en un grupo de Auto Scaling de Amazon EC2:

  1. Cree o localice un perfil de instancia de IAM que permita al grupo de Amazon EC2 Auto Scaling trabajar con Amazon S3. Para obtener más información, consulte Paso 4: Crear un perfil de instancia de IAM para las instancias de Amazon EC2.

    nota

    También puede utilizarlas CodeDeploy para implementar revisiones desde los GitHub repositorios en los grupos de Auto Scaling de Amazon EC2. Si bien las instancias de Amazon EC2 siguen necesitando un perfil de instancia de IAM, el perfil no necesita permisos adicionales para implementarse desde un repositorio. GitHub

  2. Cree o utilice un grupo de Amazon EC2 Auto Scaling, especificando el perfil de instancia de IAM en su configuración o plantilla de lanzamiento. Para obtener más información, consulte Rol de IAM para aplicaciones que se ejecutan en instancias de Amazon EC2.

  3. Cree o localice un rol de servicio que permita CodeDeploy crear un grupo de implementación que contenga el grupo Auto Scaling de Amazon EC2.

  4. Cree un grupo de implementación especificando el nombre del grupo de Auto Scaling de Amazon EC2, la función de servicio y algunas opciones más. CodeDeploy Para obtener más información, consulte Creación de un grupo de implementación para una implementación local (consola) o Creación de un grupo de implementación para una implementación local (consola).

  5. CodeDeploy Utilícela para implementar la revisión en el grupo de implementación que contiene el grupo Auto Scaling de Amazon EC2.

Para obtener más información, consulte Tutorial: Se usa CodeDeploy para implementar una aplicación en un grupo de Auto Scaling.

Habilitación de implementaciones de terminación durante los eventos de reducción horizontal de Auto Scaling

Un despliegue de terminación es un tipo de CodeDeploy despliegue que se activa automáticamente cuando se produce un evento de escalado interno de Auto Scaling. CodeDeploy realiza el despliegue de terminación justo antes de que el servicio Auto Scaling finalice la instancia. Durante un despliegue de terminación, CodeDeploy no despliega nada. En su lugar, genera eventos de ciclo de vida, que puede enlazar a sus propios scripts para habilitar una funcionalidad de apagado personalizada. Por ejemplo, puede enlazar el evento del ciclo de vida de ApplicationStop a un script que apague la aplicación sin problemas antes de que finalice la instancia.

Para obtener una lista de los eventos del ciclo de vida que se CodeDeploy generan durante un despliegue de terminación, consulteDisponibilidad de los enlaces de eventos del ciclo de vida.

Si la implementación de la terminación falla por algún motivo, CodeDeploy permitirá que la finalización de la instancia continúe. Esto significa que la instancia se cerrará aunque CodeDeploy no se haya ejecutado todo el conjunto (o ninguno) de los eventos del ciclo de vida hasta completarse.

Si no habilita las implementaciones de terminación, el servicio Auto Scaling seguirá cancelando las instancias de Amazon EC2 cuando se produzca un evento de escalado interno, CodeDeploy pero no generará eventos de ciclo de vida.

nota

Independientemente de si habilita las implementaciones de terminación o no, si el servicio Auto Scaling finaliza una instancia de Amazon EC2 mientras la implementación está en marcha, puede producirse CodeDeploy una situación de carrera entre los eventos del ciclo de vida generados por Auto Scaling y los servicios. CodeDeploy Por ejemplo, el evento Terminating del ciclo de vida (generado por el servicio Auto Scaling) podría anular el ApplicationStart evento (generado por la CodeDeploy implementación). En este escenario, es posible que se produzca un error al finalizar la instancia de Amazon EC2 o al CodeDeploy implementarse.

Para permitir la realización CodeDeploy de despliegues de terminación

Una vez instalado el enlace de terminación, se produce un evento de reducción horizontal (terminación) de la siguiente manera:

  1. El servicio de Auto Scaling (o simplemente Auto Scaling) determina que debe producirse un evento de reducción horizontal y se pone en contacto con el servicio de EC2 para terminar una instancia de EC2.

  2. El servicio de EC2 comienza la terminación de la instancia EC2. La instancia pasa al estado Terminating y, después, al estado Terminating:Wait.

  3. Durante este procesoTerminating:Wait, Auto Scaling ejecuta todos los ganchos del ciclo de vida adjuntos al grupo Auto Scaling, incluido el gancho de terminación instalado por CodeDeploy.

  4. El enlace de terminación envía una notificación a la cola de Amazon SQS que es sondeada. CodeDeploy

  5. Al recibir la notificación, CodeDeploy analiza el mensaje, realiza algunas validaciones y realiza un despliegue de terminación.

  6. Mientras se ejecuta la implementación de terminación, CodeDeploy envía latidos cada cinco minutos a Auto Scaling para avisarle de que la instancia aún se está trabajando en la instancia.

  7. Hasta ahora, la instancia de EC2 sigue en el estado Terminating:Wait (o posiblemente en el estado Warmed:Pending:Wait, si ha activado los grupos de calentamiento de grupos de Auto Scaling).

  8. Cuando se complete el despliegue, CodeDeploy indica a Auto Scaling CONTINUE el proceso de terminación de EC2, independientemente de si el despliegue de terminación se realizó correctamente o no.

Cómo funciona Amazon EC2 Auto Scaling con CodeDeploy

Al crear o actualizar un grupo de CodeDeploy implementación para incluir un grupo de Auto Scaling, CodeDeploy accede al grupo de Auto Scaling mediante el rol de CodeDeploy servicio y, a continuación, instala los enlaces del ciclo de vida de Auto Scaling en sus grupos de Auto Scaling.

nota

Los ganchos del ciclo de vida de Auto Scaling son diferentes de los eventos del ciclo de vida (también denominados ganchos de eventos del ciclo AppSpec sección de «ganchos» de vida) generados CodeDeploy y descritos en esta guía.

Los ganchos del ciclo de vida de Auto Scaling que CodeDeploy instala son:

  • Un enlace de lanzamiento: este enlace notifica CodeDeploy que hay un evento de escalado horizontal de Auto Scaling en curso y que es CodeDeploy necesario iniciar una implementación de lanzamiento.

    Durante una implementación de lanzamiento,: CodeDeploy

    • Implementa una revisión de la aplicación en la instancia escalada horizontalmente.

    • Genera eventos de ciclo de vida para indicar el progreso de la implementación. Puede enlazar estos eventos de ciclo de vida a sus propios scripts para habilitar una funcionalidad de inicio personalizada. Para obtener más información, consulte la tabla en Disponibilidad de los enlaces de eventos del ciclo de vida.

    El enlace de lanzamiento y la implementación de lanzamiento asociada siempre están habilitados y no se pueden desactivar.

  • Un enlace de terminación: este enlace opcional notifica CodeDeploy que se está produciendo un evento de escalado automático de Auto Scaling y que CodeDeploy debe iniciar un despliegue de terminación.

    Durante una implementación de terminación, CodeDeploy genera eventos del ciclo de vida para indicar el progreso del cierre de la instancia. Para obtener más información, consulte Habilitación de implementaciones de terminación durante los eventos de reducción horizontal de Auto Scaling.

Una vez CodeDeploy instalados los enlaces del ciclo de vida, ¿cómo se utilizan?

Una vez instalados los ganchos del ciclo de vida de lanzamiento y finalización, los utilizan CodeDeploy durante los eventos de escalado horizontal y horizontal de grupo de Auto Scaling, respectivamente.

Un evento de escalado horizontal (lanzamiento) se desarrolla de la siguiente manera:

  1. El servicio de escalado automático (o simplemente Auto Scaling) determina que debe producirse un evento de escalado horizontal y se pone en contacto con el servicio de EC2 para lanzar una nueva instancia de EC2.

  2. El servicio de EC2 lanza una nueva instancia de EC2. La instancia pasa al estado Pending y, después, al estado Pending:Wait.

  3. Durante este procesoPending:Wait, Auto Scaling ejecuta todos los ganchos del ciclo de vida adjuntos al grupo Auto Scaling, incluido el gancho de lanzamiento instalado por CodeDeploy.

  4. El enlace de lanzamiento envía una notificación a la cola de Amazon SQS consultada por. CodeDeploy

  5. Al recibir la notificación, CodeDeploy analiza el mensaje, realiza algunas validaciones e inicia una implementación de lanzamiento.

  6. Mientras se ejecuta la implementación de lanzamiento, CodeDeploy envía latidos cada cinco minutos a Auto Scaling para avisarle de que la instancia aún se está trabajando en la instancia.

  7. Hasta el momento, la instancia EC2 sigue en el estado Pending:Wait.

  8. Cuando se complete la implementación, CodeDeploy indica a Auto Scaling el proceso de lanzamiento CONTINUE o ABANDON el de EC2, dependiendo de si la implementación se realizó correctamente o no.

    • Si así CodeDeploy lo indicaCONTINUE, Auto Scaling continúa con el proceso de lanzamiento, ya sea esperando a que se completen otros enlaces o poniendo la instancia en el estado Pending:Proceed y luego en el InService estado.

    • Si así CodeDeploy lo indicaABANDON, Auto Scaling finaliza la instancia EC2 y reinicia el procedimiento de lanzamiento si es necesario para cumplir con el número deseado de instancias, tal como se define en la configuración de Capacidad deseada de Auto Scaling.

Un evento de reducción horizontal (terminación) se desarrolla de la siguiente manera:

Consulte Habilitación de implementaciones de terminación durante los eventos de reducción horizontal de Auto Scaling.

Cómo se CodeDeploy nombran los grupos de Auto Scaling de Amazon EC2

Durante las implementaciones azul/verde en una plataforma de informática de EC2/en las instalaciones, tiene dos opciones para añadir instancias al entorno de sustitución (verde):

  • Utilice instancias que ya existan o que cree manualmente.

  • Utilizar la configuración de un grupo de Amazon EC2 Auto Scaling especificado para definir y crear instancias en un nuevo grupo de Amazon EC2 Auto Scaling.

Si elige la segunda opción, le CodeDeploy aprovisiona un nuevo grupo de Auto Scaling de Amazon EC2. Utiliza la siguiente convención para el nombre del grupo:

CodeDeploy_deployment_group_name_deployment_id

Por ejemplo, si una implementación con ID 10 implementa un grupo de implementación llamado alpha-deployments, el grupo de Amazon EC2 Auto Scaling aprovisionado se llama CodeDeploy_alpha-deployments_10. Para obtener más información, consulte Creación de un grupo de implementación para una implementación azul/verde de EC2/en las instalaciones (consola) y GreenFleetProvisioningOption.

Orden de ejecución de eventos de enlace de ciclo de vida personalizados

Puede añadir sus propios enlaces de ciclo de vida a los grupos de Auto Scaling de Amazon EC2 en los que se CodeDeploy realiza la implementación. Sin embargo, el orden en que se ejecutan esos eventos de enlace del ciclo de vida personalizados no se puede predeterminar en relación con los eventos del ciclo de vida de la implementación CodeDeploy predeterminados. Por ejemplo, si agrega un enlace de ciclo de vida personalizado denominado ReadyForSoftwareInstall a un grupo de Auto Scaling de Amazon EC2, no podrá saber de antemano si se ejecutará antes del primer evento del ciclo de vida de la implementación CodeDeploy predeterminado o después del último.

Para obtener información sobre cómo añadir enlaces de ciclo de vida personalizados a un grupo de Amazon EC2 Auto Scaling, consulte Añadir enlaces de ciclo de vida en la Guía del usuario de Amazon EC2 Auto Scaling.

Eventos de escalado horizontal durante una implementación

Si se produce un evento de escalado horizontal de Auto Scaling mientras está en curso una implementación, las nuevas instancias se actualizarán con la revisión de la aplicación que se implementó antes, no con la última revisión de la aplicación. Si la implementación se realiza correctamente, las instancias antiguas y las instancias recién escaladas horizontalmente hospedarán revisiones de la aplicación diferentes. Para actualizar las instancias con la revisión anterior, inicia CodeDeploy automáticamente una implementación posterior (inmediatamente después de la primera) para actualizar las instancias desactualizadas. Si desea cambiar este comportamiento predeterminado para que las instancias de EC2 desactualizadas permanezcan en la revisión anterior, consulte Automatic updates to outdated instances.

Si desea suspender los procesos de escalado horizontal de Auto Scaling de Amazon EC2 mientras se llevan a cabo las implementaciones, puede hacerlo mediante una configuración en el common_functions.sh script que se utiliza para equilibrar la carga con. CodeDeploy Si HANDLE_PROCS=true, los siguientes eventos de escalado automático se suspenden automáticamente durante el proceso de implementación:

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

importante

Solo el. CodeDeployDefault OneAtLa configuración de despliegue de aTime admite esta funcionalidad.

Para obtener más información sobre cómo HANDLE_PROCS=true usar Amazon EC2 Auto Scaling para evitar problemas de implementación, consulte el Aviso importante sobre la gestión de AutoScaling procesos en aws-codedeploy-sampleson. GitHub

Eventos de reducción horizontal durante una implementación

Si un grupo de Auto Scaling comienza a ampliarse mientras se está realizando una CodeDeploy implementación en ese grupo de Auto Scaling, podría producirse una condición de carrera entre el proceso de finalización (incluidos los eventos del ciclo de vida del despliegue de CodeDeploy terminación) y otros eventos CodeDeploy del ciclo de vida en la instancia de terminación. La implementación en esa instancia específica puede fallar si la instancia se termina antes de que se completen todos los eventos CodeDeploy del ciclo de vida. Además, la CodeDeploy implementación general puede fallar o no, en función de cómo haya establecido el valor mínimo de hosts en buen estado en la configuración de la implementación.

Orden de los eventos en los scripts AWS CloudFormation cfn-init

Si utiliza cfn-init (o cloud-init) para ejecutar scripts en instancias basadas en Linux recién aprovisionadas, las implementaciones podrían fallar a menos que controle estrictamente el orden de los eventos que se producen después que se inicia la instancia.

Ese orden debe ser:

  1. Se inicia la instancia recién aprovisionada.

  2. Se ejecutan todos los scripts de proceso de arranque cfn-init hasta su finalización.

  3. El CodeDeploy agente comienza.

  4. Se implementa la última revisión de la aplicación en la instancia.

Si el orden de los eventos no se controla cuidadosamente, el CodeDeploy agente podría iniciar una implementación antes de que todos los scripts hayan terminado de ejecutarse.

Para controlar el orden de los eventos, utilice una de estas prácticas recomendadas:

  • Instale el CodeDeploy agente mediante un cfn-init script y colóquelo después de todos los demás scripts.

  • Incluya el CodeDeploy agente en una AMI personalizada y utilice un cfn-init script para iniciarlo, colocándolo después de todos los demás scripts.

Para obtener información acerca de cómo usar cfn-init, consulte cfn-init en la Guía del usuario de AWS CloudFormation .

Uso de una AMI personalizada con CodeDeploy Amazon EC2 Auto Scaling

Dispone de dos opciones para especificar la AMI base que se debe usar cuando se lancen nuevas instancias de Amazon EC2 en un grupo de Amazon EC2 Auto Scaling:

  • Puede especificar una AMI base personalizada que ya tenga el CodeDeploy agente instalado. Dado que el agente ya está instalado, esta opción lanza las nuevas instancias de Amazon EC2 con mayor rapidez que la otra opción. Sin embargo, esta opción ofrece una mayor probabilidad de que las implementaciones iniciales de las instancias de Amazon EC2 fallen, especialmente si CodeDeploy el agente está desactualizado. Si elige esta opción, le recomendamos que actualice periódicamente el CodeDeploy agente en su AMI personalizada base.

  • Puede especificar una AMI base que no tenga el CodeDeploy agente instalado y tenerlo instalado cada vez que se lance una nueva instancia en un grupo de Auto Scaling de Amazon EC2. Aunque esta opción lanza las nuevas instancias de Amazon EC2 más lentamente que la otra opción, tiene mayor probabilidad de que las implementaciones iniciales de las instancias sean correctas. Esta opción usa la versión más reciente del CodeDeploy agente.