Konfigurieren Sie Amazon EC2 Auto Scaling Scaling-Ressourcen mit CloudFormation - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfigurieren Sie Amazon EC2 Auto Scaling Scaling-Ressourcen mit CloudFormation

Die folgenden Beispiele zeigen verschiedene Ausschnitte, die in Vorlagen zur Verwendung mit Amazon EC2 Auto Scaling aufgenommen werden können.

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 das entsprechende 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 Erstellen Sie Startvorlagen mit CloudFormation im Abschnitt EC2 Amazon-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 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.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. Es gibt die logischen Namen von AWS Ressourcen an, die an anderer Stelle in derselben Vorlage deklariert wurden.

  1. Die VPCZoneIdentifier Eigenschaft gibt die logischen Namen von zwei AWS::EC2::SubnetRessourcen an, auf denen die EC2 Instances der Auto Scaling Scaling-Gruppe erstellt werden: myPublicSubnet1 undmyPublicSubnet2.

  2. Die Eigenschaft LaunchTemplate gibt eine AWS::EC2::LaunchTemplate Ressource mit dem logischen Namen myLaunchTemplatean.

  3. 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, eine AWS::ElasticLoadBalancingV2::TargetGroup Ressource mit dem logischen Namen 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

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 NotificationConfigurations Eigenschaft gibt das SNS-Thema an, an das eine Benachrichtigung CloudFormation gesendet wird, und die Ereignisse, die CloudFormation dazu führen, dass Benachrichtigungen gesendet werden. Wenn die von angegebenen Ereignisse NotificationTypes eintreten, CloudFormation wird eine Benachrichtigung an das von angegebene SNS-Thema gesendet. TopicARN Wenn Sie den Stack starten, CloudFormation wird eine AWS::SNS::SubscriptionRessource (snsTopicForAutoScalingGroup) erstellt, 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 das entsprechende 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 - 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

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 Richtlinie zur Probenerstellung verhindert, dass die Auto Scaling Scaling-Gruppe CREATE_COMPLETE den Status erreicht, bis sie CloudFormation eine Count Reihe von 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 Zeitraums kein Signal sendenTimeout, CloudFormation wird davon ausgegangen, dass die Instanzen nicht erstellt wurden, CloudFormation schlägt die Ressourcenerstellung fehl und der Stack wird zurückgesetzt.

Die Beispielaktualisierungsrichtlinie 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 MinInstancesInService Attribut gibt die Mindestanzahl von Instances an, die innerhalb der Auto Scaling Scaling-Gruppe in Betrieb sein müssen, während alte Instances CloudFormation aktualisiert werden.

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 das Stack-Update läuft, werden die folgenden EC2 Auto Scaling Scaling-Prozesse ausgesetzt: HealthCheck ReplaceUnhealthyAZRebalance,,AlarmNotification, undScheduledActions. 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 das entsprechende 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 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.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 ScalingAdjustment ist es 1; daher erhöht die Richtlinie die Anzahl der EC2 Instances in der Gruppe um 1, wenn der Alarmschwellenwert überschritten wird.

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: !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

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 das entsprechende 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 - 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'

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 SecurityGroups Eigenschaft gibt sowohl den logischen Namen einer AWS::EC2::SecurityGroupRessource an, die an anderer Stelle in der Vorlage angegeben ist, als auch den Namen myExistingEC2SecurityGroup einer vorhandenen EC2 Sicherheitsgruppe.

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

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 das entsprechende 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 - subnetIdAz3 LaunchConfigurationName: !Ref mySimpleConfig MaxSize: '1' MinSize: '1'