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.
Categorías de fragmentos
- Creación de un grupo de escalado automático de instancia única
- Creación de un grupo de escalado automático con un equilibrador de carga adjunto
- Creación de un grupo de escalado automático con notificaciones
- Creación de un grupo de escalado automático que utiliza una CreationPolicy y una UpdatePolicy
- Creación de una política de escalado por pasos
- Ejemplos del grupo de instancias mixtas
- Ejemplos de configuración de lanzamiento
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: !RefmyLaunchTemplate
Version: !GetAttmyLaunchTemplate
.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.
-
La propiedad
VPCZoneIdentifier
especifica los nombres lógicos de dos recursos deAWS::EC2::Subnet
donde se crearán las instancias del grupo de escalado automático EC2:myPublicSubnet1
ymyPublicSubnet2
. -
La propiedad
LaunchTemplate
especifica un recurso deAWS::EC2::LaunchTemplate
con el nombre lógicomyLaunchTemplate
. -
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 deAWS::ElasticLoadBalancingV2::TargetGroup
con el nombre lógicomyTargetGroup
.
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
- !RefmyPublicSubnet2
LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplate
Version: !GetAttmyLaunchTemplate
.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !RefmyTargetGroup
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: !ReflogicalName
Version: !GetAttlogicalName
.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: !ReflogicalName
Version: !GetAttlogicalName
.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: !ReflogicalName
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
Create an Auto Scaling group using attribute-based instance type selection
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: !ReflogicalName
Version: !GetAttlogicalName
.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: - !ReflogicalName
-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: !RefmySimpleConfig
MaxSize: '1' MinSize: '1'