Solución de problemas de 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.

Solución de problemas de Amazon EC2 Auto Scaling

Solución de problemas generales EC2 de Amazon Auto Scaling

Las implementaciones en EC2 instancias de un grupo de Amazon EC2 Auto Scaling pueden fallar por las siguientes razones:

  • Amazon EC2 Auto Scaling lanza y termina EC2 instancias de forma continua. Si CodeDeploy no puede implementar automáticamente la revisión de la aplicación, Amazon EC2 Auto Scaling lanza y termina las EC2 instancias de forma continua.

    Desasocie el grupo Amazon EC2 Auto Scaling del grupo de CodeDeploy implementación o cambie la configuración de su grupo de Amazon EC2 Auto Scaling para que el número deseado de instancias coincida con el número actual de instancias (evitando así que Amazon EC2 Auto Scaling lance más EC2 instancias). Para obtener más información, consulte Cambie la configuración del grupo de implementación con CodeDeploy Escalado manual para Amazon EC2 Auto Scaling.

  • El CodeDeploy agente no responde. Es posible que el CodeDeploy agente no esté instalado si los scripts de inicialización (por ejemplo, los scripts de inicio en la nube) que se ejecutan inmediatamente después de lanzar o iniciar una EC2 instancia tardan más de una hora en ejecutarse. CodeDeploy tiene un tiempo de espera de una hora para que el CodeDeploy agente responda a las implementaciones pendientes. Para solucionar este problema, mueva los scripts de inicialización a la revisión de la aplicación. CodeDeploy

  • Una EC2 instancia de un grupo de Amazon EC2 Auto Scaling se reinicia durante una implementación. La implementación puede fallar si se reinicia una EC2 instancia durante una implementación o si el CodeDeploy agente se cierra mientras se procesa un comando de implementación. Para obtener más información, consulte La finalización o el reinicio de una instancia de Amazon EC2 Auto Scaling puede provocar errores en las implementaciones.

  • Se implementan varias revisiones de aplicaciones simultáneamente en la misma EC2 instancia de un grupo de Amazon EC2 Auto Scaling. La implementación simultánea de varias revisiones de aplicaciones en la misma EC2 instancia en un grupo de Amazon EC2 Auto Scaling puede fallar si una de las implementaciones tiene scripts que se ejecutan durante más de unos minutos. No despliegue varias revisiones de aplicaciones en las mismas EC2 instancias de un grupo de Amazon EC2 Auto Scaling.

  • Se produce un error en el despliegue de EC2 las instancias nuevas que se lanzan como parte de un grupo de Amazon EC2 Auto Scaling. En este escenario, la ejecución de los scripts en una implementación puede impedir el lanzamiento de EC2 instancias en el grupo Amazon EC2 Auto Scaling. (Es posible que otras EC2 instancias del grupo Amazon EC2 Auto Scaling parezcan ejecutarse con normalidad). Para solucionar este problema, asegúrese de que todos los demás scripts se completan primero:

    • CodeDeploy el agente no está incluido en el suyo AMI: si utiliza el cfn-init comando para instalar el CodeDeploy agente al lanzar una nueva instancia, coloque el script de instalación del agente al final de la cfn-init sección de la AWS CloudFormation plantilla.

    • CodeDeploy el agente está incluido en la suya AMI: configure el AMI para que el agente esté en un Stopped estado cuando se cree la instancia y, a continuación, incluya un script para iniciar el agente como último paso en su biblioteca de cfn-init scripts.

«CodeDeployRole no le da permiso para realizar operaciones en el siguiente AWS servicio: AmazonAutoScaling» error

Las implementaciones que utilizan un grupo de escalado automático creado con una plantilla de lanzamiento requieren los siguientes permisos. Estos permisos se suman a los concedidos por la política AWSCodeDeployRole AWS gestionada.

  • EC2:RunInstances

  • EC2:CreateTags

  • iam:PassRole

Si no tiene los permisos indicados, puede recibir este error. Para obtener más informaciónTutorial: Se usa CodeDeploy para implementar una aplicación en un grupo de Auto Scaling, consulte Creación de una plantilla de lanzamiento para un grupo de Auto Scaling y Permisos en la Guía del usuario de Amazon EC2 Auto Scaling.

