Auto Scaling von Vorlagenausschnitten
Die folgenden Beispiele zeigen verschiedene Ausschnitte, die in Vorlagen für die Verwendung mit Amazon EC2 Auto Scaling oder Application Auto Scaling enthalten sind.
Mit Amazon EC2 Auto Scaling können Sie Amazon EC2-Instances automatisch skalieren, entweder mit Skalierungsrichtlinien oder mit einer geplanter Skalierung. Auto Scaling-Gruppen sind Sammlungen von Amazon EC2-Instances, die automatische Skalierung und Flottenverwaltungsfunktionen ermöglichen, z. B. Zustandsprüfungen und Integration in Elastic Load Balancing.
Application Auto Scaling ermöglicht die automatische Skalierung verschiedener Ressourcen über Amazon EC2 hinaus, entweder mit Skalierungsrichtlinien oder mit geplanter Skalierung.
Themen
- Deklarieren einer Startkonfiguration
- Deklarieren einer einzelnen Auto Scaling-Instance-Gruppe
- Deklarieren einer Auto Scaling-Gruppe mit Lastausgleich
- Deklarieren einer Skalierungsrichtlinie mit einem CloudWatch-Alarm
- Deklarieren einer Auto Scaling-Gruppe mit einer Startvorlage und Benachrichtigungen
- Deklarieren einer Auto Scaling-Gruppe mit einem UpdatePolicy-Element
- Application Auto Scaling-Vorlagenbeispiele
Deklarieren einer Startkonfiguration
Dieses Beispiel zeigt eine AWS።AutoScaling።LaunchConfiguration-Ressource für eine Auto Scaling Gruppe, in der Sie Werte für die SecurityGroups
-Eigenschaften ImageId
, InstanceType
und angeben. Die SecurityGroups
-Eigenschaft gibt sowohl den logischen Namen einer AWS።EC2።SecurityGroup-Ressource an, die in der Vorlage angegeben ist, als auch eine vorhandene EC2-Sicherheitsgruppe mit dem Namen myExistingEC2SecurityGroup
.
JSON
"mySimpleConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Properties" : { "ImageId" : "ami-02354e95b39ca8dec", "SecurityGroups" : [ { "Ref" : "
logicalName
" }, "myExistingEC2SecurityGroup
" ], "InstanceType" : "t3.micro" } }
YAML
mySimpleConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: ami-02354e95b39ca8dec SecurityGroups: - Ref:
logicalName
-myExistingEC2SecurityGroup
InstanceType: t3.micro
Deklarieren einer einzelnen Auto Scaling-Instance-Gruppe
Dieses Beispiel zeigt eine AWS።AutoScaling። AutoScalingGroup-Ressource mit einer einzigen Instance, die Ihnen beim Einstieg hilft. Die VPCZoneIdentifier
-Eigenschaft der Auto Scaling-Gruppe gibt eine Liste vorhandener Subnetze in verschiedenen Availability Zones an. Sie müssen die entsprechenden Subnetz-IDs aus Ihrem Konto angeben, bevor Sie Ihren Stack erstellen. Die LaunchConfigurationName
-Eigenschaft verweist auf eine AWS።AutoScaling።LaunchConfiguration-Ressource mit dem logischen Namen mySimpleConfig
, der in Ihrer Vorlage definiert ist.
JSON
"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "
subnetIdAz1
", "subnetIdAz2
", "subnetIdAz3
" ], "LaunchConfigurationName" : { "Ref" : "mySimpleConfig
" }, "MinSize" : "0", "MaxSize" : "1", "DesiredCapacity" : "1" } }
YAML
myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: -
subnetIdAz1
-subnetIdAz2
-subnetIdAz3
LaunchConfigurationName: !RefmySimpleConfig
MinSize: '0' MaxSize: '1' DesiredCapacity: '1'
Deklarieren einer Auto Scaling-Gruppe mit Lastausgleich
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
VPCZoneIdentifier
-Eigenschaft gibt die logischen Namen von zwei AWS።EC2።Subnet-Ressourcen an, in denen die EC2-Instances der Auto Scaling-Gruppe erstellt werden:myPublicSubnet1
undmyPublicSubnet2
. -
Die
LaunchConfigurationName
-Eigenschaft gibt eine AWS።AutoScaling። LaunchConfiguration-Ressource mit dem logischen NamenmySimpleConfig
an. -
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 NamenmyTargetGroup
.
JSON
"myServerGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ { "Ref" : "
myPublicSubnet1
" }, { "Ref" : "myPublicSubnet2
" } ], "LaunchConfigurationName" : { "Ref" : "mySimpleConfig
" }, "MinSize" : "1", "MaxSize" : "5", "HealthCheckGracePeriod" : 300, "MaxInstanceLifetime" : 2592000, "TargetGroupARNs" : [ { "Ref" : "myTargetGroup
" } ] } }
YAML
myServerGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - !Ref
myPublicSubnet1
- !RefmyPublicSubnet2
LaunchConfigurationName: !RefmySimpleConfig
MinSize: '1' MaxSize: '5' HealthCheckGracePeriod: 300 MaxInstanceLifetime: 2592000 TargetGroupARNs: - !RefmyTargetGroup
Weitere Informationen finden Sie auch unter
Ein detailliertes Beispiel, in dem eine Auto Scaling-Gruppe mit einer Skalierungsrichtlinie für Target Tracking 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.
Deklarieren einer Skalierungsrichtlinie mit einem CloudWatch-Alarm
Dieses Beispiel zeigt eine Ressource des Typs AWS::AutoScaling::ScalingPolicy, die eine Auto Scaling-Gruppe mit einer einfachen Skalierungsrichtlinie hinaus 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 AWS።CloudWatch።Alarm-Ressource CPUAlarmHigh
gibt die Skalierungsrichtlinie myScaleOutPolicy
als Aktion an, die ausgeführt wird, wenn sich der Alarm in einem ALARM-Zustand (AlarmActions
) befindet.
JSON
"myScaleOutPolicy" : { "Type" : "AWS::AutoScaling::ScalingPolicy", "Properties" : { "AdjustmentType" : "ChangeInCapacity", "AutoScalingGroupName" : { "Ref" : "
logicalName
" }, "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" : "myScaleOutPolicy" } ], "Namespace" : "AWS/EC2", "Dimensions" : [ { "Name" : "AutoScalingGroupName", "Value" : { "Ref" : "logicalName
" } } ], "ComparisonOperator" : "GreaterThanThreshold", "MetricName" : "CPUUtilization" } }
YAML
myScaleOutPolicy: Type: AWS::AutoScaling::ScalingPolicy Properties: AdjustmentType: ChangeInCapacity AutoScalingGroupName: !Ref
logicalName
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 myScaleOutPolicy Namespace: AWS/EC2 Dimensions: - Name: AutoScalingGroupName Value: Ref:logicalName
ComparisonOperator: GreaterThanThreshold MetricName: CPUUtilization
Weitere Informationen finden Sie auch unter
Beispielvorlagen für die Richtlinientypen TargetTrackingScaling
und StepScaling
finden Sie im Abschnitt Beispiele in der AWS::AutoScaling::ScalingPolicy
-Ressource.
Deklarieren einer Auto Scaling-Gruppe mit einer Startvorlage und Benachrichtigungen
Dieses Beispiel zeigt eine Ressource des Typs AWS::AutoScaling::AutoScalingGroup, die Amazon SNS-Benachrichtigungen sendet, sobald die angegebenen Ereignisse eintreten. Die Eigenschaft NotificationConfigurations
definiert das SNS-Thema, an das AWS CloudFormation eine Benachrichtigung senden soll, sowie die Ereignisse, bei deren Eintreten AWS CloudFormation eine Benachrichtigung senden soll. Tritt eines der im Parameter NotificationTypes
angegebenen Ereignisse ein, sendet AWS CloudFormation eine Benachrichtigung an das im Parameter TopicARN
angegebene SNS-Thema. Wenn Sie den Stack starten, erstellt AWS CloudFormation eine AWS።SNS።Subscription-Ressource (snsTopicForAutoScalingGroup
), die in derselben Vorlage deklariert ist.
Die Eigenschaften AvailabilityZones
und VPCZoneIdentifier
der Auto Scaling Gruppenreferenzparameterwerte, die Sie beim Erstellen oder Aktualisieren eines Stacks an die Vorlage übergeben. Die LaunchTemplate
-Eigenschaft verweist auf den logischen Namen einer AWS።EC2።LaunchTemplate-Ressource, die an anderer Stelle in derselben Vorlage deklariert wurde.
JSON
"myASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "DependsOn": [ "snsTopicForAutoScalingGroup" ], "Properties" : { "AvailabilityZones" : { "Ref" : "AZs" }, "VPCZoneIdentifier" : { "Ref" : "Subnets" }, "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "
logicalName
" }, "Version" : { "Fn::GetAtt" : [ "logicalName
", "LatestVersionNumber" ] } }, "MinSize" : "1", "MaxSize" : "5", "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: AvailabilityZones: !Ref AZs VPCZoneIdentifier: !Ref Subnets LaunchTemplate: LaunchTemplateId: !Ref
logicalName
Version: !GetAttlogicalName
.LatestVersionNumber MinSize: '1' MaxSize: '5' 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
Weitere Informationen finden Sie auch unter
Weitere Beispiele für die Angabe einer Startvorlage für eine Auto Scaling-Gruppe finden Sie im Abschnitt Beispiele in der AWS::AutoScaling::AutoScalingGroup
-Ressource.
Deklarieren einer Auto Scaling-Gruppe mit einem UpdatePolicy-Element
Im folgenden Beispiel wird ein UpdatePolicy-Attribut für eine Auto Scaling-Gruppe angegeben. 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. Um der Auto Scaling-Gruppe zu signalisieren, wird auf jeder Instance ein cfn-signal Hilfsskript (nicht angezeigt) ausgeführt. 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.
JSON
"myASG" : { "UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MinInstancesInService" : "1", "MaxBatchSize" : "1", "PauseTime" : "PT12M5S", "WaitOnResourceSignals" : "true", "SuspendProcesses" : [ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions" ] } }, "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : { "Ref" : "AZs" }, "VPCZoneIdentifier" : { "Ref" : "Subnets" }, "LaunchConfigurationName" : { "Ref" : "
logicalName
" }, "MaxSize" : "5", "MinSize" : "1" } }
YAML
myASG: UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '1' PauseTime: PT12M5S WaitOnResourceSignals: true SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: !Ref AZs VPCZoneIdentifier: !Ref Subnets LaunchConfigurationName: !Ref
logicalName
MaxSize: '5' MinSize: '1'
Application Auto Scaling-Vorlagenbeispiele
Dieser Abschnitt enthält AWS CloudFormation-Vorlagenbeispiele für die Application Auto Scaling-Skalierungsrichtlinien und geplanten Aktionen für verschiedene AWS-Ressourcen.
Themen
- Deklarieren einer Skalierungsrichtlinie für einen Aurora DB-Cluster
- Deklarieren einer Skalierungsrichtlinie für eine DynamoDB-Tabelle
- Deklarieren einer Skalierungsrichtlinie für einen Amazon ECS-Service
- Deklarieren einer geplanten Aktion für eine Lambda-Funktion
- Deklarieren einer geplanten Aktion für eine Spot-Flotte
Wenn ein Application Auto Scaling-Ausschnitt in der Vorlage enthalten ist, sollten Sie eine Abhängigkeit von der spezifischen skalierbaren Ressource deklarieren, die über die Vorlage mit dem DependsOn-Attribut erstellt wird. Dies überschreibt die Standardparallelität und weist AWS CloudFormation darauf hin, Ressourcen in einer bestimmten Reihenfolge zu verwenden. Andernfalls kann die Skalierungskonfiguration angewendet werden, bevor die Ressource vollständig eingerichtet wurde.
Deklarieren einer Skalierungsrichtlinie für einen Aurora DB-Cluster
In diesem Ausschnitt registrieren Sie eine vorhandene AWS።RDS።DBCluster-Ressource mit dem Namen „my-db-cluster
“. Die Ressource AWS።ApplicationAutoScaling።ScalableTarget gibt an, dass der DB-Cluster dynamisch skaliert werden muss, um über ein bis acht Aurora Replicas zu verfügen. Außerdem wenden Sie mithilfe der AWS::ApplicationAutoScaling::ScalingPolicy-Ressource eine Skalierungsrichtlinie zur Zielverfolgung auf den Cluster an.
In dieser Konfiguration wird die vordefinierte Metrik RDSReaderAverageCPUUtilization
verwendet, um einen Aurora DB-Cluster anzupassen, basierend auf einer durchschnittlichen CPU-Auslastung von 40 Prozent über alle Aurora -Repliken hinweg in diesem Aurora DB-Cluster. Die Konfiguration sieht eine Scale-In-Ruhephase von 10 Minuten und eine Scale-Out-Ruhephase von 5 Minuten vor.
JSON
{ "Resources" : { "ScalableTarget" : { "Type" : "AWS::ApplicationAutoScaling::ScalableTarget", "Properties" : { "MaxCapacity" : 8, "MinCapacity" : 1, "RoleARN" : { "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/rds.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_RDSCluster" }, "ServiceNamespace" : "rds", "ScalableDimension" : "rds:cluster:ReadReplicaCount", "ResourceId" : "cluster:my-db-cluster" } }, "ScalingPolicyDBCluster" : { "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : { "Fn::Sub" : "${AWS::StackName}-target-tracking-cpu40" }, "PolicyType" : "TargetTrackingScaling", "ServiceNamespace" : "rds", "ScalableDimension" : "rds:cluster:ReadReplicaCount", "ResourceId" : "cluster:my-db-cluster", "TargetTrackingScalingPolicyConfiguration" : { "TargetValue" : 40, "PredefinedMetricSpecification" : { "PredefinedMetricType" : "RDSReaderAverageCPUUtilization" }, "ScaleInCooldown" : 600, "ScaleOutCooldown" : 300 } } } } }
YAML
--- Resources: ScalableTarget: Type: 'AWS::ApplicationAutoScaling::ScalableTarget' Properties: MaxCapacity: 8 MinCapacity: 1 RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/rds.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_RDSCluster' ServiceNamespace: rds ScalableDimension: 'rds:cluster:ReadReplicaCount' ResourceId: 'cluster:my-db-cluster' ScalingPolicyDBCluster: Type: 'AWS::ApplicationAutoScaling::ScalingPolicy' Properties: PolicyName: !Sub ${AWS::StackName}-target-tracking-cpu40 PolicyType: TargetTrackingScaling ServiceNamespace: rds ScalableDimension: 'rds:cluster:ReadReplicaCount' ResourceId: 'cluster:my-db-cluster' TargetTrackingScalingPolicyConfiguration: TargetValue: 40 PredefinedMetricSpecification: PredefinedMetricType: RDSReaderAverageCPUUtilization ScaleInCooldown: 600 ScaleOutCooldown: 300
Deklarieren einer Skalierungsrichtlinie für eine DynamoDB-Tabelle
Dieser Ausschnitt zeigt, wie Sie eine Richtlinie mit dem TargetTrackingScaling
-Richtlinientyp erstellen und sie mithilfe der Ressource AWS።ApplicationAutoScaling።ScalingPolicy auf eine AWS።DynamoDB።Table-Ressource anwenden. Die Ressource AWS።ApplicationAutoScaling።ScalableTarget deklariert ein skalierbares Ziel, auf das diese Richtlinie angewendet wird, mit mindestens fünf Schreibkapazitätseinheiten und maximal 15 Einheiten. Die Skalierungsrichtlinie skaliert den Schreibkapazitätsdurchsatz der Tabelle, um die Zielauslastung basierend auf der vordefinierten DynamoDBWriteCapacityUtilization
-Metrik auf 50 Prozent zu halten.
Sie verwendet die intrinsischen Funktionen Fn።Join und Ref, um die ResourceId
-Eigenschaft mit dem logischen Namen der AWS::DynamoDB::Table
-Ressource zu erstellen, die in derselben Vorlage angegeben ist.
Weitere Informationen zum Erstellen einer AWS CloudFormation-Vorlage für DynamoDB-Ressourcen finden Sie im Blog-Beitrag How to use AWS CloudFormation to configure auto scaling for Amazon DynamoDB tables and indexes
JSON
{ "Resources" : { "WriteCapacityScalableTarget" : { "Type" : "AWS::ApplicationAutoScaling::ScalableTarget", "Properties" : { "MaxCapacity" : 15, "MinCapacity" : 5, "RoleARN" : { "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable" }, "ServiceNamespace" : "dynamodb", "ScalableDimension" : "dynamodb:table:WriteCapacityUnits", "ResourceId" : { "Fn::Join" : [ "/", [ "table", { "Ref" : "
logicalName
" } ] ] } } }, "WriteScalingPolicy" : { "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : "WriteScalingPolicy", "PolicyType" : "TargetTrackingScaling", "ScalingTargetId" : { "Ref" : "WriteCapacityScalableTarget" }, "TargetTrackingScalingPolicyConfiguration" : { "TargetValue" : 50.0, "ScaleInCooldown" : 60, "ScaleOutCooldown" : 60, "PredefinedMetricSpecification" : { "PredefinedMetricType" : "DynamoDBWriteCapacityUtilization" } } } } } }
YAML
--- Resources: WriteCapacityScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 15 MinCapacity: 5 RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable' ServiceNamespace: dynamodb ScalableDimension: dynamodb:table:WriteCapacityUnits ResourceId: !Join - / - - table - !Ref
logicalName
WriteScalingPolicy: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: WriteScalingPolicy PolicyType: TargetTrackingScaling ScalingTargetId: !Ref WriteCapacityScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 50.0 ScaleInCooldown: 60 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: DynamoDBWriteCapacityUtilization
Deklarieren einer Skalierungsrichtlinie für einen Amazon ECS-Service
Dieser Ausschnitt zeigt, wie Sie eine Richtlinie erstellen und sie mithilfe der Ressource AWS።ApplicationAutoScaling።ScalingPolicy auf eine AWS።ECS።Service-Ressource anwenden. Die Ressource AWS።ApplicationAutoScaling።ScalableTarget deklariert ein skalierbares Ziel, auf das diese Richtlinie angewendet wird. Application Auto Scaling kann die Anzahl der Aufgaben auf mindestens 1 Aufgabe und maximal 2 skalieren.
Es werden zwei Skalierungsrichtlinien mit dem TargetTrackingScaling
-Richtlinientyp erstellt. Die Richtlinien werden verwendet, um den ECS-Service basierend auf der durchschnittlichen CPU- und Speicherauslastung des Service zu skalieren. Sie verwendet die intrinsischen Funktionen Fn።Join und Ref, um die ResourceId
-Eigenschaft mit den logischen Namen der AWS::ECS::Cluster
(myContainerCluster
)- und AWS::ECS::Service
(myService
)-Ressourcem zu erstellen, die in derselben Vorlage angegeben ist.
JSON
{ "Resources" : { "ECSScalableTarget" : { "Type" : "AWS::ApplicationAutoScaling::ScalableTarget", "Properties" : { "MaxCapacity" : "2", "MinCapacity" : "1", "RoleARN" : { "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService" }, "ServiceNamespace" : "ecs", "ScalableDimension" : "ecs:service:DesiredCount", "ResourceId" : { "Fn::Join" : [ "/", [ "service", { "Ref" : "
myContainerCluster
" }, { "Fn::GetAtt" : [ "myService
", "Name" ] } ] ] } } }, "ServiceScalingPolicyCPU" : { "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : { "Fn::Sub" : "${AWS::StackName}-target-tracking-cpu70" }, "PolicyType" : "TargetTrackingScaling", "ScalingTargetId" : { "Ref" : "ECSScalableTarget" }, "TargetTrackingScalingPolicyConfiguration" : { "TargetValue" : 70.0, "ScaleInCooldown" : 180, "ScaleOutCooldown" : 60, "PredefinedMetricSpecification" : { "PredefinedMetricType" : "ECSServiceAverageCPUUtilization" } } } }, "ServiceScalingPolicyMem" : { "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : { "Fn::Sub" : "${AWS::StackName}-target-tracking-mem90" }, "PolicyType" : "TargetTrackingScaling", "ScalingTargetId" : { "Ref" : "ECSScalableTarget" }, "TargetTrackingScalingPolicyConfiguration" : { "TargetValue" : 90.0, "ScaleInCooldown" : 180, "ScaleOutCooldown" : 60, "PredefinedMetricSpecification" : { "PredefinedMetricType" : "ECSServiceAverageMemoryUtilization" } } } } } }
YAML
--- Resources: ECSScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: '2' MinCapacity: '1' RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService' ServiceNamespace: ecs ScalableDimension: 'ecs:service:DesiredCount' ResourceId: !Join - / - - service - !Ref
myContainerCluster
- !GetAttmyService
.Name ServiceScalingPolicyCPU: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: !Sub ${AWS::StackName}-target-tracking-cpu70 PolicyType: TargetTrackingScaling ScalingTargetId: !Ref ECSScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 70.0 ScaleInCooldown: 180 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageCPUUtilization ServiceScalingPolicyMem: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: !Sub ${AWS::StackName}-target-tracking-mem90 PolicyType: TargetTrackingScaling ScalingTargetId: !Ref ECSScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 90.0 ScaleInCooldown: 180 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageMemoryUtilization
Im folgenden Beispiel wird eine Skalierungsrichtlinie zur Zielverfolgung mit der vordefinierten ALBRequestCountPerTarget
Metrik auf einen ECS-Service angewendet. Die Richtlinie wird verwendet, um dem ECS-Service Kapazität hinzuzufügen, wenn die Anforderungsanzahl pro Ziel (pro Minute) den Zielwert überschreitet. Da der Wert von DisableScaleIn
auf „true
“ festgelegt ist, entfernt die Richtlinie für die Ziel-Nachverfolgung keine Kapazität vom skalierbaren Ziel.
Sie verwendet die intrinsischen Funktionen Fn።Join und Fn::GetAtt, um die ResourceLabel
-Eigenschaft mit den logischen Namen der Ressourcen AWS::ElasticLoadBalancingV2::LoadBalancer
(myLoadBalancer
) und AWS::ElasticLoadBalancingV2::TargetGroup
(myTargetGroup
) zu erstellen, die in derselben Vorlage angegeben sind.
Die Eigenschaften MaxCapacity
und MinCapacity
des skalierbaren Ziels und die TargetValue
-Eigenschaft der Referenzparameterwerte der Skalierungsrichtlinie, die Sie beim Erstellen oder Aktualisieren eines Stacks an die Vorlage übergeben.
JSON
{ "Resources" : { "ECSScalableTarget" : { "Type" : "AWS::ApplicationAutoScaling::ScalableTarget", "Properties" : { "MaxCapacity" : { "Ref" : "MaxCount" }, "MinCapacity" : { "Ref" : "MinCount" }, "RoleARN" : { "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService" }, "ServiceNamespace" : "ecs", "ScalableDimension" : "ecs:service:DesiredCount", "ResourceId" : { "Fn::Join" : [ "/", [ "service", { "Ref" : "
myContainerCluster
" }, { "Fn::GetAtt" : [ "myService
", "Name" ] } ] ] } } }, "ServiceScalingPolicyALB" : { "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : "alb-requests-per-target-per-minute", "PolicyType" : "TargetTrackingScaling", "ScalingTargetId" : { "Ref" : "ECSScalableTarget" }, "TargetTrackingScalingPolicyConfiguration" : { "TargetValue" : { "Ref" : "ALBPolicyTargetValue" }, "ScaleInCooldown" : 180, "ScaleOutCooldown" : 30, "DisableScaleIn" : true, "PredefinedMetricSpecification" : { "PredefinedMetricType" : "ALBRequestCountPerTarget", "ResourceLabel" : { "Fn::Join" : [ "/", [ { "Fn::GetAtt" : [ "myLoadBalancer
", "LoadBalancerFullName" ] }, { "Fn::GetAtt" : [ "myTargetGroup
", "TargetGroupFullName" ] } ] ] } } } } } } }
YAML
--- Resources: ECSScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: !Ref MaxCount MinCapacity: !Ref MinCount RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService' ServiceNamespace: ecs ScalableDimension: 'ecs:service:DesiredCount' ResourceId: !Join - / - - service - !Ref
myContainerCluster
- !GetAttmyService
.Name ServiceScalingPolicyALB: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: alb-requests-per-target-per-minute PolicyType: TargetTrackingScaling ScalingTargetId: !Ref ECSScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: !Ref ALBPolicyTargetValue ScaleInCooldown: 180 ScaleOutCooldown: 30 DisableScaleIn: true PredefinedMetricSpecification: PredefinedMetricType: ALBRequestCountPerTarget ResourceLabel: !Join - '/' - - !GetAttmyLoadBalancer
.LoadBalancerFullName - !GetAttmyTargetGroup
.TargetGroupFullName
Deklarieren einer geplanten Aktion für eine Lambda-Funktion
Dieser Ausschnitt registriert die bereitgestellte Parallelität für einen Funktionsalias (AWS።Lambda።Alias), der BLUE
mit der AWS።ApplicationAutoScaling።ScalableTarget-Ressource benannt wurde. Erstellt auch eine geplante Aktion mit einem wiederkehrenden Zeitplan unter Verwendung eines Cron-Ausdrucks.
Es werden die intrinsischen Funktionen Fn::Join und Ref in der RoleARN
-Eigenschaft verwendet, um den ARN der servicegebundenen Rolle anzugeben. Sie verwendet die intrinsische Funktion Fn::Sub, um die ResourceId
-Eigenschaft mit dem logischen Namen der AWS::Lambda::Function
- oder AWS::Serverless::Function
-Ressource zu erstellen, die in derselben Vorlage angegeben ist.
Sie können keine bereitgestellte Gleichzeitigkeit für einen Alias zuweisen, der auf die nicht veröffentlichte Version verweist ($LATEST).
Weitere Informationen zum Erstellen einer AWS CloudFormation-Vorlage für Lambda-Ressourcen finden Sie im Blogbeitrag Planen von AWS Lambda Provisioned Concurrency für wiederkehrende Spitzenauslastung
JSON
{ "ScalableTarget" : { "Type" : "AWS::ApplicationAutoScaling::ScalableTarget", "Properties" : { "MaxCapacity" : 0, "MinCapacity" : 0, "RoleARN" : { "Fn::Join" : [ ":", [ "arn:aws:iam:", { "Ref" : "AWS::AccountId" }, "role/aws-service-role/lambda.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_LambdaConcurrency" ] ] }, "ServiceNamespace" : "lambda", "ScalableDimension" : "lambda:function:ProvisionedConcurrency", "ResourceId" : { "Fn::Sub" : "function:${
logicalName
}:BLUE" }, "ScheduledActions" : [ { "EndTime" : "2020-12-31T12:00:00.000Z", "ScalableTargetAction" : { "MaxCapacity" : "500", "MinCapacity" : "50" }, "ScheduledActionName" : "First", "Schedule" : "cron(0 18 * * ? *)" } ] } } }
YAML
ScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 0 MinCapacity: 0 RoleARN: !Join - ':' - - 'arn:aws:iam:' - !Ref 'AWS::AccountId' - role/aws-service-role/lambda.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_LambdaConcurrency ServiceNamespace: lambda ScalableDimension: lambda:function:ProvisionedConcurrency ResourceId: !Sub function:${
logicalName
}:BLUE ScheduledActions: - EndTime: '2020-12-31T12:00:00.000Z' ScalableTargetAction: MaxCapacity: '500' MinCapacity: '50' ScheduledActionName: First Schedule: 'cron(0 18 * * ? *)'
Deklarieren einer geplanten Aktion für eine Spot-Flotte
Dieser Ausschnitt zeigt, wie Sie eine geplante Aktion erstellen und diese mithilfe der Ressource AWS።ApplicationAutoScaling።ScalableTarget auf eine AWS።EC2።SpotFleet-Ressource anwenden. Sie verwendet die intrinsischen Funktionen Fn::Join und Ref, um die ResourceId
-Eigenschaft mit dem logischen Namen der AWS::EC2::SpotFleet
-Ressource zu erstellen, die in derselben Vorlage angegeben ist.
Die Spot-Flotten-Anfrage muss den Anfragetyp maintain
aufweisen. Auto Scaling wird für einmalige Anforderungen oder Spot-Blöcke nicht unterstützt.
JSON
{ "Resources" : { "SpotFleetScalableTarget" : { "Type" : "AWS::ApplicationAutoScaling::ScalableTarget", "Properties" : { "MaxCapacity" : 0, "MinCapacity" : 0, "RoleARN" : { "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ec2.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest" }, "ServiceNamespace" : "ec2", "ScalableDimension" : "ec2:spot-fleet-request:TargetCapacity", "ResourceId" : { "Fn::Join" : [ "/", [ "spot-fleet-request", { "Ref" : "
logicalName
" } ] ] }, "ScheduledActions" : [ { "EndTime" : "2020-12-31T12:00:00.000Z", "ScalableTargetAction" : { "MaxCapacity" : "20", "MinCapacity" : "5" }, "ScheduledActionName" : "First", "Schedule" : "cron(0 18 * * ? *)" } ] } } } }
YAML
--- Resources: SpotFleetScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 0 MinCapacity: 0 RoleARN: Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ec2.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest' ServiceNamespace: ec2 ScalableDimension: 'ec2:spot-fleet-request:TargetCapacity' ResourceId: !Join - / - - spot-fleet-request - !Ref
logicalName
ScheduledActions: - EndTime: '2020-12-31T12:00:00.000Z' ScalableTargetAction: MaxCapacity: '20' MinCapacity: '5' ScheduledActionName: First Schedule: 'cron(0 18 * * ? *)'