Konfigurieren Sie Amazon EC2 Auto Scaling Ressourcen mit CloudFormation.
Die folgenden Beispiele zeigen verschiedene Snippets, die in Vorlagen für die Verwendung mit Amazon EC2 Auto Scaling aufgenommen werden können.
Kategorien von Ausschnitten
Erstellen Sie eine Auto Scaling-Gruppe für eine einzelne Instance
Dieses Beispiel zeigt eine AWS::AutoScaling::AutoScalingGroup-Ressource mit einer einzelnen Instance, um Ihnen den Einstieg zu erleichtern. Die VPCZoneIdentifier-Eigenschaft der Auto-Scaling-Gruppe gibt eine Liste vorhandener Subnetze in drei verschiedenen Availability Zones an. Sie müssen die entsprechenden Subnetz-IDs aus Ihrem Konto angeben, bevor Sie Ihren Stack erstellen. Die Eigenschaft LaunchTemplate verweist auf eine AWS::EC2::LaunchTemplate-Ressource mit dem logischen Namen myLaunchTemplate, die an anderer Stelle in Ihrer Vorlage definiert ist.
Anmerkung
Beispiele für Startvorlagen finden Sie unter Erstellen Sie Startvorlagen mit CloudFormation im Abschnitt Amazon EC2 Snippets und im Abschnitt Beispiele in der AWS::EC2::LaunchTemplate Ressource.
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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplateVersion: !GetAttmyLaunchTemplate.LatestVersionNumber MaxSize: '1' MinSize: '1'
Erstellen Sie eine Auto Scaling-Gruppe mit einem angeschlossenen Load Balancer
Dieses Beispiel zeigt eine AWS::AutoScaling::AutoScalingGroup-Ressource für den Lastausgleich über mehrere Server. Sie gibt die logischen Namen der AWS-Ressourcen an, die an anderer Stelle in derselben Vorlage deklariert werden.
-
Die Eigenschaft
VPCZoneIdentifiergibt die logischen Namen von zweiAWS::EC2::Subnet-Ressourcen an, in denen die EC2-Instances der Auto Scaling-Gruppe erstellt werden:myPublicSubnet1undmyPublicSubnet2. -
Die Eigenschaft
LaunchTemplategibt eineAWS::EC2::LaunchTemplateRessource mit dem logischen NamenmyLaunchTemplatean. -
Die
TargetGroupARNs-Eigenschaft listet die Zielgruppen für einen Application Load Balancer oder einen Network Load Balancer auf, der verwendet wird, um den Datenverkehr an die Auto-Scaling-Gruppe weiterzuleiten. In diesem Beispiel wird eine Zielgruppe angegeben, eineAWS::ElasticLoadBalancingV2::TargetGroupRessource mit dem logischen NamenmyTargetGroup.
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: - !RefmyPublicSubnet1- !RefmyPublicSubnet2LaunchTemplate: LaunchTemplateId: !RefmyLaunchTemplateVersion: !GetAttmyLaunchTemplate.LatestVersionNumber MaxSize: '5' MinSize: '1' TargetGroupARNs: - !RefmyTargetGroup
Weitere Informationen finden Sie auch unter
Ein detailliertes Beispiel, in dem eine Auto-Scaling-Gruppe mit einer Skalierungsrichtlinie zur Zielverfolgung-basierend auf der vordefinierten ALBRequestCountPerTarget-Metrik für Ihren Application Load Balancer erstellt wird, finden Sie im Abschnitt Beispiele in der AWS::AutoScaling::ScalingPolicy-Ressource.
Erstellen Sie eine Auto Scaling Gruppe mit Benachrichtigungen
Dieses Beispiel zeigt eine AWS::AutoScaling::AutoScalingGroup-Ressource, die Amazon SNS-Benachrichtigungen sendet, wenn die angegebenen Ereignisse eintreten. Die Eigenschaft NotificationConfigurations definiert das SNS-Thema, an das CloudFormation eine Benachrichtigung senden soll, sowie die Ereignisse, bei deren Eintreten CloudFormation eine Benachrichtigung senden soll. Tritt eines der im Parameter NotificationTypes angegebenen Ereignisse ein, sendet CloudFormation eine Benachrichtigung an das im Parameter TopicARN angegebene SNS-Thema. Wenn Sie den Stack starten, erstellt CloudFormation eine AWS::SNS::Subscription Ressource (snsTopicForAutoScalingGroup), die in derselben Vorlage deklariert ist.
Die VPCZoneIdentifier-Eigenschaft der Auto-Scaling-Gruppe gibt eine Liste vorhandener Subnetze in drei verschiedenen Availability Zones an. Sie müssen die entsprechenden Subnetz-IDs aus Ihrem Konto angeben, bevor Sie Ihren Stack erstellen. Die Eigenschaft LaunchTemplate verweist auf den logischen Namen einer AWS::EC2::LaunchTemplate-Ressource, die an anderer Stelle in derselben Vorlage deklariert ist.
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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !ReflogicalNameVersion: !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
Erstellen Sie eine Autoskalierungsgruppe, die ein CreationPolicy und ein UpdatePolicyverwendet.
Das folgende Beispiel zeigt, wie Sie die Attribute CreationPolicy und UpdatePolicy zu einer AWS::AutoScaling::AutoScalingGroup-Ressource hinzufügen.
Die Muster-Erstellungs-Richtlinie verhindert, dass die Auto-Scaling-Gruppe den Status CREATE_COMPLETE erreicht, bis CloudFormation eine Anzahl von Count Erfolgssignalen erhält, wenn die Gruppe bereit ist. Um zu signalisieren, dass die Auto-Scaling-Gruppe bereit ist, wird ein cfn-signal-Hilfsskript, das den Benutzerdaten der Einführungsvorlage hinzugefügt wird (nicht gezeigt), auf den Instances ausgeführt. Wenn die Instances innerhalb des angegebenen Timeout kein Signal senden, geht CloudFormation davon aus, dass die Instances nicht erstellt wurden, die Ressourcen-Erstellung schlägt fehl und CloudFormation setzt den Stack zurück.
Die Beispiel-Aktualisierungsrichtlinie weist CloudFormation an, mithilfe der AutoScalingRollingUpdate-Eigenschaft ein fortlaufendes Update durchzuführen. Die fortlaufende Aktualisierung führt Änderungen an der Auto-Scaling-Gruppe in kleinen Stapeln (für dieses Beispiel Instance nach Instance) basierend auf MaxBatchSize durch und eine Pausenzeit zwischen Stapeln von Updates auf der Grundlage von PauseTime. Das Attribut MinInstancesInService gibt die minimale Anzahl von Instances an, die innerhalb der Auto-Scaling-Gruppe in Betrieb sein müssen, während CloudFormation alte Instances aktualisiert.
Das WaitOnResourceSignals-Attribut ist auf „true“ festgelegt. CloudFormation muss von jeder neuen Instance innerhalb der angegebenen PauseTime ein Signal erhalten, bevor die Aktualisierung fortgesetzt wird. Während die Stack-Aktualisierung ausgeführt wird, werden die folgenden EC2-Auto Scaling-Prozesse ausgesetzt: HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification und ScheduledActions. Hinweis: Unterbrechen Sie die Prozesstypen Launch, Terminate oder AddToLoadBalancer (wenn die Auto-Scaling-Gruppe mit Elastic Load Balancing verwendet wird) nicht, da dies die ordnungsgemäße Funktion der fortlaufenden Aktualisierung verhindern kann.
Die VPCZoneIdentifier-Eigenschaft der Auto-Scaling-Gruppe gibt eine Liste vorhandener Subnetze in drei verschiedenen Availability Zones an. Sie müssen die entsprechenden Subnetz-IDs aus Ihrem Konto angeben, bevor Sie Ihren Stack erstellen. Die Eigenschaft LaunchTemplate verweist auf den logischen Namen einer AWS::EC2::LaunchTemplate-Ressource, die an anderer Stelle in derselben Vorlage deklariert ist.
Weitere Informationen zu den Attributen CreationPolicy und UpdatePolicy finden Sie unter Ressourcenattribut-Referenz.
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-subnetIdAz3LaunchTemplate: LaunchTemplateId: !ReflogicalNameVersion: !GetAttlogicalName.LatestVersionNumber MaxSize: '5' MinSize: '3'
Erstellen Sie eine Skalierungsrichtlinie
Dieses Beispiel zeigt eine AWS::AutoScaling::ScalingPolicy-Ressource, die die Auto Scaling-Gruppe mithilfe einer stufenweisen Skalierungsrichtlinie skaliert. Die Eigenschaft AdjustmentType ist auf ChangeInCapacity festgelegt. Das bedeutet, dass der Parameter ScalingAdjustment angibt, wie viele Instances hinzugefügt werden sollen (bei positivem Wert für ScalingAdjustment) oder gelöscht werden sollen (bei negativem Wert). In diesem Beispiel wird ScalingAdjustment auf 1 festgelegt. Wenn der Schwellenwert für den Alarm überschritten wird, wird die Anzahl der EC2-Instances in der Gruppe also von der Richtlinie um 1 erhöht.
Die Ressource AWS::CloudWatch::Alarm CPUAlarmHigh legt die Skalierungsrichtlinie ASGScalingPolicyHigh als Aktion fest, die ausgeführt werden soll, wenn sich der Alarm im Zustand ALARM befindet (AlarmActions). Die Eigenschaft Dimensions verweist auf den logischen Namen einer AWS::AutoScaling::AutoScalingGroup-Ressource, die an anderer Stelle in derselben Vorlage deklariert ist.
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: !ReflogicalNamePolicyType: 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: !ReflogicalNameComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization
Weitere Informationen finden Sie auch unter
Weitere Beispielvorlagen für Skalierungsrichtlinien finden Sie im Abschnitt Beispiele in der AWS::AutoScaling::ScalingPolicy-Ressource.
Gemischte Instances-Gruppen
Erstellen einer Auto-Scaling-Gruppe mit attributbasierter Auswahl des Instance-Typs
Dieses Beispiel zeigt eine AWS::AutoScaling::AutoScalingGroup-Ressource, die die Informationen zum Starten einer gemischten Instancegruppe mit attributbasierter Instancetypauswahl enthält. Sie geben die Mindest- und Höchstwerte für die VCpuCount-Eigenschaft und der Mindestwert für die MemoryMiB-Eigenschaft ein. Alle Instance-Typen, die von der Auto-Scaling-Gruppe verwendet werden, müssen mit Ihren erforderlichen Instance-Attributen übereinstimmen.
Die VPCZoneIdentifier-Eigenschaft der Auto-Scaling-Gruppe gibt eine Liste vorhandener Subnetze in drei verschiedenen Availability Zones an. Sie müssen die entsprechenden Subnetz-IDs aus Ihrem Konto angeben, bevor Sie Ihren Stack erstellen. Die Eigenschaft LaunchTemplate verweist auf den logischen Namen einer AWS::EC2::LaunchTemplate-Ressource, die an anderer Stelle in derselben Vorlage deklariert ist.
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-subnetIdAz3MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !ReflogicalNameVersion: !GetAttlogicalName.LatestVersionNumber Overrides: - InstanceRequirements: VCpuCount: Min:2Max:4MemoryMiB: Min:2048MaxSize: '5' MinSize: '1'
Beispiele für Launch-Konfigurationen
Erstellen einer Startkonfiguration
Dieses Beispiel zeigt eine AWS::AutoScaling::LaunchConfiguration-Ressource für eine Auto-Skalierungsgruppe, für die Sie Werte für die Eigenschaften,ImageId InstanceTypeund SecurityGroups angeben. Die Eigenschaft SecurityGroups gibt sowohl den logischen Namen einer AWS::EC2::SecurityGroup-Ressource an, die an anderer Stelle in der Vorlage angegeben ist, als auch eine bestehende EC2-Sicherheitsgruppe namens 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-02354e95b3exampleInstanceType:t3.microSecurityGroups: - !ReflogicalName-myExistingEC2SecurityGroup
Erstellen Sie eine Auto Scaling-Gruppe, die eine Startkonfiguration verwendet
Dieses Beispiel zeigt eine AWS::AutoScaling::AutoScalingGroup-Ressource mit einer einzigen Instance. Die VPCZoneIdentifier-Eigenschaft der Auto-Scaling-Gruppe gibt eine Liste vorhandener Subnetze in drei verschiedenen Availability Zones an. Sie müssen die entsprechenden Subnetz-IDs aus Ihrem Konto angeben, bevor Sie Ihren Stack erstellen. Die Eigenschaft LaunchConfigurationName verweist auf eine AWS::AutoScaling::LaunchConfiguration-Ressource mit dem logischen Namen mySimpleConfig, die in Ihrer Vorlage definiert ist.
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-subnetIdAz3LaunchConfigurationName: !RefmySimpleConfigMaxSize: '1' MinSize: '1'