Las instancias de un grupo de Amazon EC2 Auto Scaling se aprovisionan y finalizan de forma continua antes de poder implementar una revisión

En algunos casos, un error puede impedir una implementación correcta en instancias recién aprovisionadas en un grupo de Amazon EC2 Auto Scaling. Los resultados son instancias en mal estado e implementaciones infructuosas. Como la implementación no se puede ejecutar o no se completa correctamente, las instancias se terminan en cuanto se crean. La configuración del grupo Amazon EC2 Auto Scaling provoca entonces que se aprovisione otro lote de instancias para intentar cumplir con el requisito mínimo de hosts en buen estado. Este lote se termina también y así una y otra vez.

Entre las causas posibles se incluyen las siguientes:

  • Fallo en las comprobaciones de estado del grupo Amazon EC2 Auto Scaling.

  • Un error en la revisión de la aplicación.

Para solucionar este problema, siga estos pasos:

  1. Cree manualmente una EC2 instancia que no forme parte del grupo Amazon EC2 Auto Scaling. Etiquete la instancia con una etiqueta de EC2 instancia única.

  2. Añada la nueva instancia al grupo de implementaciones afectado.

  3. Implemente una nueva revisión de la aplicación sin errores en el grupo de implementaciones.

Esto hace que el grupo Amazon EC2 Auto Scaling implemente la revisión de la aplicación en futuras instancias del grupo Amazon EC2 Auto Scaling.

nota

Una vez que confirme que las implementaciones se han realizado correctamente, elimine la instancia que creó para evitar que se le siga cobrando a su AWS cuenta.

La finalización o el reinicio de una instancia de Amazon EC2 Auto Scaling puede provocar errores en las implementaciones

Si se lanza una EC2 instancia a través de Amazon EC2 Auto Scaling y, a continuación, la instancia se termina o se reinicia, las implementaciones en esa instancia podrían fallar por los siguientes motivos:

  • Durante una implementación en curso, un evento de escalado interno o cualquier otro evento de terminación provoca que la instancia se separe del grupo Amazon EC2 Auto Scaling y, a continuación, finalice. Como la implementación no se puede completar, produce un error.

  • La instancia se reinicia, pero tarda más de cinco minutos en iniciarse. CodeDeploy trata esto como un tiempo de espera. El servicio no puede realizar implementaciones actuales y futuras en la instancia.

Para solucionar este problema:

  • En general, asegúrese de que todas las implementaciones se completen antes de que la instancia termine o se reinicie. Asegúrese de que todas las implementaciones comienzan una vez iniciada o reiniciada la instancia.

  • Las implementaciones pueden fallar si se especifica una Amazon Machine Image (AMI) basada en Windows Server para una configuración de Amazon EC2 Auto Scaling y se utiliza el EC2Config servicio para establecer el nombre de ordenador de la instancia. Para solucionar este problema, en la base de Windows ServerAMI, en la pestaña General de Propiedades del EC2 servicio, desactive Establecer nombre de equipo. Tras desactivar esta casilla, este comportamiento se deshabilita para todas las instancias nuevas de Amazon EC2 Auto Scaling de Windows Server lanzadas con esa base de Windows ServerAMI. Para las instancias de Amazon EC2 Auto Scaling de Windows Server en las que este comportamiento esté habilitado, no es necesario que desactive esta casilla de verificación. Simplemente vuelva a aplicar las implementaciones que han producido un error en esas instancias una vez reiniciadas.

Evite asociar varios grupos de despliegues a un solo grupo de Amazon EC2 Auto Scaling

Como práctica recomendada, debe asociar solo un grupo de despliegues a cada grupo de Amazon EC2 Auto Scaling.

Esto se debe a que si Amazon EC2 Auto Scaling amplía una instancia que tiene ganchos asociados a varios grupos de despliegues, envía notificaciones para todos los ganchos a la vez. Esto provoca que comiencen a aplicarse las distintas implementaciones en cada instancia al mismo tiempo. Cuando varias implementaciones envían comandos al CodeDeploy agente al mismo tiempo, es posible que se agote el tiempo de espera de cinco minutos entre un evento del ciclo de vida y el inicio del despliegue o el final del evento del ciclo de vida anterior. Si esto ocurre, la implementación no se realiza correctamente, incluso aunque el proceso de implementación se haya ejecutado según lo previsto.

