Migración de pilas de AWS CloudFormation a plantillas de lanzamiento - Amazon EC2 Auto Scaling

Migración de pilas de AWS CloudFormation a plantillas de lanzamiento

Puede migrar sus plantillas de pilas de CloudFormation existentes de las configuraciones de lanzamiento a las plantillas de lanzamiento. Para ello, agregue una plantilla de lanzamiento directamente a una plantilla de pila existente y, a continuación, asocie la plantilla de lanzamiento al grupo de escalado automático de la plantilla de pila. A continuación, utilice la plantilla modificada para actualizar su pila.

Al migrar a plantillas de lanzamiento, este tema le permite ahorrar tiempo, ya que proporciona instrucciones para reescribir las configuraciones de lanzamiento de las plantillas de pila de CloudFormation como plantillas de lanzamiento. Para obtener más información sobre la migración de configuraciones de lanzamiento a plantillas de lanzamiento, consulte Migración de sus grupos de escalado automático a plantillas de lanzamiento.

Búsqueda de grupos de escalado automático que utilizan una configuración de lanzamiento

Búsqueda de grupos de escalado automático que utilizan una configuración de lanzamiento
  • Utilice el comando describe-auto-scaling-groups para enumerar los nombres de los grupos de escalado automático que utilizan configuraciones de lanzamiento en la región especificada. Incluya la opción --filters de limitar los resultados a los grupos asociados a una pila de CloudFormation (filtrándolos por la clave de etiqueta aws:cloudformation:stack-name).

    aws autoscaling describe-auto-scaling-groups --region REGION \ --filters Name=tag-key,Values=aws:cloudformation:stack-name \ --query 'AutoScalingGroups[?LaunchConfigurationName!=`null`].AutoScalingGroupName'

    A continuación se muestra un resultado de ejemplo.

    [ "{stack-name}-group-1", "{stack-name}-group-2", "{stack-name}-group-3" ]

    Puede encontrar comandos AWS CLI útiles adicionales para buscar grupos de escalado automático para migrarlos y filtrar la salida en Migración de sus grupos de escalado automático a plantillas de lanzamiento.

importante

Si los recursos de su pila tienen AWSEB en su nombre, significa que se crearon a través de AWS Elastic Beanstalk. En este caso, debe actualizar el entorno de Beanstalk para indicar a Elastic Beanstalk que elimine la configuración de lanzamiento y la sustituya por una plantilla de lanzamiento.

Actualización de una pila para utilizar una plantilla de lanzamiento

Siga los pasos de esta sección para hacer lo siguiente:

  • Reescriba la configuración de lanzamiento como una plantilla de lanzamiento utilizando las propiedades de la plantilla de lanzamiento equivalentes.

  • Asocie la nueva plantilla de lanzamiento con el grupo de escalado automático.

  • Implemente estas actualizaciones.

