Auto Scaling von Vorlagenausschnitten - AWS CloudFormation

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.

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: !Ref mySimpleConfig 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.

  1. 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 und myPublicSubnet2.

  2. Die LaunchConfigurationName-Eigenschaft gibt eine AWS።AutoScaling። LaunchConfiguration-Ressource mit dem logischen Namen mySimpleConfig an.

  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" } ], "LaunchConfigurationName" : { "Ref" : "mySimpleConfig" }, "MinSize" : "1", "MaxSize" : "5", "HealthCheckGracePeriod" : 300, "MaxInstanceLifetime" : 2592000, "TargetGroupARNs" : [ { "Ref" : "myTargetGroup" } ] } }

YAML

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

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

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.

Wichtig

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.

Anmerkung

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 im AWS Database Blog.

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 - !GetAtt myService.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 - !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: !Join - '/' - - !GetAtt myLoadBalancer.LoadBalancerFullName - !GetAtt myTargetGroup.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).

Anmerkung

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 im AWS Compute Blog.

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.

Anmerkung

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 * * ? *)'