nota

El tiempo de espera predeterminado de un script en un evento de ciclo de vida es de 30 minutos. Puede cambiar el tiempo de espera a un valor diferente en el archivo. AppSpec Para obtener más información, consulte Agregue un AppSpec archivo para una implementación local de EC2/.

No es posible controlar el orden en el que se producen las implementaciones si se realizan varios intentos de implementación al mismo tiempo.

Por último, si se produce un error en la implementación en alguna instancia, Amazon EC2 Auto Scaling finaliza inmediatamente la instancia. Cuando se cierra la primera instancia, el resto de las implementaciones en ejecución empiezan a producir un error. Dado que el CodeDeploy agente CodeDeploy tiene un tiempo de espera de una hora para responder a las implementaciones pendientes, cada instancia puede tardar hasta 60 minutos en agotarse.

Para obtener más información sobre Amazon EC2 Auto Scaling, consulte Under the Hood: CodeDeploy and Auto Scaling integration.

EC2las instancias de un grupo de Amazon EC2 Auto Scaling no se lanzan y reciben el error «Heartbeat Timeout»

Es posible que un grupo de Amazon EC2 Auto Scaling no pueda lanzar nuevas EC2 instancias y generar un mensaje similar al siguiente:

Launching a new EC2 instance <instance-Id>. Status Reason: Instance failed to complete user's Lifecycle Action: Lifecycle Action with token<token-Id> was abandoned: Heartbeat Timeout.

Este mensaje suele indicar una de las siguientes posibilidades:

  • Se alcanzó el número máximo de despliegues simultáneos asociados a una AWS cuenta. Para obtener más información acerca de los límites de implementación, consulte CodeDeploy cuotas.

  • El grupo Auto Scaling intentó lanzar demasiadas EC2 instancias con demasiada rapidez. Se limitaron las API llamadas a RecordLifecycleActionHeartbeato CompleteLifecycleActionpara cada nueva instancia.

  • Se eliminó una aplicación antes de CodeDeploy que se actualizaran o eliminaran sus grupos de implementación asociados.

    Al eliminar una aplicación o un grupo de despliegues, CodeDeploy intenta limpiar todos los ganchos de Amazon EC2 Auto Scaling asociados a él, pero es posible que queden algunos ganchos. Si ejecuta un comando para eliminar un grupo de implementaciones, los enlaces restantes se devuelven en la salida. Sin embargo, si ejecuta un comando para eliminar una aplicación, los enlaces restantes no aparecen en la salida.

    Por lo tanto, es recomendable que elimine todos los grupos de implementaciones asociados a una aplicación antes de eliminar la aplicación. Puede utilizar el resultado del comando para identificar los enlaces de ciclo de vida que deben eliminarse manualmente.

Si aparece un mensaje de error "Heartbeat Timeout", puede determinar si los enlaces de ciclo de vida restantes son la causa del problema y resolverlo mediante el siguiente procedimiento:

  1. Realice una de las siguientes acciones siguientes:

    • Ejecute el delete-deployment-groupcomando para eliminar el grupo de despliegue asociado al grupo de Auto Scaling que está provocando el tiempo de espera de latidos.

    • Llame al update-deployment-groupcomando con una lista vacía no nula de nombres de grupos de Auto Scaling para separar todos los ganchos del ciclo de vida de CodeDeploy Auto Scaling administrados.

      Por ejemplo, introduzca el siguiente comando: AWS CLI

      aws deploy update-deployment-group --application-name my-example-app --current-deployment-group-name my-deployment-group --auto-scaling-groups

      Como otro ejemplo, si está utilizando el CodeDeploy API con Java, llame UpdateDeploymentGroup y autoScalingGroups configúrelo ennew ArrayList<String>(). Esto se establece autoScalingGroups en una lista vacía y elimina la lista existente. No utilice null, que es la opción predeterminada, porque deja autoScalingGroups como está, lo cual no es lo que desea.

    Examine el resultado de la llamada. Si el resultado contiene una hooksNotCleanedUp estructura con una lista de ganchos de ciclo de vida de Amazon EC2 Auto Scaling, quedan ganchos de ciclo de vida sobrantes.

  2. Llame al describe-lifecycle-hookscomando y especifique el nombre del grupo Amazon EC2 Auto Scaling asociado a las EC2 instancias que no se pudieron lanzar. Busque alguna de las siguientes opciones en los resultados:

    • Nombres de enlace del ciclo de vida de Amazon EC2 Auto Scaling que corresponden a la hooksNotCleanedUp estructura que identificó en el paso 1.

    • Nombres de enlaces del ciclo de vida de Amazon EC2 Auto Scaling que contienen el nombre del grupo de implementación asociado al grupo de Auto Scaling que está fallando.

    • Nombres de enlaces del ciclo de vida de Amazon EC2 Auto Scaling que pueden haber provocado el tiempo de espera de la CodeDeploy implementación.

  3. Si un enlace pertenece a una de las categorías enumeradas en el paso 2, ejecute el delete-lifecycle-hookcomando para eliminarlo. Especifique el grupo Amazon EC2 Auto Scaling y el enlace del ciclo de vida en la llamada.

    importante

    Elimine únicamente los enlaces que estén causando problemas, tal y como se describe en el paso 2. Si eliminas los enlaces viables, es posible que las implementaciones fallen o CodeDeploy que no puedan implementar las revisiones de la aplicación en instancias escaladasEC2.

  4. Llame al create-deployment-groupcomando update-deployment-groupo con los nombres de grupo de Auto Scaling que desee. CodeDeployvuelve a instalar los ganchos de Auto Scaling con los nuevos. UUIDs