Modificación de la plantilla de pila y actualizar la pila
  1. Siga los mismos procedimientos generales para modificar la plantilla de pila descritos en Modificación de una plantilla de pila de la Guía del usuario de AWS CloudFormation.

  2. Reescriba la configuración de lanzamiento como una plantilla de lanzamiento. Vea el siguiente ejemplo:

    Ejemplo: una configuración de lanzamiento sencilla

    --- Resources: myLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroups: - !Ref EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    Ejemplo: la plantilla de lanzamiento equivalente

    --- Resources: myLaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateName: !Sub ${AWS::StackName}-launch-template LaunchTemplateData: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroupIds: - Ref! EC2SecurityGroup KeyName: MyKeyPair BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeSize: 150 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash -x yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource myASG --region ${AWS::Region}

    Para obtener información de referencia sobre todas las propiedades compatibles con Amazon EC2, consulte AWS::EC2::LaunchTemplate en la Guía del usuario de AWS CloudFormation.

    Observe cómo la plantilla de lanzamiento incluye la propiedad LaunchTemplateName con un valor de !Sub ${AWS::StackName}-launch-template. Esto es obligatorio si desea que el nombre de la plantilla de lanzamiento incluya el nombre de la pila.

  3. Si la propiedad IamInstanceProfile está presente en su configuración de lanzamiento, tendrá que convertirla en una estructura y especificar el nombre o el ARN del perfil de instancia. Para ver un ejemplo, consulte AWS::EC2::LaunchTemplate.

  4. Si las propiedades AssociatePublicIpAddress, InstanceMonitoring o PlacementTenancy están presentes en la configuración de lanzamiento, debe convertirlas en una estructura. Para obtener ejemplos, consulte AWS::EC2::LaunchTemplate.

    Se produce una excepción cuando el valor de la propiedad MapPublicIpOnLaunch en las subredes que utilizó para su grupo de escalado automático coincide con el valor de la propiedad AssociatePublicIpAddress en su configuración de lanzamiento. En este caso, puede ignorar la propiedad AssociatePublicIpAddress. La propiedad AssociatePublicIpAddress solo se usa para anular la propiedad MapPublicIpOnLaunch y cambiar si las instancias reciben una dirección IPv4 pública en el momento del lanzamiento.

  5. Puede copiar los grupos de seguridad de la propiedad SecurityGroups en uno de los dos lugares de la plantilla de lanzamiento. Normalmente, los grupos de seguridad se copian en la propiedad SecurityGroupIds. Sin embargo, si crea una estructura de NetworkInterfaces en la plantilla de lanzamiento para especificar la propiedad AssociatePublicIpAddress, deberá copiar los grupos de seguridad en la propiedad Groups de la interfaz de red.

  6. Si hay alguna estructura de BlockDeviceMapping en la configuración de lanzamiento con el valor NoDevice establecido en true, debe especificar una cadena vacía para NoDevice en su plantilla de lanzamiento para que Amazon EC2 omita el dispositivo.

  7. Si la propiedad SpotPrice está presente en su configuración de lanzamiento, le recomendamos que la omita de la plantilla de lanzamiento. Las instancias de spot se lanzarán al precio de spot actual. Este precio nunca superará el precio bajo demanda.

    Para solicitar instancias de spot, tiene dos opciones que se excluyen mutuamente:

    • La primera consiste en utilizar la estructura de InstanceMarketOptions en la plantilla de lanzamiento (no se recomienda). Para obtener más información, consulte AWS::EC2::LaunchTemplate InstanceMarketOptions en la Guía del usuario de AWS CloudFormation.

    • La otra es agregar una estructura de MixedInstancesPolicy al grupo de escalado automático. De este modo, dispondrá de más opciones para realizar la solicitud. Una solicitud de instancia de spot en su plantilla de lanzamiento no admite más de una selección de tipo de instancia por grupo de escalado automático. Sin embargo, una política de instancias mixtas admite la selección de más de un tipo de instancia por grupo de escalado automático. Las solicitudes de instancias de spot se benefician de tener más de un tipo de instancia entre los que elegir. Para obtener más información, consulte AWS::AutoScaling::AutoScalingGroup MixedInstancesPolicy en la Guía del usuario de AWS CloudFormation.

  8. Elimine la propiedad LaunchConfigurationName del recurso AWS::AutoScaling::AutoScalingGroup. Agregue la plantilla de lanzamiento en su lugar.

    En los ejemplos siguientes, la función intrínseca Ref obtiene el ID del recurso AWS::EC2::LaunchTemplate con el ID lógico myLaunchTemplate. La función GetAtt obtiene el número de versión más reciente de la plantilla de lanzamiento (por ejemplo, 1) para la propiedad Version.

    Ejemplo: sin una política de instancias mixtas

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    Ejemplo: con una política de instancias mixtas

    --- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber ...

    Para obtener información de referencia sobre todas las propiedades compatibles con Amazon EC2 Auto Scaling, consulte AWS::AutoScaling::AutoScalingGroup en la Guía del usuario de AWS CloudFormation.

  9. Cuando esté listo para implementar estas actualizaciones, siga los procedimientos de CloudFormation para actualizar la pila con la plantilla de pila modificada. Para obtener más información, consulte Modificación de una plantilla de pila en la AWS CloudFormationGuía del usuario de .

Comprensión del comportamiento de actualización de los recursos de la pila

CloudFormation actualiza los recursos de pila comparando los cambios entre la plantilla actualizada que proporciona y las configuraciones de recursos que describió en la versión anterior de la plantilla de pila. Las configuraciones de recursos que no han cambiado no se ven afectadas durante el proceso de actualización.

