Configuración de los recursos de Amazon EC2 Auto Scaling con AWS CloudFormation - AWS CloudFormation

Configuración de los recursos de Amazon EC2 Auto Scaling con AWS CloudFormation

En los ejemplos siguientes se muestran diferentes fragmentos para incluir en las plantillas para su uso con Amazon EC2 Auto Scaling.

Creación de un grupo de escalado automático de instancia única

En este ejemplo se muestra un recurso de AWS::AutoScaling::AutoScalingGroup con una sola instancia para ayudarlo a comenzar. La propiedad VPCZoneIdentifier del grupo de escalado automático especifica una lista de subredes existentes en tres zonas de disponibilidad diferentes. Debe especificar los ID de subredes aplicables de su cuenta antes de crear la pila. La propiedad LaunchTemplate hace referencia a un recurso AWS::EC2::LaunchTemplate con el nombre lógico myLaunchTemplate definido en cualquier otro lugar de la plantilla.

nota

Para obtener más ejemplos de plantillas de lanzamiento, consulte Creación de plantillas de lanzamiento con AWS CloudFormation en la sección de fragmentos de Amazon EC2 y en la sección Ejemplos en el recurso de AWS::EC2::LaunchTemplate.

JSON

"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "myLaunchTemplate" }, "Version" : { "Fn::GetAtt" : [ "myLaunchTemplate", "LatestVersionNumber" ] } }, "MaxSize" : "1", "MinSize" : "1" } }

YAML

myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber MaxSize: '1' MinSize: '1'

Creación de un grupo de escalado automático con un equilibrador de carga adjunto

En este ejemplo se muestra un recurso de AWS::AutoScaling::AutoScalingGroup para el equilibrador de carga en varios servidores. Especifica los nombres lógicos de los recursos de AWS declarados en otra parte de la misma plantilla.

  1. La propiedad VPCZoneIdentifier especifica los nombres lógicos de dos recursos de AWS::EC2::Subnet donde se crearán las instancias del grupo de escalado automático EC2: myPublicSubnet1 y myPublicSubnet2.

  2. La propiedad LaunchTemplate especifica un recurso de AWS::EC2::LaunchTemplate con el nombre lógico myLaunchTemplate.

  3. La propiedad TargetGroupARNs muestra los grupos de destino para Balanceador de carga de aplicaciones o Balanceador de carga de red utilizados para enrutar tráfico al grupo de Auto Scaling. En este ejemplo, se especifica un grupo de destino, que es un recurso de AWS::ElasticLoadBalancingV2::TargetGroup con el nombre lógico myTargetGroup.

JSON

"myServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ { "Ref" : "myPublicSubnet1" }, { "Ref" : "myPublicSubnet2" } ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "myLaunchTemplate" }, "Version" : { "Fn::GetAtt" : [ "myLaunchTemplate", "LatestVersionNumber" ] } }, "MaxSize" : "5", "MinSize" : "1", "TargetGroupARNs" : [ { "Ref" : "myTargetGroup" } ] } }

YAML

myServerGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - !Ref myPublicSubnet1 - !Ref myPublicSubnet2 LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !Ref myTargetGroup

Véase también

Para obtener un ejemplo detallado que crea un grupo de escalado automático con una política de escalado de seguimiento de destino basada en la métrica predefinida de ALBRequestCountPerTarget para el equilibrador de carga de aplicación, consulte la sección Ejemplos en el recurso de AWS::AutoScaling::ScalingPolicy.

Creación de un grupo de escalado automático con notificaciones

En este ejemplo se muestra un recurso de AWS::AutoScaling::AutoScalingGroup que envía notificaciones de Amazon SNS cuando se producen los eventos especificados. La propiedad NotificationConfigurations especifica el tema de SNS donde AWS CloudFormation envía una notificación y los eventos que causarán que AWS CloudFormation envíe notificaciones. Cuando se produzcan los eventos especificados por NotificationTypes, AWS CloudFormation enviará una notificación al tema de SNS especificado por TopicARN. Al lanzar la pila, AWS CloudFormation crea un recurso de AWS::SNS::Subscription (snsTopicForAutoScalingGroup) que se declara dentro de la misma plantilla.

La propiedad VPCZoneIdentifier del grupo de escalado automático especifica una lista de subredes existentes en tres zonas de disponibilidad diferentes. Debe especificar los ID de subredes aplicables de su cuenta antes de crear la pila. La propiedad LaunchTemplate hace referencia al nombre lógico de un recurso AWS::EC2::LaunchTemplate declarado en otra parte de la misma plantilla.

JSON

"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "DependsOn": [ "snsTopicForAutoScalingGroup" ], "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "logicalName" }, "Version" : { "Fn::GetAtt" : [ "logicalName", "LatestVersionNumber" ] } }, "MaxSize" : "5", "MinSize" : "1", "NotificationConfigurations" : [ { "TopicARN" : { "Ref" : "snsTopicForAutoScalingGroup" }, "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", "autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_TERMINATE_ERROR", "autoscaling:TEST_NOTIFICATION" ] } ] } }