nota

Si desvincula un grupo de Auto Scaling de un grupo de CodeDeploy implementación, cualquier implementación en curso en el grupo de Auto Scaling podría fallar y las nuevas EC2 instancias escaladas por el grupo de Auto Scaling no recibirán las revisiones de su aplicación. CodeDeploy Para que Auto Scaling vuelva a funcionar CodeDeploy, tendrá que volver a conectar el grupo de Auto Scaling al grupo de despliegue y llamar a uno nuevo CreateDeployment para iniciar un despliegue en toda la flota.

Los enlaces del ciclo de vida de Amazon EC2 Auto Scaling que no coincidan pueden provocar que las implementaciones automáticas en los grupos de Amazon EC2 Auto Scaling se detengan o fallen

Amazon EC2 Auto Scaling y CodeDeploy utilizan enlaces de ciclo de vida para determinar qué revisiones de aplicaciones deben implementarse en qué EC2 instancias una vez lanzadas en los grupos de Amazon EC2 Auto Scaling. Las implementaciones automáticas pueden detenerse o fallar si los enlaces del ciclo de vida y la información sobre estos enlaces no coinciden exactamente en Amazon EC2 Auto Scaling y CodeDeploy.

Si las implementaciones en un grupo de Amazon EC2 Auto Scaling están fallando, compruebe si los nombres de los enlaces del ciclo de vida en Amazon EC2 Auto Scaling CodeDeploy coinciden. Si no es así, utilice estas llamadas de AWS CLI comando.

En primer lugar, obtenga la lista de nombres de enlaces del ciclo de vida para el grupo Amazon EC2 Auto Scaling y el grupo de implementación:

  1. Llame al describe-lifecycle-hookscomando y especifique el nombre del grupo Amazon EC2 Auto Scaling asociado al grupo de despliegue en CodeDeploy. En el resultado, en la lista LifecycleHooks, anote todos los valores de LifecycleHookName.

  2. Llame al get-deployment-groupcomando y especifique el nombre del grupo de implementación asociado al grupo Amazon EC2 Auto Scaling. En el resultado, en la autoScalingGroups lista, busque cada elemento cuyo valor de nombre coincida con el nombre del grupo de Amazon EC2 Auto Scaling y, a continuación, anote el hook valor correspondiente.

Después, compare los dos conjuntos de nombres de enlaces de ciclo de vida. Si coinciden exactamente, carácter por carácter, entonces este no es el problema. Es posible que desee probar otros pasos de solución de problemas de Amazon EC2 Auto Scaling descritos en otra parte de esta sección.

