AWS::AutoScaling::ScalingPolicy - AWS CloudFormation

AWS::AutoScaling::ScalingPolicy

需要の変化に応じて、Auto Scaling グループがアプリケーションで使用できるインスタンスの数を変更できるように、Amazon EC2 Auto Scaling スケーリングポリシーを指定します。

既存のスケーリングポリシーを更新するには、既存のポリシー名を使用し、変更するプロパティを設定します。スケーリングポリシーの更新時にプロパティを指定しなかった場合、対応する値は変更されません。

ステップスケーリングポリシーまたは簡易スケーリングポリシーを作成する場合、Auto Scaling グループの CloudWatch メトリクスをモニタリングする CloudWatch アラームも作成する必要があります。CloudWatch アラームは 1 つのスケーリングポリシーにのみ関連付けることができます。

スケーリングポリシーを使用して 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

ScalingAdjustment プロパティが現在のキャパシティーの絶対数であるかパーセンテージであるかを指定します。有効な値は ChangeInCapacityExactCapacity、および PercentChangeInCapacity です。

ポリシータイプが StepScaling または SimpleScaling である場合にのみ有効です。詳細については、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

スケーリングアクティビティが完了してから、動的スケーリングアクティビティを開始できるようになるまでの時間 (秒)。このプロパティを指定しなかった場合は、グループのデフォルトのクールダウン期間が適用されます。

ポリシータイプが SimpleScaling である場合にのみ有効です。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「スケーリングクールダウン」を参照してください。

必須: いいえ

タイプ: 文字列

Update requires: No interruption

EstimatedInstanceWarmup

新たに起動されたインスタンスが CloudWatch メトリクスに反映されるまでの予測時間 (秒)。デフォルトでは、グループのデフォルトのクールダウン期間に指定された値が使用されます。

ポリシータイプが StepScaling または TargetTrackingScaling である場合にのみ有効です。

必須: いいえ

タイプ: 整数

Update requires: No interruption

MetricAggregationType

CloudWatch メトリクスの集計タイプ。有効な値は MinimumMaximum、および Average です。デフォルトでは、AWS CloudFormation は Average を指定します。

ポリシータイプが StepScaling である場合にのみ有効です。

必須: いいえ

タイプ: 文字列

最小: 1

最大: 32

パターン: [\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

MinAdjustmentMagnitude

パーセンテージでスケールするときにスケールする最小値。たとえば、Auto Scaling グループを 25% スケールアウトするステップスケーリングポリシーを作成し、MinAdjustmentMagnitude に 2 を指定したとします。グループに 4 つのインスタンスがあり、スケーリングポリシーが実行されると、4 の 25% で 1 になります。ただし、MinAdjustmentMagnitude に 2 を指定したため、Amazon EC2 Auto Scaling は 2 つのインスタンスでグループをスケールアウトします。

ポリシータイプが StepScaling または SimpleScaling で、調整タイプが PercentChangeInCapacity である場合にのみ有効です。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「スケーリング調整タイプ」を参照してください。

必須: いいえ

タイプ: 整数

Update requires: No interruption

PolicyType

ポリシータイプ。デフォルト値は SimpleScaling です。

使用できる値: SimpleScalingStepScalingTargetTrackingScaling

必須: いいえ

タイプ: 文字列

Update requires: No interruption

ScalingAdjustment

簡易スケーリングポリシーが超過アラームに応じて Auto Scaling グループをスケーリングする量。調整は、AdjustmentType プロパティで指定した値 (絶対数またはパーセンテージ) に基づきます。正の値の場合、現在のキャパシティーに追加され、負の値の場合、現在のキャパシティーから削除されます。正確な容量については、正の値を指定してください。

ポリシータイプに SimpleScaling を指定した場合は、このプロパティを指定する必要があります。(他のポリシータイプでは使用されません。)

必須: 条件付き

タイプ: 整数

Update requires: No interruption

StepAdjustments

超過アラームのサイズに基づいてスケールできるようになる調整セット。

ポリシータイプに StepScaling を指定した場合は、このプロパティを指定する必要があります。(他のポリシータイプでは使用されません。)

必須: 条件付き

タイプ: StepAdjustment のリスト

Update requires: No interruption

TargetTrackingConfiguration

ターゲットの追跡スケーリングポリシーの設定。

ポリシータイプに TargetTrackingScaling を指定した場合は、このプロパティを指定する必要があります。(他のポリシータイプでは使用されません。)

必須: 条件付き

タイプ: TargetTrackingConfiguration

Update requires: No interruption

戻り値

Ref

Ref 関数の引数として AWS::AutoScaling::ScalingPolicy タイプを指定した場合、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 グループのスケーリングポリシーを指定します。

ターゲット追跡スケーリングポリシー

次の例では、ASGAverageCPUUtilization および ALBRequestCountPerTarget メトリクスに基づいて 2 つのターゲット追跡スケーリングポリシーを持つ 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