AWS::AutoScaling::ScalingPolicy - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS::AutoScaling::ScalingPolicy

指定 Amazon EC2 Auto Scaling 扩展策略,以便 Auto Scaling 组可以更改应用程序可用的实例数,用于响应变化的需求。

如果您创建了步进扩展策略或简单扩展策略,还必须创建一个用来监控 Auto Scaling 组的 CloudWatch 指标的 CloudWatch 警报。请注意,您只能将 CloudWatch 警报与一个扩展策略关联。

有关使用扩展策略自动扩展您的 Auto Scaling 组的更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的动态扩展

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::AutoScaling::ScalingPolicy", "Properties" : { "AdjustmentType" : String, "AutoScalingGroupName" : String, "Cooldown" : String, "EstimatedInstanceWarmup" : Integer, "MetricAggregationType" : String, "MinAdjustmentMagnitude" : Integer, "PolicyType" : String, "ScalingAdjustment" : Integer, "StepAdjustments" : [ StepAdjustment, ... ], "TargetTrackingConfiguration" : TargetTrackingConfiguration } }

属性

AdjustmentType

指定如何解释缩放调整。有效值为 ChangeInCapacityExactCapacityPercentChangeInCapacity

如果策略类型为 StepScalingSimpleScaling,则必需。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的扩展调整类型

必需:条件

类型:字符串

最低1

最高255

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

AutoScalingGroupName

您希望策略与其关联的 Auto Scaling 组的名称或 Amazon 资源名称 (ARN)。

必需:是

类型:字符串

最低1

最高255

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

Cooldown

策略冷却时间的持续时间,以秒为单位。在此处指定冷却时间时,它将覆盖为 Auto Scaling 组定义的默认冷却时间。

仅当策略类型为 SimpleScaling 时有效。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的 Amazon EC2 Auto Scaling 的扩展冷却时间

必需:否

类型:字符串

Update requires: No interruption

EstimatedInstanceWarmup

新启动的实例可影响 CloudWatch 指标的估计时间(以秒为单位)。如果未提供,则默认情况下使用 Auto Scaling 组的默认冷却时间中的值。

仅当策略类型为 TargetTrackingScalingStepScaling 时有效。

必需:否

类型:整数

Update requires: No interruption

MetricAggregationType

CloudWatch 指标的聚合类型。有效值为 MinimumMaximumAverage。如果聚合类型为 null,则该值将被视为 Average

仅当策略类型为 StepScaling 时有效。

必需:否

类型:字符串

最低1

最高32

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

MinAdjustmentMagnitude

调整类型为 PercentChangeInCapacity 时,要缩放的最小值。例如,假设您创建一个步进扩展策略以将 Auto Scaling 组扩展 25%,并且您将 MinAdjustmentMagnitude 指定为 2。如果该组包含 4 个实例并且执行了该扩展策略,4 的 25% 为 1。不过,由于您将 MinAdjustmentMagnitude 指定为 2,Amazon EC2 Auto Scaling 会将此组扩展 2 个实例。

仅当策略类型为 StepScalingSimpleScaling 时有效。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的扩展调整类型

注意

某些 Auto Scaling 组使用实例权重。在这种情况下,将 MinAdjustmentMagnitude 设置为至少与最大实例权重一样大的值。

必需:否

类型:整数

Update requires: No interruption

PolicyType

以下策略类型之一:

  • TargetTrackingScaling

  • StepScaling

  • SimpleScaling (默认值)

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的目标跟踪扩展策略以及步进和简单扩展策略

必需:条件

类型:字符串

Update requires: No interruption

ScalingAdjustment

要扩展的数量(基于指定的调整类型)。正值会为当前容量增加相应容量,负数则会从当前容量中删除相应容量。对于确切的容量,必须指定正值。

如果策略类型为 SimpleScaling,则必需。(不与任何其他策略类型一起使用。)

必需:条件

类型:整数

Update requires: No interruption

StepAdjustments

让您能够根据警报违例的规模进行扩展的一组调整设置。

如果策略类型为 StepScaling,则必需。(不与任何其他策略类型一起使用。)

必需:条件

类型StepAdjustment 的列表

Update requires: No interruption

TargetTrackingConfiguration

目标跟踪扩展策略。包括对预定义或自定义指标的支持。

可供使用的预定义指标如下:

  • ASGAverageCPUUtilization

  • ASGAverageNetworkIn

  • ASGAverageNetworkOut

  • ALBRequestCountPerTarget