Sin embargo, si los dos conjuntos de nombres de enlaces de ciclo de vida no coinciden exactamente, carácter por carácter, pruebe lo siguiente:

  1. Si hay nombres de enlaces de ciclo de vida en el resultado del comando describe-lifecycle-hooks que no están en el resultado del comando get-deployment-group, proceda del modo siguiente:

    1. Para cada nombre de enlace del ciclo de vida que aparezca en el resultado del describe-lifecycle-hooks comando, llame al delete-lifecycle-hookcomando.

    2. Llame al update-deployment-groupcomando y especifique el nombre del grupo original de Amazon EC2 Auto Scaling. CodeDeploy crea enlaces de ciclo de vida nuevos y de reemplazo en el grupo Amazon EC2 Auto Scaling y asocia los enlaces de ciclo de vida al grupo de implementación. Las implementaciones automáticas deberían reanudarse ahora a medida que se agreguen nuevas instancias al grupo Amazon EC2 Auto Scaling.

  2. Si hay nombres de enlaces de ciclo de vida en el resultado del comando get-deployment-group que no están en el resultado del comando describe-lifecycle-hooks, proceda del modo siguiente:

    1. Llame al update-deployment-groupcomando, pero no especifique el nombre del grupo Amazon EC2 Auto Scaling original.

    2. Vuelva a update-deployment-group ejecutar el comando, pero esta vez especifique el nombre del grupo Amazon EC2 Auto Scaling original. CodeDeploy vuelve a crear los enlaces del ciclo de vida que faltan en el grupo Amazon EC2 Auto Scaling. Las implementaciones automáticas deberían reanudarse ahora a medida que se agreguen nuevas instancias al grupo Amazon EC2 Auto Scaling.

Una vez que consigas que los dos conjuntos de nombres de los enlaces del ciclo de vida coincidan exactamente, carácter por carácter, las revisiones de las aplicaciones deberían volver a implementarse, pero solo en las instancias nuevas a medida que se agreguen al grupo Amazon EC2 Auto Scaling. Los despliegues no se realizan automáticamente en instancias que ya están en el grupo Amazon EC2 Auto Scaling.

Error “La implementación falló porque no se encontró ninguna instancia para su grupo de implementación”

Lea esta sección si ve el siguiente CodeDeploy error:

The deployment failed because no instances were found for your deployment group. Check your deployment group settings to make sure the tags for your EC2 instances or Auto Scaling groups correctly identify the instances you want to deploy to, and then try again.

Las causas posibles de este error son:

  1. La configuración del grupo de implementación incluye etiquetas para EC2 instancias, instancias locales o grupos de Auto Scaling que no son correctas. Para solucionar este problema, compruebe que las etiquetas son correctas y, a continuación, vuelva a implementar la aplicación.

  2. Su flota se escaló horizontalmente una vez que se inició la implementación. En este escenario, verá instancias en buen estado en el estado InService en su flota, pero también verá el error anterior. Para solucionar este problema, vuelva a implementar la aplicación.

  3. Su grupo de escalado automático no incluye ninguna instancia que se encuentre en el estado InService. En este escenario, cuando intentas realizar una implementación en toda la flota, la implementación falla y aparece el mensaje de error anterior porque es CodeDeploy necesario que al menos una instancia esté en ese estado. InService Hay muchos motivos por los que es posible que no tenga instancias en el estado InService. Algunas de ellas son las siguientes:

    • Programó (o configuró manualmente) el tamaño del grupo de escalado automático como 0.

    • Auto Scaling detectó EC2 instancias defectuosas (por ejemplo, las EC2 instancias tenían fallas de hardware), por lo que las canceló todas y no dejó ninguna en ese InService estado.

    • Durante un evento de escalado horizontal de 0 a1, CodeDeploy implementó una revisión que anteriormente se había realizado correctamente (denominada «última revisión correcta») y que había dejado de funcionar correctamente desde la última implementación. Esto provocó un error en la implementación en la instancia escalada horizontalmente, lo que, a su vez, provocó que el escalado automático cancelara la instancia y no dejara ninguna instancia en el estado InService.

      Si descubre que no tiene ninguna instancia en el estado InService, solucione el problema tal y como se describe en el siguiente procedimiento, To troubleshoot the error if there are no instances in the InService state.