CloudFormation admite el atributo UpdatePolicy para grupos de escalado automático. Durante una actualización, si UpdatePolicy está configurado como AutoScalingRollingUpdate, CloudFormation reemplaza las instancias de InService después de realizar los pasos de este procedimiento. Si UpdatePolicy se configura en AutoScalingReplacingUpdate, CloudFormation reemplaza el grupo de escalado automático y su conjunto de calentamiento (si existe).

Si no especificó un atributo UpdatePolicy para el grupo de escalado automático, se comprueba que la plantilla de lanzamiento es correcta, pero CloudFormation no implementa ningún cambio en las instancias del grupo de escalado automático. Todas las instancias nuevas usarán su plantilla de lanzamiento, pero las instancias existentes continuarán ejecutándose con la configuración de lanzamiento con la que se lanzaron la primera vez (a pesar de que no exista configuración de lanzamiento). La excepción se produce cuando cambia las opciones de compra, por ejemplo, agregando una política de instancias mixtas. En este caso, su grupo de escalado automático reemplaza gradualmente las instancias existentes por instancias nuevas para que coincidan con las nuevas opciones de compra.

Si tiene que deshacer un cambio para pasar de las configuraciones de lanzamiento a las plantillas de lanzamiento, asegúrese de probar la operación de reversión.

Seguimiento de la migración

Seguimiento de la migración
  1. En la consola de CloudFormation, seleccione la pila que ha actualizado y, a continuación, elija la pestaña Events (Eventos) para ver los eventos de pila.

  2. Para actualizar la lista de eventos con los últimos eventos, elija el botón de actualización que aparece en la consola de CloudFormation.

  3. Mientras se actualiza su pila, observará varios eventos por cada actualización de recursos. Si ve una excepción en la columna Motivo del estado que indica que hay un problema al intentar crear la plantilla de lanzamiento, consulte Solución de problemas de Amazon EC2 Auto Scaling: plantillas de lanzamiento para ver las posibles causas.

  4. (Opcional) Según el uso que haga del atributo UpdatePolicy, puede supervisar el progreso del grupo de escalado automático desde la página de grupos de escalado automático de la consola de Amazon EC2. Seleccione el grupo de Auto Scaling. En la pestaña Activity (Actividad), en Activity history (Historial de actividad), la columna Status (Estado) muestra si su grupo de escalado automático ha lanzado las instancias o las ha terminado correctamente, o bien si la actividad de escalado sigue en curso.

  5. Cuando se completa la actualización de la pila, CloudFormation emite un evento de pila UPDATE_COMPLETE. Para obtener más información, consulte Monitorización del progreso de una actualización de pila en la Guía de usuario de AWS CloudFormation.

  6. Una vez finalizada la actualización de la pila, abra la Página de plantillas de lanzamiento y la Página de configuraciones de lanzamiento de la consola de Amazon EC2. Observará que se ha creado una nueva plantilla de lanzamiento y que se ha eliminado la configuración de lanzamiento.

Referencia de mapeo de configuración de lanzamiento

Como referencia, en la siguiente tabla se enumeran todas las propiedades de nivel superior del recurso AWS::AutoScaling::LaunchConfiguration con su correspondiente propiedad en el recurso AWS::EC2::LaunchTemplate.

Propiedad fuente de configuración de lanzamiento Propiedad de objetivo de la plantilla de lanzamiento
AssociatePublicIpAddress NetworkInterfaces.AssociatePublicIpAddress
BlockDeviceMappings BlockDeviceMappings
ClassicLinkVPCId No disponible¹
ClassicLinkVPCSecurityGroups No disponible¹
EbsOptimized EbsOptimized
IamInstanceProfile IamInstanceProfile.Arn o IamInstanceProfile.Name, pero no ambos
ImageId ImageId
InstanceId InstanceId
InstanceMonitoring Monitoring.Enabled
InstanceType InstanceType
KernelId KernelId
KeyName KeyName
LaunchConfigurationName LaunchTemplateName
MetadataOptions MetadataOptions
PlacementTenancy Placement.Tenancy
RamDiskId RamDiskId
SecurityGroups SecurityGroupIds o NetworkInterfaces.Groups, pero no ambos
SpotPrice InstanceMarketOptions.SpotOptions.MaxPrice
UserData UserData

¹ Las propiedades ClassicLinkVPCId y ClassicLinkVPCSecurityGroups no están disponibles para su uso en una plantilla de lanzamiento porque EC2-Classic ya no está disponible.