如果为指标指定 ALBRequestCountPerTarget,则您必须使用 PredefinedMetricSpecification 指定 ResourceLabel 参数。

必需:条件

类型TargetTrackingConfiguration

Update requires: No interruption

返回值

Ref

如果将 AWS::AutoScaling::ScalingPolicy 类型指定为 Ref 函数的参数,AWS CloudFormation 会返回策略 Amazon 资源名称 (ARN)。例如:arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:ab12c4d5-a1b2-a1b2-a1b2-ab12c4d56789:autoScalingGroupName/myStack-AutoScalingGroup-AB12C4D5E6:policyName/myStack-myScalingPolicy-AB12C4D5E6

有关使用 Ref 函数的更多信息,请参阅 Ref

示例

下面的示例为 Auto Scaling 组指定扩展策略。

有关更多模板片段,请参阅 Auto scaling 模板片段

目标跟踪扩展策略

以下示例创建具有基于 ASGAverageCPUUtilizationALBRequestCountPerTarget 指标的两个目标跟踪扩展策略的 Auto Scaling 组。每个这些策略的属性包含一个 TargetValue 属性,引用来自同一模板的参数值。

JSON

{ "AWSTemplateFormatVersion":"2010-09-09", "Parameters":{ "AMI":{ "Type":"String" }, "Subnets":{ "Type":"CommaDelimitedList" }, "VPC":{ "Type":"String" }, "CPUPolicyTargetValue":{ "Type":"String" }, "ALBRequestCountTargetValue":{ "Type":"String" } }, "Resources":{ "myLoadBalancer":{ "Type":"AWS::ElasticLoadBalancingV2::LoadBalancer", "Properties":{ "Subnets":{ "Ref":"Subnets" } } }, "myLoadBalancerListener":{ "Type":"AWS::ElasticLoadBalancingV2::Listener", "Properties":{ "DefaultActions":[ { "TargetGroupArn":{ "Ref":"myTargetGroup" }, "Type":"forward" } ], "LoadBalancerArn":{ "Ref":"myLoadBalancer" }, "Port":80, "Protocol":"HTTP" } }, "myTargetGroup":{ "Type":"AWS::ElasticLoadBalancingV2::TargetGroup", "Properties":{ "Name":"myTargetGroup", "Port":80, "Protocol":"HTTP", "VpcId":{ "Ref":"VPC" } } }, "myLaunchConfig":{ "Type":"AWS::AutoScaling::LaunchConfiguration", "Properties":{ "ImageId":{ "Ref":"AMI" }, "InstanceType":"t2.large" } }, "myASG":{ "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "MaxSize":"2", "MinSize":"1", "VPCZoneIdentifier":{ "Ref":"Subnets" }, "LaunchConfigurationName":{ "Ref":"myLaunchConfig" }, "TargetGroupARNs":[ { "Ref":"myTargetGroup" } ] } }, "myCPUPolicy":{ "Type":"AWS::AutoScaling::ScalingPolicy", "Properties":{ "AutoScalingGroupName":{ "Ref":"myASG" }, "PolicyType":"TargetTrackingScaling", "TargetTrackingConfiguration":{ "PredefinedMetricSpecification":{ "PredefinedMetricType":"ASGAverageCPUUtilization" }, "TargetValue":{ "Ref":"CPUPolicyTargetValue" } } } }, "myALBRequestCountPolicy":{ "Type":"AWS::AutoScaling::ScalingPolicy", "Properties":{ "AutoScalingGroupName":{ "Ref":"myASG" }, "PolicyType":"TargetTrackingScaling", "TargetTrackingConfiguration":{ "PredefinedMetricSpecification":{ "PredefinedMetricType":"ALBRequestCountPerTarget", "ResourceLabel":{ "Fn::Join":[ "/", [ { "Fn::GetAtt":[ "myLoadBalancer", "LoadBalancerFullName" ] }, { "Fn::GetAtt":[ "myTargetGroup", "TargetGroupFullName" ] } ] ] } }, "TargetValue":{ "Ref":"ALBRequestCountTargetValue" } } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Parameters: AMI: Type: String Subnets: Type: CommaDelimitedList VPC: Type: String CPUPolicyTargetValue: Type: String ALBRequestCountTargetValue: Type: String Resources: myLoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Subnets: !Ref Subnets myLoadBalancerListener: Type: "AWS::ElasticLoadBalancingV2::Listener" Properties: DefaultActions: - TargetGroupArn: !Ref myTargetGroup Type: forward LoadBalancerArn: !Ref myLoadBalancer Port: 80 Protocol: HTTP myTargetGroup: Type: "AWS::ElasticLoadBalancingV2::TargetGroup" Properties: Name: myTargetGroup Port: 80 Protocol: HTTP VpcId: !Ref VPC myLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: !Ref AMI InstanceType: t2.large myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: MaxSize: '2' MinSize: '1' VPCZoneIdentifier: !Ref Subnets LaunchConfigurationName: !Ref myLaunchConfig TargetGroupARNs: - !Ref myTargetGroup myCPUPolicy: Type: AWS::AutoScaling::ScalingPolicy Properties: AutoScalingGroupName: !Ref myASG PolicyType: TargetTrackingScaling TargetTrackingConfiguration: PredefinedMetricSpecification: PredefinedMetricType: ASGAverageCPUUtilization TargetValue: !Ref CPUPolicyTargetValue myALBRequestCountPolicy: Type: AWS::AutoScaling::ScalingPolicy Properties: AutoScalingGroupName: !Ref myASG PolicyType: TargetTrackingScaling TargetTrackingConfiguration: PredefinedMetricSpecification: PredefinedMetricType: ALBRequestCountPerTarget ResourceLabel: !Join - '/' - - !GetAtt myLoadBalancer.LoadBalancerFullName - !GetAtt myTargetGroup.TargetGroupFullName TargetValue: !Ref ALBRequestCountTargetValue

步进扩展策略

以下示例策略创建具有 StepScaling 策略类型和 ChangeInCapacity 调整类型的扩展策略。触发关联警报时,策略会根据以下步进调整(假设 CloudWatch 警报阈值为 70%)增加 Auto Scaling 组的容量:

  • 当指标的值大于或等于 70% 但小于 85% 时,将容量增加 1

  • 当指标的值大于或等于 85% 但小于 95% 时,将容量增加 2

  • 当指标值大于或等于 95% 时,将容量增加 3

JSON

{ "Resources":{ "ASGScalingPolicyHigh":{ "Type":"AWS::AutoScaling::ScalingPolicy", "Properties":{ "AdjustmentType":"ChangeInCapacity", "AutoScalingGroupName":{ "Ref":"myASG" }, "PolicyType":"StepScaling", "MetricAggregationType":"Average", "EstimatedInstanceWarmup":60, "StepAdjustments":[ { "MetricIntervalLowerBound":0, "MetricIntervalUpperBound":15, "ScalingAdjustment":1 }, { "MetricIntervalLowerBound":15, "MetricIntervalUpperBound":25, "ScalingAdjustment":2 }, { "MetricIntervalLowerBound":25, "ScalingAdjustment":3 } ] } } } }

YAML

--- Resources: ASGScalingPolicyHigh: Type: AWS::AutoScaling::ScalingPolicy Properties: AdjustmentType: "ChangeInCapacity" AutoScalingGroupName: Ref: "myASG" PolicyType: "StepScaling" MetricAggregationType: "Average" EstimatedInstanceWarmup: 60 StepAdjustments: - MetricIntervalLowerBound: 0 MetricIntervalUpperBound: 15 ScalingAdjustment: 1 - MetricIntervalLowerBound: 15 MetricIntervalUpperBound: 25 ScalingAdjustment: 2 - MetricIntervalLowerBound: 25 ScalingAdjustment: 3

简单扩展策略

以下示例策略创建具有 SimpleScaling 策略类型和 ChangeInCapacity 调整类型的扩展策略。策略在触发时将容量增加 1。

JSON

{ "Resources":{ "ASGScalingPolicyHigh":{ "Type":"AWS::AutoScaling::ScalingPolicy", "Properties":{ "AdjustmentType":"ChangeInCapacity", "PolicyType":"SimpleScaling", "Cooldown":"300", "AutoScalingGroupName":{ "Ref":"myASG" }, "ScalingAdjustment":1 } } } }

YAML

--- Resources: ASGScalingPolicyHigh: Type: AWS::AutoScaling::ScalingPolicy Properties: AdjustmentType: "ChangeInCapacity" PolicyType: "SimpleScaling" Cooldown: "300" AutoScalingGroupName: Ref: "myASG" ScalingAdjustment: 1