Para solucionar el error si no hay ninguna instancia en el estado InService
  1. En la EC2 consola de Amazon, verifica la configuración de capacidad deseada. Si es cero, configúrelo en un número positivo. Espere a que la instancia esté en InService, lo que significa que la implementación se realizó correctamente. Ha solucionado el problema y puede omitir los pasos restantes de este procedimiento de solución de problemas. Para obtener información sobre cómo establecer la configuración de capacidad deseada, consulte Establecer los límites de capacidad en su grupo de Auto Scaling en la Guía del usuario de Amazon EC2 Auto Scaling.

  2. Si Auto Scaling sigue intentando lanzar nuevas EC2 instancias para cumplir con la capacidad deseada, pero nunca puede cumplir con el escalado horizontal, normalmente se debe a una falla en el ciclo de vida de Auto Scaling. Solucione este problema de la siguiente manera:

    1. Para comprobar qué evento de enlace del ciclo de vida de Auto Scaling está fallando, consulte Verificación de una actividad de escalado para un grupo de Auto Scaling en la Guía del usuario de Amazon EC2 Auto Scaling.

    2. Si el nombre del enlace que falla esCodeDeploy-managed-automatic-launch-deployment-hook-DEPLOYMENT_GROUP_NAME, vaya a CodeDeploy, busque el grupo de despliegue y busque el despliegue fallido que se inició con Auto Scaling. A continuación, investigue por qué falló la implementación.

    3. Si entiende por qué falló la implementación (por ejemplo, si se producían CloudWatch alarmas) y puede solucionar el problema sin cambiar la revisión, hágalo ahora.

    4. Si, tras una investigación, determina que CodeDeploy la última revisión correcta ya no está en buen estado y que no hay ninguna instancia en buen estado en su grupo de Auto Scaling, se encuentra en un escenario de bloqueo de despliegue. Para resolver este problema, debe corregir la CodeDeploy revisión defectuosa eliminando temporalmente el enlace CodeDeploy de ciclo de vida del grupo Auto Scaling y, a continuación, reinstalando el enlace y volviendo a implementar una revisión nueva (buena). Para obtener instrucciones, consulte:

Para solucionar el problema de bloqueo del despliegue () CLI
  1. (Opcional) Bloquee las canalizaciones de CI/CD que están causando el CodeDeploy error para que no se produzcan despliegues inesperados mientras soluciona este problema.

  2. Toma nota de tu DesiredCapacityconfiguración actual de Auto Scaling:

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASG_NAME

    Puede que tenga que volver a escalar a este número al final de este procedimiento.

  3. Establezca la DesiredCapacityconfiguración de Auto Scaling en1. Esto es opcional si la capacidad deseada era mayor que 1 al comienzo. Al reducirla a 1, la instancia tardará menos tiempo en aprovisionarse e implementarse más adelante, lo que agiliza la resolución de problemas. Si la capacidad deseada del escalado automático estaba configurada originalmente en 0, debe aumentarla a 1. Esto es obligatorio.

    como escalado automático set-desired-capacity - auto-scaling-group-name ASG_NAME --capacidad deseada 1

    nota

    En el resto de los pasos de este procedimiento se presupone que ha configurado su. DesiredCapacity1

    En este punto, el escalado automático intenta escalar a una instancia. Luego, debido a que el gancho CodeDeploy agregado aún está presente, CodeDeploy intenta desplegarla; la implementación falla; Auto Scaling cancela la instancia; y Auto Scaling intenta volver a lanzar una instancia para alcanzar la capacidad deseada de una, lo que nuevamente falla. Se encuentra en un ciclo de cancelación-relanzamiento.

  4. Anule el registro del grupo de escalado automático del grupo de implementación:

    aviso

    El siguiente comando lanzará una nueva EC2 instancia sin software incorporado. Antes de ejecutar el comando, asegúrese de que una instancia InService de escalado automático que no ejecute ningún software sea aceptable. Por ejemplo, asegúrese de que el equilibrador de carga asociado a la instancia no envíe tráfico a este host sin software.

    importante

    Usa el CodeDeploy comando que se muestra a continuación para quitar el gancho. No retire el gancho a través del servicio Auto Scaling, ya que la extracción no será reconocida por CodeDeploy.

    aws deploy update-deployment-group --application-name APPLICATION_NAME --current-deployment-group-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups

    Después de ejecutar este comando, ocurre lo siguiente:

    1. CodeDeploy anula el registro del grupo Auto Scaling del grupo de despliegue.

    2. CodeDeploy elimina el enlace del ciclo de vida de Auto Scaling del grupo Auto Scaling.

    3. Como el gancho que estaba causando un despliegue fallido ya no está presente, Auto Scaling cancela la EC2 instancia existente e inmediatamente lanza una nueva para escalarla a la capacidad deseada. La nueva instancia debería pasar pronto al estado InService. La nueva instancia no incluye software.

  5. Espere a que la EC2 instancia entre en el InService estado. Para verificar el estado, utilice el comando siguiente:

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names ASG_NAME --query AutoScalingGroups[0].Instances[*].LifecycleState

  6. Vuelve a añadir el gancho a la EC2 instancia:

    importante

    Usa el CodeDeploy comando que se muestra a continuación para añadir el gancho. No utilice el servicio Auto Scaling para añadir el gancho, ya que la adición no será reconocida por CodeDeploy.

    aws deploy update-deployment-group --application-name APPLICATION_NAME --current-deployment-group-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups ASG_NAME

    Después de ejecutar este comando, ocurre lo siguiente:

    1. CodeDeploy vuelve a instalar el enlace del ciclo de vida de Auto Scaling en la instancia EC2

    2. CodeDeploy vuelve a registrar el grupo de Auto Scaling con el grupo de despliegue.

  7. Cree una implementación en toda la flota con Amazon S3 o una GitHub revisión que sepa que está en buen estado y desea usar.

    Por ejemplo, si la revisión es un archivo .zip de un bucket de Amazon S3 llamado my-revision-bucket con una clave de objeto de httpd_app.zip, introduzca el siguiente comando:

    aws deploy create-deployment --application-name APPLICATION_NAME --deployment-group-name DEPLOYMENT_GROUP_NAME --revision "revisionType=S3,s3Location={bucket=my-revision-bucket,bundleType=zip,key=httpd_app.zip}"

    Como ahora hay una instancia InService en el grupo de escalado automático, esta implementación debería funcionar y ya no debería aparecer el error La implementación falló porque no se encontró ninguna instancia para su grupo de implementación.

  8. Una vez que la implementación se haya realizado correctamente, escale el grupo de escalado automático de nuevo a la capacidad original, si lo escaló anteriormente:

    aws autoscaling set-desired-capacity --auto-scaling-group-name ASG_NAME --desired-capacity ORIGINAL_CAPACITY

