AWS::ApplicationAutoScaling::ScalableTarget - AWS CloudFormation

AWS::ApplicationAutoScaling::ScalableTarget

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

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

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

構文

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

JSON

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

YAML

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

プロパティ

MaxCapacity

スケールアウトする予定の最大値。スケーリングポリシーが有効な場合、Application Auto Scaling は、需要の変化に応じて必要であれば最大容量制限までスケールアウト (拡張) できます。

必須: はい

タイプ: 整数

Update requires: No interruption

MinCapacity

スケールインする予定の最小値。スケーリングポリシーが有効な場合、Application Auto Scaling は、需要の変化に応じて必要であれば最小容量制限までスケールイン (縮小) できます。

必須: はい

タイプ: 整数

Update requires: No interruption

ResourceId

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

必須: はい

タイプ: 文字列

Update requires: Replacement

RoleARN

ユーザーに代わってアプリケーションの Auto Scaling がスケーラブルなターゲットを修正することを許可する AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN) を指定します。これは、Application Auto Scaling がユーザーに代わって他の AWS リソースを呼び出すために引き受けることができる IAM サービスロール、または指定されたサービスのサービスにリンクされたロールにすることができます。詳細については、Application Auto Scaling ユーザーガイドの「Application Auto Scaling と IAM の連携」を参照してください。

サービスにリンクされたロールを自動的に作成するには、スタックテンプレートでサービスにリンクされたロールの完全な ARN を指定します。ARN 形式の例と詳細については、Application Auto Scaling ユーザーガイドの「サービスにリンクされたロール」を参照してください。

必須: はい

タイプ: 文字列

Update requires: No interruption

ScalableDimension

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

必須: はい

タイプ: 文字列

Update requires: Replacement

ScheduledActions

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

スケジュールに基づくスケーリングの使用の詳細については、Application Auto Scaling ユーザーガイドの「スケジュールに基づくスケーリング」を参照してください。

必須: いいえ

タイプ: ScheduledAction のリスト

Update requires: No interruption

ServiceNamespace

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

必須: はい

タイプ: 文字列

Update requires: Replacement

SuspendedState

自動スケーリングの停止と再開に使用される属性と属性値を含む埋め込みオブジェクト。属性の値を true に設定すると、指定されたスケーリングアクティビティが停止されます。false (デフォルト) に設定すると、指定されたスケーリングアクティビティが再開されます。

停止の結果

  • DynamicScalingInSuspended の場合、停止が有効な間、スケーリングポリシーによってトリガーされるすべてのスケールインアクティビティが停止されます。

  • DynamicScalingOutSuspended の場合、停止が有効な間、スケーリングポリシーによってトリガーされるすべてのスケールアウトアクティビティが停止されます。

  • ScheduledScalingSuspended の場合、停止が有効な間、スケジュールされたアクションを含むすべてのスケーリングアクティビティが停止されます。

詳細については、Application Auto Scaling ユーザーガイドの「スケーリングの中断と再開」を参照してください。

必須: いいえ

タイプ: SuspendedState

Update requires: No interruption

戻り値

参照番号

このリソースの論理 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、および最小容量と最大容量の値があります。

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

次の例では、Amazon Keyspaces (Apache Cassandra 用) テーブル (AWS::Cassandra::Table) のスケーラブルターゲットを作成します。Application Auto Scaling では、書き込みキャパシティースループットを最低 1 キャパシティーユニットから最大 20 までスケーリングできます。Amazon Keyspaces テーブルのスケーリングの詳細については、Amazon Keyspaces (Apache Cassandra 用) 開発者ガイドの「Application Auto Scaling による Amazon Keyspaces スループットキャパシティーの管理」を参照してください。

Application Auto Scaling でサポートされている別のリソースを登録するには、ServiceNamespace でその名前空間を、ScalableDimension でそのスケーラブルなディメンションを、ResourceId でそのリソース ID を、RoleARN でそのサービスにリンクされたロールを指定します。

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

スケジュールされたアクションのある Lambda

次の例では、BLUE という関数エイリアス (AWS::Lambda::Alias) にプロビジョニングされた同時実行数を最小容量 1 と最大容量 100 で登録します。また、Cron 式を使用して、定期的なスケジュールでスケジュールされたアクションを作成します。

この例では、RoleARN プロパティで Fn::JoinRef の組み込み関数を使用して、サービスにリンクされたロールの ARN を指定します。Fn::Sub 組み込み関数を使用して ResourceId プロパティを構築します。

