AWS::ApplicationAutoScaling::ScalingPolicy
The AWS::ApplicationAutoScaling::ScalingPolicy resource defines a scaling
policy that Application Auto Scaling uses to adjust your application resources.
Syntax
To declare this entity in your AWS CloudFormation template, use the following syntax:
JSON
{ "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" :String, "PolicyType" :String, "ResourceId" :String, "ScalableDimension" :String, "ScalingTargetId" :String, "ServiceNamespace" :String, "StepScalingPolicyConfiguration" : StepScalingPolicyConfiguration, "TargetTrackingScalingPolicyConfiguration" : TargetTrackingScalingPolicyConfiguration } }
YAML
Type : "AWS::ApplicationAutoScaling::ScalingPolicy" Properties: PolicyName:StringPolicyType:StringResourceId:StringScalableDimension:StringScalingTargetId:StringServiceNamespace:StringStepScalingPolicyConfiguration: StepScalingPolicyConfiguration TargetTrackingScalingPolicyConfiguration: TargetTrackingScalingPolicyConfiguration
Properties
PolicyName-
A name for the scaling policy.
Required: Yes
Type: String
Update requires: Replacement
PolicyType-
An Application Auto Scaling policy type.
Note
For DynamoDB, only
TargetTrackingScalingis supported. For Amazon ECS, Spot Fleet, and Amazon RDS, bothStepScalingandTargetTrackingScalingare supported. For any other service, onlyStepScalingis supported.Required: Yes
Type: String
Update requires: No interruption
ResourceId-
The unique resource identifier for the scalable target that this scaling policy applies to. For more information, see the
ResourceIdparameter for the PutScalingPolicy action in the Application Auto Scaling API Reference.Required: Conditional. You must specify either the
ScalingTargetIdproperty or theResourceId,ScalableDimension, andServiceNamespaceproperties. If you specify theResourceId,ScalableDimension, andServiceNamespaceproperties, don't specify theScalingTargetIdproperty.Type: String
Update requires: Replacement
ScalableDimension-
The scalable dimension of the scalable target that this scaling policy applies to. The scalable dimension contains the service namespace, resource type, and scaling property, such as ecs:service:DesiredCount for the desired task count of an Amazon ECS service.
Required: Conditional. You must specify either the
ScalingTargetIdproperty or theResourceId,ScalableDimension, andServiceNamespaceproperties. If you specify theResourceId,ScalableDimension, andServiceNamespaceproperties, don't specify theScalingTargetIdproperty.Type: String
Update requires: Replacement
ServiceNamespace-
The AWS service namespace of the scalable target that this scaling policy applies to. For a list of service namespaces, see AWS Service Namespaces in the AWS General Reference.
Required: Conditional. You must specify either the
ScalingTargetIdproperty or theResourceId,ScalableDimension, andServiceNamespaceproperties. If you specify theResourceId,ScalableDimension, andServiceNamespaceproperties, don't specify theScalingTargetIdproperty.Type: String
Update requires: Replacement
ScalingTargetId-
The AWS CloudFormation-generated ID of an Application Auto Scaling scalable target. For more information about the ID, see the Return Value section of the AWS::ApplicationAutoScaling::ScalableTarget resource.
Required: Conditional. You must specify either the
ScalingTargetIdproperty or theResourceId,ScalableDimension, andServiceNamespaceproperties. If you specify this property, don't specify theResourceId,ScalableDimension, andServiceNamespaceproperties.Type: String
Update requires: Replacement
StepScalingPolicyConfiguration-
A step policy that configures when Application Auto Scaling scales resources up or down, and by how much.
Required: No
Type: Application Auto Scaling ScalingPolicy StepScalingPolicyConfiguration
Update requires: No interruption
TargetTrackingScalingPolicyConfiguration-
Configures a target tracking scaling policy.
This parameter is required if you are creating a new policy and the policy type is
TargetTrackingScaling.Required: No
Type: Application Auto Scaling ScalingPolicy TargetTrackingScalingPolicyConfiguration
Update requires: No interruption
Return Value
Ref
When the logical ID of this resource is provided to the Ref intrinsic function, Ref returns the Application Auto Scaling scaling policy Amazon Resource Name (ARN),
such as arn:aws:autoscaling:us-east-2:123456789012:scalingPolicy:12ab3c4d-56789-0ef1-2345-6ghi7jk8lm90:resource/ecs/service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH:policyName/MyStepPolicy.
For more information about using the Ref function, see Ref.
Examples
Application Auto Scaling Scaling Policy with a Step Policy Configuration
The following example creates an Application Auto Scaling scaling policy with a step policy configuration. When an associated alarm is triggered, the policy increases the desired count of the scalable target by 200%, with a cooldown period of 60 seconds.
JSON
"scalingPolicy" : { "Type" : "AWS::ApplicationAutoScaling::ScalingPolicy", "Properties" : { "PolicyName" : "AStepPolicy", "PolicyType" : "StepScaling", "ScalingTargetId" : {"Ref": "scalableTarget"}, "StepScalingPolicyConfiguration" : { "AdjustmentType" : "PercentChangeInCapacity", "Cooldown" : 60, "MetricAggregationType" : "Average", "StepAdjustments" : [{ "MetricIntervalLowerBound" : 0, "ScalingAdjustment" : 200 }] } } }
YAML
scalingPolicy: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: AStepPolicy PolicyType: StepScaling ScalingTargetId: Ref: scalableTarget StepScalingPolicyConfiguration: AdjustmentType: PercentChangeInCapacity Cooldown: 60 MetricAggregationType: Average StepAdjustments: - MetricIntervalLowerBound: 0 ScalingAdjustment: 200
Application Auto Scaling Scaling Policy with an Amazon DynamoDB Table
This example sets up Application Auto Scaling for a AWS::DynamoDB::Table resource.
The template defines a TargetTrackingScaling scaling policy that scales up the WriteCapacityUnits throughput for the table.
JSON
{ "Resources": { "DDBTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "AttributeDefinitions": [ { "AttributeName": "ArtistId", "AttributeType": "S" }, { "AttributeName": "Concert", "AttributeType": "S" }, { "AttributeName": "TicketSales", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "ArtistId", "KeyType": "HASH" }, { "AttributeName": "Concert", "KeyType": "RANGE" } ], "GlobalSecondaryIndexes": [ { "IndexName": "GSI", "KeySchema": [ { "AttributeName": "TicketSales", "KeyType": "HASH" } ], "Projection": { "ProjectionType": "KEYS_ONLY" }, "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 5 } } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 5 } } }, "WriteCapacityScalableTarget": { "Type": "AWS::ApplicationAutoScaling::ScalableTarget", "Properties": { "MaxCapacity": 15, "MinCapacity": 5, "ResourceId": { "Fn::Join": [ "/", [ "table", { "Ref": "DDBTable" } ] ] }, "RoleARN": { "Fn::GetAtt": ["ScalingRole", "Arn"] }, "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "ServiceNamespace": "dynamodb" } }, "ScalingRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "application-autoscaling.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/", "Policies": [ { "PolicyName": "root", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:UpdateTable", "cloudwatch:PutMetricAlarm", "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricStatistics", "cloudwatch:SetAlarmState", "cloudwatch:DeleteAlarms" ], "Resource": "*" } ] } } ] } }, "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: DDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: "ArtistId" AttributeType: "S" - AttributeName: "Concert" AttributeType: "S" - AttributeName: "TicketSales" AttributeType: "S" KeySchema: - AttributeName: "ArtistId" KeyType: "HASH" - AttributeName: "Concert" KeyType: "RANGE" GlobalSecondaryIndexes: - IndexName: "GSI" KeySchema: - AttributeName: "TicketSales" KeyType: "HASH" Projection: ProjectionType: "KEYS_ONLY" ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 WriteCapacityScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 15 MinCapacity: 5 ResourceId: !Join - / - - table - !Ref DDBTable RoleARN: !GetAtt ScalingRole.Arn ScalableDimension: dynamodb:table:WriteCapacityUnits ServiceNamespace: dynamodb ScalingRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - application-autoscaling.amazonaws.com Action: - "sts:AssumeRole" Path: "/" Policies: - PolicyName: "root" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: - "dynamodb:DescribeTable" - "dynamodb:UpdateTable" - "cloudwatch:PutMetricAlarm" - "cloudwatch:DescribeAlarms" - "cloudwatch:GetMetricStatistics" - "cloudwatch:SetAlarmState" - "cloudwatch:DeleteAlarms" Resource: "*" WriteScalingPolicy: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: WriteAutoScalingPolicy PolicyType: TargetTrackingScaling ScalingTargetId: !Ref WriteCapacityScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: 50.0 ScaleInCooldown: 60 ScaleOutCooldown: 60 PredefinedMetricSpecification: PredefinedMetricType: DynamoDBWriteCapacityUtilization