Para solucionar el problema de bloqueo de la implementación (consola)
  1. (Opcional) Bloquee las canalizaciones de CI/CD que están causando el CodeDeploy error para que no se produzcan despliegues inesperados mientras soluciona el problema.

  2. Ve a la EC2 consola de Amazon y toma nota de la configuración de capacidad deseada de Auto Scaling. Puede que tenga que volver a escalar a este número al final de este procedimiento. Para obtener información sobre cómo encontrar esta configuración, consulte Establecer límites de capacidad en su grupo de escalado automático.

  3. Establezca el número deseado de EC2 instancias en1:

    Esto es opcional si la capacidad deseada era mayor que 1 al comienzo. Al reducirla a 1, la instancia tardará menos tiempo en aprovisionarse e implementarse más adelante, lo que agiliza la resolución de problemas. Si la Capacidad deseada del escalado automático estaba configurada originalmente en 0, debe aumentarla a 1. Esto es obligatorio.

    nota

    En el resto de los pasos de este procedimiento se supone que ha establecido Capacidad deseada en 1.

    1. Abre la EC2 consola de Amazon en https://console.aws.amazon.com/ec2/y selecciona Auto Scaling Groups en el panel de navegación.

    2. Elija la región apropiada.

    3. Vaya al grupo de escalado automático problemático.

    4. En Detalles del grupo, seleccione Editar.

    5. Establezca Capacidad deseada en 1.

    6. Elija Actualizar.

  4. Anule el registro del grupo de escalado automático del grupo de implementación:

    aviso

    Los siguientes subpasos lanzarán una nueva EC2 instancia sin software. Antes de ejecutar el comando, asegúrese de que una instancia InService de escalado automático que no ejecute ningún software sea aceptable. Por ejemplo, asegúrese de que el equilibrador de carga asociado a la instancia no envíe tráfico a este host sin software.

    1. Abre la CodeDeploy consola en. https://console.aws.amazon.com/codedeploy/

    2. Elija la región apropiada.

    3. En el panel de navegación, elija Aplicaciones.

    4. Elija el nombre de la CodeDeploy aplicación.

    5. Elija el nombre de su grupo CodeDeploy de implementación.

    6. Elija Editar.

    7. En Configuración del entorno, deseleccione los grupos de Amazon EC2 Auto Scaling.

      nota

      La consola no le permite guardar la configuración si no hay ninguna configuración de entorno definida. Para evitar esta comprobación, añada temporalmente una etiqueta de EC2 o On-premises que sepa que no se resolverá en ningún host. Para añadir una etiqueta, selecciona Amazon EC2 instances o On-premises instance y añade una etiqueta Key of EC2 oOn-premises. Puede dejar el valor de la etiqueta vacío.

    8. Elija Guardar cambios.

      Después de completar estos pasos secundarios, ocurre lo siguiente:

      1. CodeDeploy anula el registro del grupo Auto Scaling del grupo de despliegue.

      2. CodeDeploy elimina el enlace del ciclo de vida de Auto Scaling del grupo Auto Scaling.

      3. Como el gancho que estaba causando un despliegue fallido ya no está presente, Auto Scaling cancela la EC2 instancia existente e inmediatamente lanza una nueva para escalarla a la capacidad deseada. La nueva instancia debería pasar pronto al estado InService. La nueva instancia no incluye software.

  5. Espere a que la EC2 instancia entre en el InService estado. Para verificar su estado:

    1. Abre la EC2 consola de Amazon en https://console.aws.amazon.com/ec2/.

    2. En el panel de navegación, elija Auto Scaling Groups (Grupos de ).

    3. Elija el grupo de escalado automático.

    4. En el panel de contenido, elija la pestaña Administración de instancias.

    5. En Instancias, asegúrate de que la columna Ciclo de vida se indique InServicejunto a la instancia.

  6. Vuelva a registrar el grupo de Auto Scaling con el grupo de CodeDeploy despliegue mediante el mismo método que utilizó para eliminarlo:

    1. Abra la CodeDeploy consola en. https://console.aws.amazon.com/codedeploy/

    2. Elija la región apropiada.

    3. En el panel de navegación, elija Aplicaciones.

    4. Elija el nombre de la CodeDeploy aplicación.

    5. Elija el nombre de su grupo CodeDeploy de implementación.

    6. Elija Editar.

    7. En Configuración del entorno, seleccione los grupos de Amazon EC2 Auto Scaling y seleccione su grupo de Auto Scaling de la lista.

    8. En EC2Instancias de Amazon o Instancias locales, busca la etiqueta que has añadido y elimínala.

    9. Anule la selección de la casilla situada junto a Amazon EC2 instances o On-premises Instances.

    10. Elija Guardar cambios.

    Esta configuración vuelve a instalar el enlace de ciclo de vida en el grupo de escalado automático.

  7. Cree una implementación en toda la flota con Amazon S3 o una GitHub revisión que sepa que está en buen estado y desea usar.

    Por ejemplo, si la revisión es un archivo .zip de un bucket de Amazon S3 llamado my-revision-bucket con una clave de objeto de httpd_app.zip, realice lo siguiente:

    1. En la CodeDeploy consola, en la página del grupo de despliegues, selecciona Crear despliegue.

    2. En Tipo de revisión, elija Mi aplicación está almacenada en Amazon S3.

    3. En Ubicación de la revisión, elija s3://my-revision-bucket/httpd_app.zip.

    4. En Tipo de archivo de revisión, elija .zip.

    5. Elija Crear implementación.

    Como ahora hay una instancia InService en el grupo de escalado automático, esta implementación debería funcionar y ya no debería aparecer el error La implementación falló porque no se encontró ninguna instancia para su grupo de implementación.

  8. Una vez que la implementación se haya realizado correctamente, escale el grupo de escalado automático de nuevo a la capacidad original, si lo escaló anteriormente:

    1. Abre la EC2 consola de Amazon en https://console.aws.amazon.com/ec2/y selecciona Auto Scaling Groups en el panel de navegación.

    2. Elija la región apropiada.

    3. Vaya al grupo de escalado automático.

    4. En Detalles del grupo, seleccione Editar.

    5. Vuelva a establecer Capacidad deseada en su valor original.

    6. Elija Actualizar.