また、非公開バージョン ($LATEST) を参照するエイリアスにプロビジョニングされた同時実行数を割り当てることもできません。

JSON

{ "ScalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":100, "MinCapacity":1, "RoleARN":{ "Fn::Join":[ ":", [ "arn:aws:iam:", { "Ref":"AWS::AccountId" }, "role/aws-service-role/lambda.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_LambdaConcurrency" ] ] }, "ServiceNamespace":"lambda", "ScalableDimension":"lambda:function:ProvisionedConcurrency", "ResourceId":{ "Fn::Sub":"function:${MyFunction}:BLUE" }, "ScheduledActions":[ { "EndTime":"2019-12-31T12:00:00.000Z", "ScalableTargetAction":{ "MaxCapacity":"500", "MinCapacity":"50" }, "ScheduledActionName":"First", "StartTime":"2019-12-25T12:00:00.000Z", "Schedule":"cron(0 18 * * ? *)" } ] } } }

YAML

ScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 100 MinCapacity: 1 RoleARN: !Join - ':' - - 'arn:aws:iam:' - !Ref 'AWS::AccountId' - role/aws-service-role/lambda.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_LambdaConcurrency ServiceNamespace: lambda ScalableDimension: lambda:function:ProvisionedConcurrency ResourceId: !Sub function:${MyFunction}:BLUE ScheduledActions: - EndTime: '2019-12-31T12:00:00.000Z' ScalableTargetAction: MaxCapacity: '500' MinCapacity: '50' ScheduledActionName: First StartTime: '2019-12-25T12:00:00.000Z' Schedule: 'cron(0 18 * * ? *)'

Amazon DynamoDB

この例では、DynamoDB テーブル (AWS::DynamoDB::Table) とそのグローバルセカンダリインデックスの読み込みおよび書き込み容量 (スループット) をスケーラブルなターゲットとして登録します。Fn::Sub 組み込み関数を使用して ResourceId プロパティを構築します。

JSON

{ "Resources" : { "DDBTable" : { "Type" : "AWS::DynamoDB::Table", "Properties" : { "AttributeDefinitions" : [ { "AttributeName" : "id", "AttributeType" : "S" } ], "KeySchema" : [ { "AttributeName" : "id", "KeyType" : "HASH" } ], "ProvisionedThroughput" : { "ReadCapacityUnits" : "5", "WriteCapacityUnits" : "5" }, "GlobalSecondaryIndexes" : [{ "IndexName" : "GSI", "KeySchema" : [ { "AttributeName" : "id", "KeyType" : "HASH" } ], "Projection" : { "ProjectionType" : "KEYS_ONLY" }, "ProvisionedThroughput" : { "ReadCapacityUnits" : "5", "WriteCapacityUnits" : "5" } }] } }, "WriteCapacityScalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":100, "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::Sub":"table/${DDBTable}" } } }, "ReadCapacityScalableTarget":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":100, "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:ReadCapacityUnits", "ResourceId":{ "Fn::Sub":"table/${DDBTable}" } } }, "WriteCapacityScalableTargetGSI":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":100, "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:index:WriteCapacityUnits", "ResourceId":{ "Fn::Sub":"table/${DDBTable}/index/GSI" } } }, "ReadCapacityScalableTargetGSI":{ "Type":"AWS::ApplicationAutoScaling::ScalableTarget", "Properties":{ "MaxCapacity":100, "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:index:ReadCapacityUnits", "ResourceId":{ "Fn::Sub":"table/${DDBTable}/index/GSI" } } } } }

YAML

Resources: DDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: "id" AttributeType: "S" KeySchema: - AttributeName: "id" KeyType: "HASH" ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 GlobalSecondaryIndexes: - IndexName: "GSI" KeySchema: - AttributeName: "id" KeyType: "HASH" Projection: ProjectionType: "KEYS_ONLY" ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5 WriteCapacityScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 100 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: !Sub table/${DDBTable} ReadCapacityScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 100 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:ReadCapacityUnits ResourceId: !Sub table/${DDBTable} WriteCapacityScalableTargetGSI: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 100 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:index:WriteCapacityUnits ResourceId: !Sub table/${DDBTable}/index/GSI ReadCapacityScalableTargetGSI: Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MaxCapacity: 100 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:index:ReadCapacityUnits ResourceId: !Sub table/${DDBTable}/index/GSI

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