YAML

myASG: Type: AWS::AutoScaling::AutoScalingGroup DependsOn: - snsTopicForAutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '5' MinSize: '1' NotificationConfigurations: - TopicARN: !Ref snsTopicForAutoScalingGroup NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR - autoscaling:EC2_INSTANCE_TERMINATE - autoscaling:EC2_INSTANCE_TERMINATE_ERROR - autoscaling:TEST_NOTIFICATION

Creación de un grupo de escalado automático que utiliza una CreationPolicy y una UpdatePolicy

En el siguiente ejemplo se muestra cómo agregar atributos Atributo CreationPolicy y UpdatePolicy a un recurso de AWS::AutoScaling::AutoScalingGroup.

La política de creación de muestra impide que el grupo de escalado automático alcance el estado CREATE_COMPLETE hasta que AWS CloudFormation reciba el número Count de señales de éxito cuando el grupo está listo. Para indicar que el grupo de escalado automático está listo, se ejecuta un script del asistente cfn-signal agregado a los datos del usuario de la plantilla de lanzamiento (no se muestra) en las instancias. Si las instancias no envían una señal dentro del especificado Timeout, CloudFormation asume que las instancias no se crearon, que se produce un error en la creación de recursos y CloudFormation deshace la pila.

La política de actualización de ejemplo indica a CloudFormation que realice una actualización continua con la propiedad AutoScalingRollingUpdate. La actualización continua realiza cambios en el grupo de escalado automático en pequeños lotes (para este ejemplo, instancia tras instancia) en función de MaxBatchSize y una pausa entre lotes de actualización en función de PauseTime. El atributo MinInstancesInService especifica el número mínimo de instancias que deben estar en servicio en el grupo de escalado automático mientras CloudFormation actualiza las instancias antiguas.

El atributo WaitOnResourceSignals se establece en true. CloudFormation debe recibir una señal de cada instancia nueva dentro del valor de PauseTime especificado antes de continuar con la actualización. Mientras la actualización de la pila está en curso, se suspenden los siguientes procesos de escalado automático de EC2: HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification y ScheduledActions. Nota: No suspenda los tipos de proceso Launch, Terminate ni AddToLoadBalancer (si se utiliza el grupo de escalado automático con Elastic Load Balancing) ya que ello puede impedir que la actualización continua funcione correctamente.

La propiedad VPCZoneIdentifier del grupo de escalado automático especifica una lista de subredes existentes en tres zonas de disponibilidad diferentes. Debe especificar los ID de subredes aplicables de su cuenta antes de crear la pila. La propiedad LaunchTemplate hace referencia al nombre lógico de un recurso AWS::EC2::LaunchTemplate declarado en otra parte de la misma plantilla.

JSON

