AWS CloudFormation
ユーザーガイド (API バージョン 2010-05-15)

AWS::ApplicationAutoScaling::ScalableTarget

AWS::ApplicationAutoScaling::ScalableTargetリソースは、アプリケーションの Auto Scaling がスケーリングできるリソースを指定します。

詳細については、Application Auto Scaling API リファレンスの「RegisterScalableTarget」を参照してください。

構文

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

JSON

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

YAML

Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: Integer MinCapacity: Integer ResourceId: String RoleARN: String ScalableDimension: String ScheduledActions: - ScheduledAction ServiceNamespace: String

プロパティ

MaxCapacity

スケールアウトイベントに応じてスケーリングする最大値。

必須: はい

タイプ: 整数

Update requires: No interruption

MinCapacity

スケールインイベントに応じてスケーリングする最小値。

必須: はい

タイプ: 整数

Update requires: No interruption

ResourceId

このスケーラブルなターゲットに関連付けるリソース識別子。この文字列は、リソースタイプと一意の識別子で構成されます。有効な値については、Application Auto Scaling API リファレンスの「RegisterScalableTargetResourceId パラメータ」を参照してください。

必須: はい

タイプ: 文字列

Update requires: Replacement

RoleARN

ユーザーに代わってアプリケーションの Auto Scaling がスケーラブルなターゲットを修正することを許可する AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN)。

必須: はい

タイプ: 文字列

Update requires: No interruption

ScalableDimension

スケーラブルなターゲットと関連付けられているスケーラブルなディメンション。Amazon ECS サービスの目的のタスク数に関して、ecs:service:DesiredCount などのサービス名前空間、リソースタイプ、スケーリングプロパティを指定します。有効な値については、Application Auto Scaling API リファレンスの「RegisterScalableTargetScalableDimension パラメータ」を参照してください。

必須: はい

タイプ: 文字列

Update requires: Replacement

ScheduledActions

スケーラブルなターゲットのスケジュールされたアクション。重複は許可されていません。

必須: いいえ

タイプ: ScheduledAction のリスト

Update requires: No interruption

ServiceNamespace

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

必須: はい

タイプ: 文字列

Update requires: Replacement

戻り値

参照番号

このリソースの論理 ID が Ref 組み込み関数に提供されると、Ref によりリソースの AWS CloudFormation により生成された ID が返されます。例: service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH|ecs:service:DesiredCount|ecs

AWS CloudFormation は次の形式を使用して IDを生成します: service/resource_ID|scalable_dimension|service_namespace

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

スケーラブルターゲットごとに、リソース ID、スケーラブルなディメンション、名前空間、および最小容量と最大容量の値があります。詳細については、Application Auto Scaling API リファレンスの「RegisterScalableTarget」を参照してください。

スケーラブルなターゲットを登録する

次の例では、AWS::ECS::Service のためのスケーラブルなターゲットを作成します。Application Auto Scaling はタスクの数を最小 1 つ、最大 2 つに拡張します。

JSON

{ "scalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":2, "MinCapacity":1, "ResourceId":"service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH", "RoleARN" : {"Fn::GetAtt" : ["ApplicationAutoScalingRole", "Arn"] }, "ScalableDimension":"ecs:service:DesiredCount", "ServiceNamespace":"ecs" } } }

YAML

scalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 2 MinCapacity: 1 ResourceId: service/ecsStack-MyECSCluster-AB12CDE3F4GH/ecsStack-MyECSService-AB12CDE3F4GH RoleARN: !GetAtt [ ApplicationAutoScalingRole, Arn ] ScalableDimension: ecs:service:DesiredCount ServiceNamespace: ecs

関数を使用してリソース ID を構築する

次の例では、Fn::Join および Ref 組み込み関数を使用して、スケーリングターゲットのResourceId プロパティを構築します。

JSON

{ "SpotFleetScalingTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":2, "MinCapacity":1, "ResourceId":{ "Fn::Join":[ "/", [ "spot-fleet-request", { "Ref":"ECSSpotFleet" } ] ] }, "RoleARN":{ "Fn::GetAtt":[ "AutoScalingRole", "Arn" ] }, "ScalableDimension":"ec2:spot-fleet-request:TargetCapacity", "ServiceNamespace":"ec2" } } }

YAML

SpotFleetScalingTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 2 MinCapacity: 1 ResourceId: !Join - / - - spot-fleet-request - !Ref ECSSpotFleet RoleARN: !GetAtt - AutoScalingRole - Arn ScalableDimension: 'ec2:spot-fleet-request:TargetCapacity' ServiceNamespace: ec2

Amazon DynamoDB ターゲットを持つ Application Auto Scaling Scalable Target

この例では、AWS::DynamoDB::Table をスケーラブルなターゲットとして登録します。ここでは、テーブル向けに WriteCapacityUnits スループットをスケールアップする TargetTrackingScaling スケーリングポリシーを定義します。

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

スケジュールに基づくアクション

次の例では、スケーラブルなターゲットの ScheduledAction を作成します。

JSON

