AWS::ApplicationAutoScaling::ScalableTarget - AWS CloudFormation (original) (raw)

The AWS::ApplicationAutoScaling::ScalableTarget resource specifies a resource that Application Auto Scaling can scale, such as an AWS::DynamoDB::Table or AWS::ECS::Service resource.

For more information, see Getting started in the_Application Auto Scaling User Guide_.

Note

If the resource that you want Application Auto Scaling to scale is not yet created in your account, add a dependency on the resource when registering it as a scalable target using the DependsOn attribute.

Syntax

To declare this entity in your AWS CloudFormation template, use the following syntax:

JSON

{
  "Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
  "Properties" : {
      "MaxCapacity" : Integer,
      "MinCapacity" : Integer,
      "ResourceId" : String,
      "RoleARN" : String,
      "ScalableDimension" : String,
      "ScheduledActions" : [ ScheduledAction, ... ],
      "ServiceNamespace" : String,
      "SuspendedState" : SuspendedState
    }
}

Properties

MaxCapacity

The maximum value that you plan to scale out to. When a scaling policy is in effect, Application Auto Scaling can scale out (expand) as needed to the maximum capacity limit in response to changing demand.

Required: Yes

Type: Integer

Update requires: No interruption

MinCapacity

The minimum value that you plan to scale in to. When a scaling policy is in effect, Application Auto Scaling can scale in (contract) as needed to the minimum capacity limit in response to changing demand.

Required: Yes

Type: Integer

Update requires: No interruption

ResourceId

The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.

Required: Yes

Type: String

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

Minimum: 1

Maximum: 1600

Update requires: Replacement

RoleARN

Specify the Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that allows Application Auto Scaling to modify the scalable target on your behalf. This can be either an IAM service role that Application Auto Scaling can assume to make calls to other AWS resources on your behalf, or a service-linked role for the specified service. For more information, see How Application Auto Scaling works with IAM in the Application Auto Scaling User Guide.

To automatically create a service-linked role (recommended), specify the full ARN of the service-linked role in your stack template. To find the exact ARN of the service-linked role for your AWS or custom resource, see the Service-linked roles topic in the Application Auto Scaling User Guide. Look for the ARN in the table at the bottom of the page.

Required: No

Type: String

Update requires: No interruption

ScalableDimension

The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.

Required: Yes

Type: String

Allowed values: ecs🐕‍🦺DesiredCount | ec2:spot-fleet-request:TargetCapacity | elasticmapreduce:instancegroup:InstanceCount | appstream:fleet:DesiredCapacity | dynamodb:table:ReadCapacityUnits | dynamodb:table:WriteCapacityUnits | dynamodb:index:ReadCapacityUnits | dynamodb:index:WriteCapacityUnits | rds:cluster:ReadReplicaCount | sagemaker:variant:DesiredInstanceCount | custom-resource:ResourceType:Property | comprehend:document-classifier-endpoint:DesiredInferenceUnits | comprehend:entity-recognizer-endpoint:DesiredInferenceUnits | lambda:function:ProvisionedConcurrency | cassandra:table:ReadCapacityUnits | cassandra:table:WriteCapacityUnits | kafka:broker-storage:VolumeSize | elasticache:cache-cluster:Nodes | elasticache:replication-group:NodeGroups | elasticache:replication-group:Replicas | neptune:cluster:ReadReplicaCount | sagemaker:variant:DesiredProvisionedConcurrency | sagemaker:inference-component:DesiredCopyCount | workspaces:workspacespool:DesiredUserSessions

Update requires: Replacement

ScheduledActions

The scheduled actions for the scalable target. Duplicates aren't allowed.

Required: No

Type: Array of ScheduledAction

Update requires: No interruption

ServiceNamespace

The namespace of the AWS service that provides the resource, or acustom-resource.

Required: Yes

Type: String

Allowed values: ecs | elasticmapreduce | ec2 | appstream | dynamodb | rds | sagemaker | custom-resource | comprehend | lambda | cassandra | kafka | elasticache | neptune | workspaces

Update requires: Replacement

SuspendedState

An embedded object that contains attributes and attribute values that are used to suspend and resume automatic scaling. Setting the value of an attribute to true suspends the specified scaling activities. Setting it to false (default) resumes the specified scaling activities.

Suspension Outcomes

Required: No

Type: SuspendedState

Update requires: No interruption

Return values

Ref

When the logical ID of this resource is provided to the Ref intrinsic function, Ref returns the CloudFormation-generated ID of the resource. For example:service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH|ecs🐕‍🦺DesiredCount|ecs.

CloudFormation uses the following format to generate the ID:service/_resourceID_|_scalabledimension_|_servicenamespace_.

For more information about using the Ref function, see Ref.

Fn::GetAtt

The Fn::GetAtt intrinsic function returns a value for a specified attribute of this type. The following are the available attributes and sample return values.

For more information about using the Fn::GetAtt intrinsic function, see Fn::GetAtt.

Examples

Each scalable target has a service namespace, scalable dimension, and resource ID, as well as values for minimum and maximum capacity.

For more sample template snippets, see Configure Application Auto Scaling resources. This section also provides examples of scheduled actions.

Register a scalable target

The following example creates a scalable target for an AWS::Cassandra::Table resource. Application Auto Scaling can scale the write capacity throughput at a minimum of 1 capacity unit and a maximum of 20. To register a different resource supported by Application Auto Scaling, specify its namespace inServiceNamespace, its scalable dimension in ScalableDimension, its resource ID in ResourceId, and its service-linked role inRoleARN.

Note

The RoleArn property references a service-linked role that is created for you after you use Application Auto Scaling with the specified resource for the first time.

JSON

{
  "ScalableTarget":{
    "Type":"AWS::ApplicationAutoScaling::ScalableTarget",
    "Properties":{
      "MaxCapacity":20,
      "MinCapacity":1,
      "RoleARN":{
        "Fn::Sub":"arn:aws:iam::${AWS::AccountId}:role/aws-service-role/cassandra.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_CassandraTable"
      },
      "ServiceNamespace":"cassandra",
      "ScalableDimension":"cassandra:table:WriteCapacityUnits",
      "ResourceId":"keyspace/mykeyspace/table/mytable"
    }
  }
}

YAML

ScalableTarget:
  Type: AWS::ApplicationAutoScaling::ScalableTarget
  Properties:
    MaxCapacity: 20
    MinCapacity: 1
    RoleARN: 
      Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/cassandra.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_CassandraTable'
    ServiceNamespace: cassandra
    ScalableDimension: cassandra:table:WriteCapacityUnits
    ResourceId: keyspace/mykeyspace/table/mytable

See also