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 de Amazon EC2 Auto Scaling

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

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

    Desasocie el grupo Auto Scaling de Amazon EC2 del grupo de CodeDeploy implementación o cambie la configuración de su grupo de Auto Scaling de Amazon EC2 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 instancias de EC2). Para obtener más información, consulte Cambie la configuración del grupo de implementación con CodeDeploy o Escalado manual para Amazon EC2 Auto Scaling.

  • El agente no responde. CodeDeploy 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 instancia de EC2 tardan más de una hora en ejecutarse. CodeDeploy dispone de 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 instancia de EC2 de un grupo de Amazon EC2 Auto Scaling se reinicia durante una implementación. La implementación puede fallar si se reinicia una instancia de EC2 durante una implementación o si el CodeDeploy agente se apaga mientras se procesa un comando de implementación. Para obtener más información, consulte La terminación o el reinicio de una instancia de Amazon EC2 Auto Scaling puede producir un error en las implementaciones.

  • Varias revisiones de aplicación se implementan simultáneamente en la misma instancia de EC2 en un grupo de Amazon EC2 Auto Scaling. La implementación de varias revisiones de aplicación en la misma instancia de EC2 en un grupo de Amazon EC2 Auto Scaling al mismo tiempo puede producir un error si una de las implementaciones tiene scripts que se ejecutan durante más de unos minutos. No implemente varias revisiones de aplicación en las mismas instancias de EC2 en un grupo de Amazon EC2 Auto Scaling.

  • Una implementación produce un error en nuevas instancias de EC2 que se lanzan como parte de un grupo de Amazon EC2 Auto Scaling. En este caso, la ejecución de scripts en una implementación puede evitar el lanzamiento de instancias de EC2 en el grupo de Amazon EC2 Auto Scaling. (Puede parecer que otras instancias de EC2 del grupo de Amazon EC2 Auto Scaling se ejecutan normalmente). Para solucionar este problema, asegúrese de que todos los demás scripts se completan primero:

    • CodeDeploy el agente no está incluido en la 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 AMI: configure la 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 paso final en la 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ón, consulte Tutorial: Se usa CodeDeploy para implementar una aplicación en un grupo de Auto Scaling, Creación de una plantilla de lanzamiento para un grupo de escalado automático 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 se terminan constantemente antes de que pueda implementarse una revisión

En algunos casos, un error puede impedir que se realice la implementación en instancias recién aprovisionadas de 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 de Amazon EC2 Auto Scaling provoca que se aprovisione otro lote de instancias para intentar satisfacer los requisitos de hosts mínimos en buen estado. Este lote se termina también y así una y otra vez.

Entre las causas posibles se incluyen las siguientes:

  • Comprobaciones de estado de Amazon EC2 Auto Scaling no superadas.

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

Para solucionar este problema, siga estos pasos:

  1. Cree manualmente una instancia de EC2 que no forme parte del grupo de Amazon EC2 Auto Scaling. Etiquete la instancia con una etiqueta de instancia EC2 ú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 de Amazon EC2 Auto Scaling implemente la revisión de la aplicación en instancias futuras en el grupo de Amazon EC2 Auto Scaling.

nota

Tras confirmar que las implementaciones se han realizado correctamente, elimina la instancia que creaste para evitar que se sigan cobrando a tu AWS cuenta.

La terminación o el reinicio de una instancia de Amazon EC2 Auto Scaling puede producir un error en las implementaciones

Si se lanza una instancia de EC2 a través de Amazon EC2 Auto Scaling y la instancia termina o se reinicia, las implementaciones en dicha instancia pueden producir un error por las razones siguientes:

  • Durante una implementación en curso, un evento de escalado o cualquier otro evento de terminación provoca que la instancia se desvincule del grupo de Amazon EC2 Auto Scaling y que termine. 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 producir un error si especifica una imagen de máquina de Amazon (AMI) base de Windows Server para una configuración de Amazon EC2 Auto Scaling y usa el servicio EC2Config para establecer el nombre de equipo de la instancia. Para solucionar este problema, en la AMI base de Windows Server, en la pestaña General de Propiedades del servicio EC2, desactive la opción Definir nombre del equipo. Una vez desactivada esta casilla, este comportamiento se deshabilitará para todas las nuevas instancias de Amazon EC2 Auto Scaling de Windows Server lanzadas con esa AMI base de Windows Server. Para las instancias de Amazon EC2 Auto Scaling de Windows Server en las que este comportamiento está habilitado, no es necesario desactivar esta casilla. Simplemente vuelva a aplicar las implementaciones que han producido un error en esas instancias una vez reiniciadas.

Evite asociar varios grupos de implementación a un único grupo de Amazon EC2 Auto Scaling

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

Esto se debe a que si Amazon EC2 Auto Scaling escala una instancia que tiene enlaces asociados con varios grupos de implementación, envía las notificaciones para todos los enlaces 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 de la implementación en cualquier instancia, Amazon EC2 Auto Scaling termina inmediatamente la instancia. Cuando se cierra la primera instancia, el resto de las implementaciones en ejecución empiezan a producir un error. Como 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 acerca de Auto Scaling de Amazon EC2, consulte Under the Hood: CodeDeploy and Auto Scaling integration.

Las instancias de EC2 de un grupo de Amazon EC2 Auto Scaling no se pueden lanzar y aparece el error "Heartbeat Timeout"

