Extraits de modèle Auto Scaling
Rubriques
Ressource de configuration de lancement Auto Scaling
Cet exemple illustre une ressource Auto Scaling AWS::AutoScaling::LaunchConfiguration. La propriété SecurityGroups spécifie une ressource AWS::EC2::SecurityGroup nommée myEC2SecurityGroup, ainsi qu'un groupe de sécurité EC2 existant nommé myExistingEC2SecurityGroup. La propriété BlockDeviceMappings répertorie deux périphériques : un volume EBS de 50 Go mappé avec/dev/sdk et un périphérique virtuel ephemeral0 mappé avec /dev/sdc.
JSON
"SimpleConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "ImageId" : "ami-0ff8a91507f77f867", "SecurityGroups" : [ { "Ref" : "myEC2SecurityGroup" }, "myExistingEC2SecurityGroup" ], "InstanceType" : "m1.small", "BlockDeviceMappings" : [ { "DeviceName" : "/dev/sdk", "Ebs" : {"VolumeSize" : "50"} }, { "DeviceName" : "/dev/sdc", "VirtualName" : "ephemeral0" } ] } }
YAML
SimpleConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-0ff8a91507f77f867 SecurityGroups: - Ref: myEC2SecurityGroup - myExistingEC2SecurityGroup InstanceType: m1.small BlockDeviceMappings: - DeviceName: "/dev/sdk" Ebs: VolumeSize: '50' - DeviceName: "/dev/sdc" VirtualName: ephemeral0
Ressource de groupe Auto Scaling
Cet exemple montre une ressource Auto Scaling AWS::AutoScaling::AutoScalingGroup. La propriété AvailabilityZones spécifie les zones de disponibilité où les instances
EC2 du groupe Auto Scaling seront créées. Dans cet exemple, l'appel {
"Fn::GetAZs" : "" }
de la fonction Fn::GetAZs spécifie toutes les zones de disponibilité de la région dans laquelle la pile sera
créée. La propriété LoadBalancerNames répertorie les équilibreurs de charge utilisés
pour acheminer le trafic vers le groupe Auto Scaling. Dans cet exemple, un seul équilibreur
de charge est spécifié, l'équilibreur de charge de la ressource AWS::ElasticLoadBalancing::LoadBalancer.
JSON
"MyServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : ""}, "LaunchConfigurationName" : { "Ref" : "SimpleConfig" }, "MinSize" : "1", "MaxSize" : "3", "LoadBalancerNames" : [ { "Ref" : "LB" } ] } }
YAML
MyServerGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: '' LaunchConfigurationName: Ref: SimpleConfig MinSize: '1' MaxSize: '3' LoadBalancerNames: - Ref: LB
Stratégie Auto Scaling déclenchée par une alarme CloudWatch
Cet exemple présente une ressource AWS::AutoScaling::ScalingPolicy qui met à l'échelle ascendante le groupe Auto Scaling asGroup. La propriété AdjustmentType
spécifie la valeur ChangeInCapacity. Autrement dit, la valeur ScalingAdjustment
représente le nombre d'instances à ajouter (si ScalingAdjustment
est positif) ou à supprimer (s'il est négatif). Dans cet exemple, le paramètre ScalingAdjustment
indique 1. Par conséquent, la stratégie ajoutera une instances EC2 dans le groupe
lorsqu'elle sera exécutée.
La valeur CPUAlarmHigh de la ressource AWS::CloudWatch::Alarm spécifie la stratégie de mise à l'échelle ScaleUpPolicy en tant qu'action à exécuter
lorsque l'état de l'alarme correspond à ALARM
(AlarmActions
).
JSON
"ScaleUpPolicy" : { "Type" : "AWS::AutoScaling::ScalingPolicy", "Properties" : { "AdjustmentType" : "ChangeInCapacity", "AutoScalingGroupName" : { "Ref" : "asGroup" }, "Cooldown" : "1", "ScalingAdjustment" : "1" } }, "CPUAlarmHigh": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "EvaluationPeriods": "1", "Statistic": "Average", "Threshold": "10", "AlarmDescription": "Alarm if CPU too high or metric disappears indicating instance is down", "Period": "60", "AlarmActions": [ { "Ref": "ScaleUpPolicy" } ], "Namespace": "AWS/EC2", "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": { "Ref": "asGroup" } } ], "ComparisonOperator": "GreaterThanThreshold", "MetricName": "CPUUtilization" } }
YAML
ScaleUpPolicy: Type: AWS::AutoScaling::ScalingPolicy Properties: AdjustmentType: ChangeInCapacity AutoScalingGroupName: Ref: asGroup Cooldown: '1' ScalingAdjustment: '1' CPUAlarmHigh: Type: AWS::CloudWatch::Alarm Properties: EvaluationPeriods: '1' Statistic: Average Threshold: '10' AlarmDescription: Alarm if CPU too high or metric disappears indicating instance is down Period: '60' AlarmActions: - Ref: ScaleUpPolicy Namespace: AWS/EC2 Dimensions: - Name: AutoScalingGroupName Value: Ref: asGroup ComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization
Groupe Auto Scaling avec notifications
Cet exemple montre une ressource AWS::AutoScaling::AutoScalingGroup qui envoie des notifications Amazon SNS lorsque les événements spécifiés ont lieu.
La propriété NotificationConfigurations
spécifie la rubrique SNS dans laquelle AWS CloudFormation envoie une notification,
ainsi que les événements pour lesquels AWS CloudFormation enverra des notifications.
Lorsque les événements spécifiés par NotificationTypes
se produisent, AWS CloudFormation envoie une notification à la rubrique SNS spécifiée
par TopicARN
. Dans cet exemple, AWS CloudFormation envoie une notification à la rubrique SNS topic1
lorsque les événements autoscaling:EC2_INSTANCE_LAUNCH
et autoscaling:EC2_INSTANCE_LAUNCH_ERROR
se produisent.
JSON
"MyAsGroupWithNotification" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Ref" : "azList" }, "LaunchConfigurationName" : { "Ref" : "myLCOne" }, "MinSize" : "0", "MaxSize" : "2", "DesiredCapacity" : "1", "NotificationConfigurations" : [ { "TopicARN" : { "Ref" : "topic1" }, "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", "autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_TERMINATE_ERROR" ] } ] } }
YAML
MyAsGroupWithNotification: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Ref: azList LaunchConfigurationName: Ref: myLCOne MinSize: '0' MaxSize: '2' DesiredCapacity: '1' NotificationConfigurations: - TopicARN: Ref: topic1 NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR - autoscaling:EC2_INSTANCE_TERMINATE - autoscaling:EC2_INSTANCE_TERMINATE_ERROR
Groupe Auto Scaling avec stratégie de mise à jour
Cet exemple montre comment utiliser une stratégie Attribut UpdatePolicy avec un groupe Auto Scaling.
JSON
"ASG1" : { "UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MinInstancesInService" : "1", "MaxBatchSize" : "1", "PauseTime" : "PT12M5S" } }, "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : { "Ref" : "AWS::Region" } }, "LaunchConfigurationName" : { "Ref" : "ASLC" }, "MaxSize" : "3", "MinSize" : "1" } }
YAML
ASG1: UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '1' PauseTime: PT12M5S Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: Ref: AWS::Region LaunchConfigurationName: Ref: ASLC MaxSize: '3' MinSize: '1'