{ "AWSTemplateFormatVersion":"2018-09-09", "Description":"Creating ECS service", "Parameters":{ "AppName":{ "Type":"String", "Description":"Name of app requiring ELB exposure", "Default":"simple-app" }, "AppContainerPort":{ "Type":"Number", "Description":"Container port of app requiring ELB exposure", "Default":"80" }, "AppHostPort":{ "Type":"Number", "Description":"Host port of app requiring ELB exposure", "Default":"80" } }, "Resources":{ "scalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "ResourceId":{ "Fn::Join":[ "/", [ "service", { "Ref":"cluster" }, { "Fn::GetAtt":[ "service", "Name" ] } ] ] }, "ServiceNamespace":"ecs", "ScalableDimension":"ecs:service:DesiredCount", "RoleARN":{ "Fn::GetAtt":[ "scalingRole", "Arn" ] }, "MaxCapacity":"2", "MinCapacity":"1", "ScheduledActions":[ { "EndTime":"2018-12-04T22:14:41.951Z", "ScalableTargetAction":{ "MaxCapacity":"2", "MinCapacity":"1" }, "ScheduledActionName":"First", "StartTime":"2018-11-28T22:14:41.951Z", "Schedule":"cron(0 12 ? * MON *)" } ] } }, "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":"*", "Resource":"*" } ] } } ] } }, "cluster":{ "Type":"AWS::ECS::Cluster" }, "taskdefinition":{ "Type":"AWS::ECS::TaskDefinition", "Properties":{ "ContainerDefinitions":[ { "Name":{ "Ref":"AppName" }, "MountPoints":[ { "SourceVolume":"my-vol", "ContainerPath":"/var/www/my-vol" } ], "Image":"amazon/amazon-ecs-sample", "Cpu":"10", "PortMappings":[ { "ContainerPort":{ "Ref":"AppContainerPort" }, "HostPort":{ "Ref":"AppHostPort" } } ], "EntryPoint":[ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "Memory":"500", "Essential":"true" }, { "Name":"busybox", "Image":"busybox", "Cpu":"10", "EntryPoint":[ "sh", "-c" ], "Memory":"500", "Command":[ "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" ], "Essential":"false", "VolumesFrom":[ { "SourceContainer":{ "Ref":"AppName" } } ] } ], "Volumes":[ { "Host":{ "SourcePath":"/var/lib/docker/vfs/dir/" }, "Name":"my-vol" } ] } }, "service":{ "Type":"AWS::ECS::Service", "Properties":{ "Cluster":{ "Ref":"cluster" }, "DesiredCount":0, "TaskDefinition":{ "Ref":"taskdefinition" } } } }, "Outputs":{ "resourceId":{ "Description":"ResourceId", "Value":{ "Fn::Join":[ "/", [ "service", { "Ref":"cluster" }, { "Fn::GetAtt":[ "service", "Name" ] } ] ] } } } }

YAML

AWSTemplateFormatVersion: 2018-09-09 Description: Creating ECS service Parameters: AppName: Type: String Description: Name of app requiring ELB exposure Default: simple-app AppContainerPort: Type: Number Description: Container port of app requiring ELB exposure Default: '80' AppHostPort: Type: Number Description: Host port of app requiring ELB exposure Default: '80' Resources: scalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: ResourceId: !Join - / - - service - !Ref cluster - !GetAtt service.Name ServiceNamespace: ecs ScalableDimension: 'ecs:service:DesiredCount' RoleARN: !GetAtt - scalingRole - Arn MaxCapacity: '2' MinCapacity: '1' ScheduledActions: - EndTime: '2018-12-04T22:14:41.951Z' ScalableTargetAction: MaxCapacity: '2' MinCapacity: '1' ScheduledActionName: First StartTime: '2018-11-28T22:14:41.951Z' Schedule: 'cron(0 12 ? * MON *)' 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: '*' Resource: '*' cluster: Type: AWS::ECS::Cluster taskdefinition: Type: AWS::ECS::TaskDefinition Properties: ContainerDefinitions: - Name: !Ref AppName MountPoints: - SourceVolume: my-vol ContainerPath: /var/www/my-vol Image: amazon/amazon-ecs-sample Cpu: '10' PortMappings: - ContainerPort: !Ref AppContainerPort HostPort: !Ref AppHostPort EntryPoint: - /usr/sbin/apache2 - '-D' - FOREGROUND Memory: '500' Essential: 'true' - Name: busybox Image: busybox Cpu: '10' EntryPoint: - sh - '-c' Memory: '500' Command: - >- /bin/sh -c "while true; do /bin/date > /var/www/my-vol/date; sleep 1; done" Essential: 'false' VolumesFrom: - SourceContainer: !Ref AppName Volumes: - Host: SourcePath: /var/lib/docker/vfs/dir/ Name: my-vol service: Type: AWS::ECS::Service Properties: Cluster: !Ref cluster DesiredCount: 0 TaskDefinition: !Ref taskdefinition Outputs: resourceId: Description: ResourceId Value: !Join - / - - service - !Ref cluster - !GetAtt service.Name

このページの内容: