AWS::ApplicationAutoScaling::ScalingPolicy - AWS CloudFormation

AWS::ApplicationAutoScaling::ScalingPolicy

AWS::ApplicationAutoScaling::ScalingPolicy リソースは、アプリケーションリソースを調整するためにアプリケーションの Auto Scaling が使用するスケーリングポリシーを定義します。

詳細については、Application Auto Scaling API リファレンスの「PutScalingPolicy」を参照してください。スケーリングポリシーの詳細については、「Application Auto Scaling ユーザーガイド」を参照してください。

特定のリソースをスケーリングするための入門演習については、Application Auto Scaling ユーザーガイドの「はじめに」を参照してください。

構文

AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。

JSON

{ "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : String, "PolicyType" : String, "ResourceId" : String, "ScalableDimension" : String, "ScalingTargetId" : String, "ServiceNamespace" : String, "StepScalingPolicyConfiguration" : StepScalingPolicyConfiguration, "TargetTrackingScalingPolicyConfiguration" : TargetTrackingScalingPolicyConfiguration } }

プロパティ

PolicyName

スケーリングポリシーの名前。

必須: はい

タイプ: 文字列

最小: 1

最大: 256

パターン: \p{Print}+

Update requires: Replacement

PolicyType

アプリケーションの Auto Scaling ポリシータイプ。

以下のポリシータイプがサポートされています。

TargetTrackingScaling - Amazon EMR ではサポートされていません。

StepScaling - DynamoDB、Comprehend、または Lambda ではサポートされません。

必須: はい

タイプ: 文字列

Update requires: No interruption

ResourceId

このスケーリングポリシーが適用されるスケーラブルなターゲットの一意のターゲットリソース識別子。有効な値については、Application Auto Scaling API リファレンスの「PutScalingPolicyResourceId パラメータ」を参照してください。

ResourceIdScalableDimension、やServiceNamespace、または ScalingTargetId プロパティのいずれかを指定する必要があります。両方を指定することはできません。

必須: 条件付き

タイプ: 文字列

Update requires: Replacement

ScalableDimension

このスケーリングポリシーを適用するためのスケーラブルなターゲットのスケーラブルなディメンションです。スケーラブルなディメンションは、Amazon ECS サービスの希望するタスクカウントの ecs:service:DesiredCount などのサービス名前空間、リソースタイプ、スケーリングなプロパティを含みます。有効な値については、Application Auto Scaling API リファレンスの「PutScalingPolicy の ScalableDimension パラメータ」を参照してください。

ResourceIdScalableDimension、やServiceNamespace、または ScalingTargetId プロパティのいずれかを指定する必要があります。両方を指定することはできません。

必須: 条件付き

タイプ: 文字列

Update requires: Replacement

ScalingTargetId

Application アプリケーションの Auto Scaling のスケーラブルターゲットの AWS CloudFormation により生成された ID。IDの詳細については、AWS::ApplicationAutoScaling::ScalableTarget リソースの戻り値セクションを参照してください。

ScalingTargetId プロパティ、または ResourceIdScalableDimension、そして ServiceNamespace プロパティのいずれかを指定する必要があります。両方を指定することはできません。

必須: 条件付き

タイプ: 文字列

Update requires: Replacement

ServiceNamespace

リソースまたは独自のアプリケーションまたはサービスによって提供されるリソースの custom-resource を提供する AWS サービスの名前空間。有効な値については、Application Auto Scaling API リファレンスの「PutScalingPolicyServiceNamespace パラメータ」を参照してください。

ResourceIdScalableDimension、やServiceNamespace、または ScalingTargetId プロパティのいずれかを指定する必要があります。両方を指定することはできません。

必須: 条件付き

タイプ: 文字列

Update requires: Replacement

StepScalingPolicyConfiguration

ステップスケーリングポリシー。

必須: いいえ

タイプ: StepScalingPolicyConfiguration

Update requires: No interruption

TargetTrackingScalingPolicyConfiguration

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

必須: いいえ

タイプ: TargetTrackingScalingPolicyConfiguration

Update requires: No interruption

戻り値

参照番号

このリソースの論理 ID が Ref 組み込み関数に提供されると、Ref によりアプリケーションの Auto Scaling スケーリングポリシー Amazon リソースネーム (ARN) が返されます。例: arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:12ab3c4d-56789-0ef1-2345-6ghi7jk8lm90:resource/ecs/service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH:policyName/MyStepPolicy

Ref 関数の使用方法の詳細については、「Ref」を参照してください。

次の例では、Application Auto Scaling に登録されているスケーラブルターゲットのスケーリングポリシーを作成します。詳細については、Application Auto Scaling API リファレンスの「PutScalingPolicy」を参照してください。

Amazon DynamoDB テーブルにメトリクス仕様が事前定義されたターゲット追跡スケーリングポリシー

この例では、DynamoDB テーブル (AWS:: DynamoDB:: Table) をスケーラブルなターゲットとして登録し、TargetTrackingScaling ポリシータイプでスケーリングポリシーを作成します。スケーリングポリシーは、書き込み容量使用率のメトリクスに基づいて、ターゲット使用率を 50% に維持するように、テーブルの書き込み容量のスループットをスケールします。

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":"DDBTable" } ] ] } } }, "WriteScalingPolicy":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":"WriteAutoScalingPolicy", "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 DDBTable WriteScalingPolicy: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: WriteAutoScalingPolicy PolicyType: TargetTrackingScaling ScalingTargetId: !Ref WriteCapacityScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 50.0 ScaleInCooldown: 60 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: DynamoDBWriteCapacityUtilization

ECS サービスのターゲット追跡スケーリングポリシー

次の例では、ECS サービス (AWS:: ECS:: Service) をスケーラブルなターゲットとして登録し、TargetTrackingScaling ポリシータイプで 2 つのスケーリングポリシーを作成します。これらのポリシーは、サービスの平均 CPU およびメモリ使用量に基づいて ECS サービスをスケールするために使用されます。

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":"cluster" }, { "Fn::GetAtt":[ "service", "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 cluster - !GetAtt service.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

ECS サービスのスケールアウトのみのターゲット追跡スケーリングポリシー

次の例では、ALBRequestCountPerTarget メトリクスタイプのターゲット追跡スケーリングポリシーを、デフォルトのクラスターで web-app という ECS サービスに適用します。このポリシーは、ターゲットあたりのリクエストカウントがターゲット値を超えた場合に ECS サービスに容量を追加するために使用されます。DisableScaleIn の値が true に設定されているため、ターゲット追跡ポリシーはスケーラブルなターゲットから容量を削除しません。

JSON

{ "Resources":{ "ServiceScalingPolicyALB":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":"alb-scale-out-target-tracking-scaling-policy", "PolicyType":"TargetTrackingScaling", "ServiceNamespace":"ecs", "ScalableDimension":"ecs:service:DesiredCount", "ResourceId":"service/default/web-app", "TargetTrackingScalingPolicyConfiguration":{ "TargetValue":1000.0, "ScaleInCooldown":60, "ScaleOutCooldown":60, "DisableScaleIn":true, "PredefinedMetricSpecification":{ "PredefinedMetricType":"ALBRequestCountPerTarget", "ResourceLabel": "app/EC2Co-EcsEl-1TKLTMITMM0EO/f37c06a68c1748aa/targetgroup/EC2Co-Defau-LDNM7Q3ZH1ZN/6d4ea56ca2d6a18d" } } } } } }

YAML

--- Resources: ServiceScalingPolicyALB: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: alb-scale-out-target-tracking-scaling-policy PolicyType: TargetTrackingScaling ServiceNamespace: ecs ScalableDimension: ecs:service:DesiredCount ResourceId: service/default/web-app TargetTrackingScalingPolicyConfiguration: TargetValue: 1000.0 ScaleInCooldown: 60 ScaleOutCooldown: 60 DisableScaleIn: true PredefinedMetricSpecification: PredefinedMetricType: ALBRequestCountPerTarget ResourceLabel: app/EC2Co-EcsEl-1TKLTMITMM0EO/f37c06a68c1748aa/targetgroup/EC2Co-Defau-LDNM7Q3ZH1ZN/6d4ea56ca2d6a18d

スポットフリートのスケールアウトのみのステップスケーリングポリシー

次の例では、スポットフリート (AWS:: EC2:: SpotFleet) をスケーラブルなターゲットとして登録し、スケジュールされたアクションを作成し、スケーリングポリシーを作成します。Fn::JoinRef の組み込み関数を使用して ResourceId プロパティを構築します。

これは、StepScaling ポリシータイプと ChangeInCapacity 調整タイプのスケーリングポリシーを作成します。関連付けられたアラームがトリガーされると、ポリシーは次のステップ調整 (CloudWatch アラームのしきい値を 70% と想定) に基づいてスケーラブルなターゲットの容量を増やします。

  • メトリクスの値が 70 パーセント以上、85 パーセント未満の場合は容量を 1 増やします。

  • メトリクスの値が 85 パーセント以上、95 パーセント未満の場合は容量を 2 増やします。

  • メトリクスの値が 95 パーセント以上の場合は容量を 3 増やします。

JSON

{ "Resources":{ "SpotFleetScalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":2, "MinCapacity":1, "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":"ECSSpotFleet" } ] ] }, "ScheduledActions":[ { "EndTime":"2019-12-31T12:00:00.000Z", "ScalableTargetAction":{ "MaxCapacity":"20", "MinCapacity":"5" }, "ScheduledActionName":"First", "StartTime":"2019-12-25T12:00:00.000Z", "Schedule":"cron(0 18 * * ? *)" } ] } }, "SpotFleetPolicyHigh":{ "Type":"AWS::ApplicationAutoScaling::ScalingPolicy", "Properties":{ "PolicyName":"SpotFleetPolicyHigh", "PolicyType":"StepScaling", "ScalingTargetId":{ "Ref":"SpotFleetScalableTarget" }, "StepScalingPolicyConfiguration":{ "AdjustmentType":"ChangeInCapacity", "Cooldown":600, "MetricAggregationType":"Average", "StepAdjustments":[ { "MetricIntervalLowerBound":0, "MetricIntervalUpperBound":15, "ScalingAdjustment":1 }, { "MetricIntervalLowerBound":15, "MetricIntervalUpperBound":25, "ScalingAdjustment":2 }, { "MetricIntervalLowerBound":25, "ScalingAdjustment":3 } ] } } } } }

YAML

--- Resources: SpotFleetScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 2 MinCapacity: 1 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 ECSSpotFleet ScheduledActions: - EndTime: '2019-12-31T12:00:00.000Z' ScalableTargetAction: MaxCapacity: '20' MinCapacity: '5' ScheduledActionName: First StartTime: '2019-12-25T12:00:00.000Z' Schedule: 'cron(0 18 * * ? *)' SpotFleetPolicyHigh: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: SpotFleetPolicyHigh PolicyType: StepScaling ScalingTargetId: Ref: SpotFleetScalableTarget StepScalingPolicyConfiguration: AdjustmentType: ChangeInCapacity Cooldown: 600 MetricAggregationType: Average StepAdjustments: - MetricIntervalLowerBound: 0 MetricIntervalUpperBound: 15 ScalingAdjustment: 1 - MetricIntervalLowerBound: 15 MetricIntervalUpperBound: 25 ScalingAdjustment: 2 - MetricIntervalLowerBound: 25 ScalingAdjustment: 3

以下の資料も参照してください。