{ "Resources":{ "myASG":{ "CreationPolicy":{ "ResourceSignal":{ "Count":"3", "Timeout":"PT15M" } }, "UpdatePolicy":{ "AutoScalingRollingUpdate":{ "MinInstancesInService":"3", "MaxBatchSize":"1", "PauseTime":"PT12M5S", "WaitOnResourceSignals":"true", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions", "InstanceRefresh" ] } }, "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate":{ "LaunchTemplateId":{ "Ref":"logicalName" }, "Version":{ "Fn::GetAtt":[ "logicalName", "LatestVersionNumber" ] } }, "MaxSize":"5", "MinSize":"3" } } } }

YAML

--- Resources: myASG: CreationPolicy: ResourceSignal: Count: '3' Timeout: PT15M UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: '3' MaxBatchSize: '1' PauseTime: PT12M5S WaitOnResourceSignals: true SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions - InstanceRefresh Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '5' MinSize: '3'

Creación de una política de escalado por pasos

En este ejemplo, se muestra un recurso de AWS::AutoScaling::ScalingPolicy que escala horizontalmente el grupo de escalado automático mediante una política de escalado de pasos. La propiedad AdjustmentType especifica ChangeInCapacity, lo que significa que ScalingAdjustment representa el número de instancias que agregar (si ScalingAdjustment es positivo) o eliminar (si es negativo). En este ejemplo, ScalingAdjustment es 1; por lo tanto, la política aumenta la cantidad de instancias de EC2 del grupo en 1 cuando se infringe el umbral de alarma.

El recurso de AWS::CloudWatch::Alarm de CPUAlarmHigh especifica la política de escalado de ASGScalingPolicyHigh como la acción a ejecutar cuando la alarma está en estado de ALARMA (AlarmActions). La propiedad Dimensions hace referencia al nombre lógico de un recurso AWS::AutoScaling::AutoScalingGroup declarado en otra parte de la misma plantilla.

JSON

{ "Resources":{ "ASGScalingPolicyHigh":{ "Type":"AWS::AutoScaling::ScalingPolicy", "Properties":{ "AutoScalingGroupName":{ "Ref":"logicalName" }, "PolicyType":"StepScaling", "AdjustmentType":"ChangeInCapacity", "StepAdjustments":[ { "MetricIntervalLowerBound":0, "ScalingAdjustment":1 } ] } }, "CPUAlarmHigh":{ "Type":"AWS::CloudWatch::Alarm", "Properties":{ "EvaluationPeriods":"2", "Statistic":"Average", "Threshold":"90", "AlarmDescription":"Scale out if CPU > 90% for 2 minutes", "Period":"60", "AlarmActions":[ { "Ref":"ASGScalingPolicyHigh" } ], "Namespace":"AWS/EC2", "Dimensions":[ { "Name":"AutoScalingGroupName", "Value":{ "Ref":"logicalName" } } ], "ComparisonOperator":"GreaterThanThreshold", "MetricName":"CPUUtilization" } } } }

YAML

--- Resources: ASGScalingPolicyHigh: Type: AWS::AutoScaling::ScalingPolicy Properties: AutoScalingGroupName: !Ref logicalName PolicyType: StepScaling AdjustmentType: ChangeInCapacity StepAdjustments: - MetricIntervalLowerBound: 0 ScalingAdjustment: 1 CPUAlarmHigh: Type: AWS::CloudWatch::Alarm Properties: EvaluationPeriods: 2 Statistic: Average Threshold: 90 AlarmDescription: 'Scale out if CPU > 90% for 2 minutes' Period: 60 AlarmActions: - !Ref ASGScalingPolicyHigh Namespace: AWS/EC2 Dimensions: - Name: AutoScalingGroupName Value: !Ref logicalName ComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization

Véase también

Para obtener más ejemplos de plantillas para escalar políticas, consulte la sección Examples (Ejemplos) en el recurso AWS::AutoScaling::ScalingPolicy.

Ejemplos del grupo de instancias mixtas

Crear un grupo de escalado automático mediante la selección del tipo de instancia basada en atributos

En este ejemplo, se muestra un recurso de AWS::AutoScaling::AutoScalingGroup que contiene la información para lanzar un grupo de instancias mixtas mediante la selección del tipo de instancias basadas en atributos. Usted especifica los valores mínimo y máximo para la propiedad VCpuCount y el valor mínimo para la propiedad MemoryMiB. Todos los tipos de instancia que utiliza el grupo de escalado automático deben coincidir con los atributos de instancia requeridos.

La propiedad VPCZoneIdentifier del grupo de escalado automático especifica una lista de subredes existentes en tres zonas de disponibilidad diferentes. Debe especificar los ID de subredes aplicables de su cuenta antes de crear la pila. La propiedad LaunchTemplate hace referencia al nombre lógico de un recurso AWS::EC2::LaunchTemplate declarado en otra parte de la misma plantilla.

JSON

{ "Resources":{ "myASG":{ "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":{ "Ref":"logicalName" }, "Version":{ "Fn::GetAtt":[ "logicalName", "LatestVersionNumber" ] } }, "Overrides":[ { "InstanceRequirements":{ "VCpuCount":{ "Min":2, "Max":4 }, "MemoryMiB":{ "Min":2048 } } } ] } }, "MaxSize":"5", "MinSize":"1" } } } }

YAML

--- Resources: myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min: 2 Max: 4 MemoryMiB: Min: 2048 MaxSize: '5' MinSize: '1'

Ejemplos de configuración de lanzamiento

Crear una configuración de lanzamiento

En este ejemplo se muestra un recurso de AWS::AutoScaling::LaunchConfiguration para un grupo de escalado automático en el que especifica valores para las propiedades ImageId, InstanceType y SecurityGroups. La propiedad SecurityGroups especifica el nombre lógico de un recurso de AWS::EC2::SecurityGroup especificado en otra parte de la plantilla y de un grupo de seguridad de EC2 existente denominado myExistingEC2SecurityGroup.

JSON

"mySimpleConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "ImageId" : "ami-02354e95b3example", "InstanceType" : "t3.micro", "SecurityGroups" : [ { "Ref" : "logicalName" }, "myExistingEC2SecurityGroup" ] } }

YAML

mySimpleConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-02354e95b3example InstanceType: t3.micro SecurityGroups: - !Ref logicalName - myExistingEC2SecurityGroup

Creación de un grupo de escalado automático que utiliza una configuración de lanzamiento

En este ejemplo se muestra un recurso de AWS::AutoScaling::AutoScalingGroup con una sola instancia. La propiedad VPCZoneIdentifier del grupo de escalado automático especifica una lista de subredes existentes en tres zonas de disponibilidad diferentes. Debe especificar los ID de subredes aplicables de su cuenta antes de crear la pila. La propiedad LaunchConfigurationName hace referencia a un recurso de AWS::AutoScaling::LaunchConfiguration con el nombre lógico mySimpleConfig definido en la plantilla.

JSON

"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchConfigurationName" : { "Ref" : "mySimpleConfig" }, "MaxSize" : "1", "MinSize" : "1" } }

YAML

myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchConfigurationName: !Ref mySimpleConfig MaxSize: '1' MinSize: '1'