Es posible que un grupo de Amazon EC2 Auto Scaling no pueda lanzar nuevas instancias de EC2 y genere 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 implementaciones simultáneas asociadas a una AWS cuenta. Para obtener más información acerca de los límites de implementación, consulte CodeDeploy cuotas.

  • El grupo de escalado automático intentó lanzar demasiadas instancias de EC2 demasiado rápido. Se limitaron las llamadas a la API 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 Auto Scaling de Amazon EC2 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 utiliza la 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 estructura hooksNotCleanedUp con una lista de enlaces de ciclo de vida de Amazon EC2 Auto Scaling, la causa más probable del error serán los enlaces de ciclo de vida restantes.

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

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

    • Nombres de enlace de ciclo de vida de Amazon EC2 Auto Scaling que contienen el nombre del grupo de implementación asociado al grupo de escalado automático 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 implementación. CodeDeploy

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

    importante

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

  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 nuevos UUID.

nota

Si separa un grupo de Auto Scaling de un grupo de despliegues, cualquier CodeDeploy despliegue en curso en el grupo de Auto Scaling podría fallar y las nuevas instancias de EC2 que estén escaladas de forma horizontal 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 de 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é instancias de EC2 después de lanzarlas en los grupos de Auto Scaling de Amazon EC2. Las implementaciones automáticas pueden detenerse o fallar si los enlaces del ciclo de vida y la información sobre estos enlaces no coincide exactamente en Amazon EC2 Auto Scaling y. CodeDeploy

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

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

  1. Llame al describe-lifecycle-hookscomando y especifique el nombre del grupo Auto Scaling de Amazon EC2 asociado al grupo de implementación 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 Auto Scaling de Amazon EC2. En el resultado, en la lista autoScalingGroups, busque todos los elementos cuyo valor de nombre coincida con el nombre del grupo de Amazon EC2 Auto Scaling y, a continuación, anote el valor de hook 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. Pruebe con otros pasos de solución de problemas de Amazon EC2 Auto Scaling que se describen en 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 Amazon EC2 Auto Scaling original. CodeDeploy crea nuevos enlaces de ciclo de vida de reemplazo en el grupo Auto Scaling de Amazon EC2 y asocia los enlaces del ciclo de vida al grupo de implementación. Las implementaciones automáticas se deben reanudar ahora cuando se añadan nuevas instancias al grupo de 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 Auto Scaling de Amazon EC2. Las implementaciones automáticas se deben reanudar ahora cuando se añadan nuevas instancias al grupo de Amazon EC2 Auto Scaling

Una vez que los dos conjuntos de nombres de enlaces de ciclo de vida coincidan exactamente, carácter por carácter, las revisiones de la aplicación deberían implementarse de nuevo, pero solamente en las nuevas instancias cuando estas se añadan al grupo de Amazon EC2 Auto Scaling. Las implementaciones no se realizan automáticamente en instancias que ya están en el grupo de 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 error: CodeDeploy

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 de su grupo de implementación incluye etiquetas para instancias de EC2, instancias en las instalaciones o grupos de escalado automático 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, al intentar 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.

    • El escalado automático detectó instancias de EC2 defectuosas (por ejemplo, las instancias de EC2 tenían fallos de hardware), por lo que las canceló todas y no dejó ninguna en el estado InService.

    • Durante un evento de escalado 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 estar en mal estado 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 consola de Amazon EC2, compruebe 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 Configuración de los límites de capacidad en su grupo de escalado automático en la Guía del usuario de Amazon EC2 Auto Scaling.

  2. Si el escalado automático sigue intentando lanzar nuevas instancias de EC2 para cumplir con la capacidad deseada, pero no puede cumplir con el escalado horizontal, normalmente se debe a un fallo en el enlace de ciclo de vida del escalado automático. Solucione este problema de la siguiente manera:

    1. Para comprobar qué evento de enlace de ciclo de vida del escalado automático está fallando, consulte Verificación de una actividad de escalado para un grupo de escalado automático 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 de la implementación (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 el 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 --desired-capacity 1

    nota

    En el resto de los pasos de este procedimiento se supone 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 instancia de EC2 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.

    importante

    Utilice el CodeDeploy comando que se muestra a continuación para eliminar 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 enlace que estaba provocando una implementación con error ya no está presente, el escalado automático cancela la instancia de EC2 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 el estado de la instancia sea InService. 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. Vuelva a añadir el enlace a la instancia de EC2:

    importante

    Utilice 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. Vaya a la consola de Amazon EC2 y tome nota de la configuración de Capacidad deseada del escalado automático. 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 instancias de EC2 en 1:

    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. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/ y elija Auto Scaling Groups (Grupos de escalado automático) 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 pasos secundarios lanzarán una nueva instancia de EC2 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. Abra la consola en https://console.aws.amazon.com/codedeploy/ 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, seleccione Instancias de Amazon EC2 o Instancia en las instalaciones y añada una etiqueta Clave de EC2 o On-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 enlace que estaba provocando una implementación con error ya no está presente, el escalado automático cancela la instancia de EC2 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 el estado de la instancia sea InService. Para verificar su estado:

    1. Abra la consola de Amazon EC2 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úrese 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 Grupos de Amazon EC2 Auto Scaling y seleccione su grupo de escalado automático de la lista.

    8. En Instancias de Amazon EC2 o en Instancias en las instalaciones, busque la etiqueta que ha añadido y elimínela.

    9. Anule la selección de la casilla de verificación situada junto a Instancias de Amazon EC2 o Instancias en las instalaciones.

    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. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/ y elija Auto Scaling Groups (Grupos de escalado automático) 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.