このセクションでは、さまざまな AWS リソースのアプリケーションの Auto Scaling スケーリングポリシーとスケジュールに基づくアクションに関する AWS CloudFormation テンプレートの例を示します。
重要
アプリケーションの Auto Scaling スニペットがテンプレートに含まれている場合は、DependsOn 属性 を使用して、テンプレートを通じて作成される特定のスケーラブルなリソースへの依存関係を宣言する必要がある場合があります。これにより、デフォルトの並列処理が上書きされ、指定した順序で AWS CloudFormation がリソースを操作するようになります。この宣言がないと、リソースの設定が完了する前にスケーリングの構成が適用される場合があります。
スニペットカテゴリ
AppStream フリートのスケーリングポリシーの作成
このスニペットでは、ポリシーを作成し、AWS::ApplicationAutoScaling::ScalingPolicy
リソースを使用して AWS::AppStream::Fleet
リソースにそのポリシーを適用しています。AWS::ApplicationAutoScaling::ScalableTarget
リソースは、このポリシーが適用されるスケーラブルターゲットを宣言します。Application Auto Scaling は、フリートインスタンスの数を最低 1 つ個のインスタンス、最大 20 個のインスタンスに拡張できます。このポリシーでは、フリートの平均容量使用率を 75% に保ち、スケールアウトとスケールインのクールダウン期間は 300 秒 (5 分) です。
Fn::Join と Ref の組み込み関数を使用して、同じテンプレートで指定された AWS::AppStream::Fleet
リソースの、論理名を使用して ResourceId
プロパティを作成します。
JSON
{
"Resources" : {
"ScalableTarget" : {
"Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
"Properties" : {
"MaxCapacity" : 20,
"MinCapacity" : 1,
"RoleARN" : { "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/appstream.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_AppStreamFleet" },
"ServiceNamespace" : "appstream",
"ScalableDimension" : "appstream:fleet:DesiredCapacity",
"ResourceId" : {
"Fn::Join" : [
"/",
[
"fleet",
{
"Ref" : "logicalName
"
}
]
]
}
}
},
"ScalingPolicyAppStreamFleet" : {
"Type" : "AWS::ApplicationAutoScaling::ScalingPolicy",
"Properties" : {
"PolicyName" : { "Fn::Sub" : "${AWS::StackName}-target-tracking-cpu75" },
"PolicyType" : "TargetTrackingScaling",
"ServiceNamespace" : "appstream",
"ScalableDimension" : "appstream:fleet:DesiredCapacity",
"ResourceId" : {
"Fn::Join" : [
"/",
[
"fleet",
{
"Ref" : "logicalName
"
}
]
]
},
"TargetTrackingScalingPolicyConfiguration" : {
"TargetValue" : 75,
"PredefinedMetricSpecification" : {
"PredefinedMetricType" : "AppStreamAverageCapacityUtilization"
},
"ScaleInCooldown" : 300,
"ScaleOutCooldown" : 300
}
}
}
}
}
YAML
---
Resources:
ScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 20
MinCapacity: 1
RoleARN:
Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/appstream.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_AppStreamFleet'
ServiceNamespace: appstream
ScalableDimension: appstream:fleet:DesiredCapacity
ResourceId: !Join
- /
- - fleet
- !Ref logicalName
ScalingPolicyAppStreamFleet:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Sub ${AWS::StackName}-target-tracking-cpu75
PolicyType: TargetTrackingScaling
ServiceNamespace: appstream
ScalableDimension: appstream:fleet:DesiredCapacity
ResourceId: !Join
- /
- - fleet
- !Ref logicalName
TargetTrackingScalingPolicyConfiguration:
TargetValue: 75
PredefinedMetricSpecification:
PredefinedMetricType: AppStreamAverageCapacityUtilization
ScaleInCooldown: 300
ScaleOutCooldown: 300
Aurora DB クラスターのスケーリングポリシーを作成する
このスニペットでは、AWS::RDS::DBCluster
リソースを登録します。AWS::ApplicationAutoScaling::ScalableTarget
リソースは、DB クラスターが、1~8 個の Aurora レプリカを持つように動的にスケールされることを示します。また、ターゲット追跡スケーリングポリシーを、AWS::ApplicationAutoScaling::ScalingPolicy
リソースを使用してクラスターに適用します。
この構成では、RDSReaderAverageCPUUtilization
事前定義メトリクスを使用して、Aurora DB クラスターのすべての Aurora レプリカでの平均 CPU 使用率 40% に基づいて Aurora DB クラスターが調整されます。この構成では、10 分間のスケールインのクールダウン期間と 5 分間のスケールアウトのクールダウン期間が提供されます。
この例では、Fn::Sub 組み込み関数を使用して、同じテンプレートで指定されている AWS::RDS::DBCluster
リソースの論理名で ResourceId
プロパティを作成します。
JSON
{
"Resources" : {
"ScalableTarget" : {
"Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
"Properties" : {
"MaxCapacity" : 8,
"MinCapacity" : 1,
"RoleARN" : { "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/rds.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_RDSCluster" },
"ServiceNamespace" : "rds",
"ScalableDimension" : "rds:cluster:ReadReplicaCount",
"ResourceId" : { "Fn::Sub" : "cluster:${logicalName
}" }
}
},
"ScalingPolicyDBCluster" : {
"Type" : "AWS::ApplicationAutoScaling::ScalingPolicy",
"Properties" : {
"PolicyName" : { "Fn::Sub" : "${AWS::StackName}-target-tracking-cpu40" },
"PolicyType" : "TargetTrackingScaling",
"ServiceNamespace" : "rds",
"ScalableDimension" : "rds:cluster:ReadReplicaCount",
"ResourceId" : { "Fn::Sub" : "cluster:${logicalName
}" },
"TargetTrackingScalingPolicyConfiguration" : {
"TargetValue" : 40,
"PredefinedMetricSpecification" : {
"PredefinedMetricType" : "RDSReaderAverageCPUUtilization"
},
"ScaleInCooldown" : 600,
"ScaleOutCooldown" : 300
}
}
}
}
}
YAML
---
Resources:
ScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 8
MinCapacity: 1
RoleARN:
Fn::Sub: 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/rds.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_RDSCluster'
ServiceNamespace: rds
ScalableDimension: rds:cluster:ReadReplicaCount
ResourceId: !Sub cluster:${logicalName
}
ScalingPolicyDBCluster:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Sub ${AWS::StackName}-target-tracking-cpu40
PolicyType: TargetTrackingScaling
ServiceNamespace: rds
ScalableDimension: rds:cluster:ReadReplicaCount
ResourceId: !Sub cluster:${logicalName
}
TargetTrackingScalingPolicyConfiguration:
TargetValue: 40
PredefinedMetricSpecification:
PredefinedMetricType: RDSReaderAverageCPUUtilization
ScaleInCooldown: 600
ScaleOutCooldown: 300
DynamoDB テーブルのスケーリングポリシーを作成する
このスニペットでは、TargetTrackingScaling
ポリシータイプを使ってポリシーを作成し、それを AWS::ApplicationAutoScaling::ScalingPolicy
リソースを使用して AWS::DynamoDB::Table
リソースに適用しています。AWS::ApplicationAutoScaling::ScalableTarget
リソースは、このポリシーが適用されるスケーラブルなターゲットとして、書き込みキャパシティーユニット (最大 5、最小 15) を宣言しています。スケーリングポリシーは、DynamoDBWriteCapacityUtilization
事前定義メトリクスに基づいて、ターゲット使用率を 50% に維持するように、テーブルの書き込み容量のスループットをスケーリングします。
Fn::Join と Ref の組み込み関数を使用して、同じテンプレートで指定された AWS::DynamoDB::Table
リソースの、論理名を使用して ResourceId
プロパティを作成します。
注記
DynamoDB リソースの AWS CloudFormation テンプレートを作成する方法の詳細については、AWS データベースブログの「AWS CloudFormation を使用して Amazon DynamoDB テーブルとインデックスの自動スケーリングを設定する方法
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" : "logicalName
"
}
]
]
}
}
},
"WriteScalingPolicy" : {
"Type" : "AWS::ApplicationAutoScaling::ScalingPolicy",
"Properties" : {
"PolicyName" : "WriteScalingPolicy",
"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 logicalName
WriteScalingPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: WriteScalingPolicy
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref WriteCapacityScalableTarget
TargetTrackingScalingPolicyConfiguration:
TargetValue: 50.0
ScaleInCooldown: 60
ScaleOutCooldown: 60
PredefinedMetricSpecification:
PredefinedMetricType: DynamoDBWriteCapacityUtilization
Amazon ECS サービスのスケーリングポリシーを作成する (メトリクスス: 平均 CPU とメモリ)
このスニペットでは、ポリシーを作成し、AWS::ApplicationAutoScaling::ScalingPolicy
リソースを使用して AWS::ECS::Service
リソースにそのポリシーを適用しています。AWS::ApplicationAutoScaling::ScalableTarget
リソースは、このポリシーが適用されるスケーラブルターゲットを宣言します。Application Auto Scaling は、最小 1 タスク、最大 6 タスクのスケーリングが可能です。
また、TargetTrackingScaling
ポリシータイプの 2 つのスケーリングポリシーを作成します。これらのポリシーは、サービスの平均 CPU およびメモリ使用量に基づいて ECS サービスをスケールするために使用されます。Fn::Join と Ref の 組み込み関数を使用して、同じテンプレートで指定された AWS::ECS::Cluster
(myContainerCluster
) および AWS::ECS::Service
(myService
) リソースの論理名を使用して ResourceId
プロパティを作成します。
JSON
{
"Resources" : {
"ECSScalableTarget" : {
"Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
"Properties" : {
"MaxCapacity" : "6",
"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" : "myContainerCluster
"
},
{
"Fn::GetAtt" : [
"myService
",
"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: 6
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 myContainerCluster
- !GetAtt myService
.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
Amazon ECS サービスのスケーリングポリシーを作成する (メトリクス: ターゲットあたりの平均リクエスト数)
以下の例では、ALBRequestCountPerTarget
事前定義メトリクスを使用するターゲット追跡スケーリングポリシーを ECS サービスに適用します。このポリシーは、ターゲットあたり (1 分あたり) のリクエストカウントがターゲット値を超えた場合に ECS サービスに容量を追加するために使用されます。DisableScaleIn
の値が true
に設定されているため、ターゲット追跡ポリシーはスケーラブルなターゲットから容量を削除しません。
Fn::Join と Fn::GetAtt の 組み込み関数を使用して、同じテンプレートで指定された AWS::ElasticLoadBalancingV2::LoadBalancer
(myLoadBalancer
) および AWS::ElasticLoadBalancingV2::TargetGroup
(myTargetGroup
) リソースの論理名を使用して ResourceLabel
プロパティを作成します。
スケーラブルなターゲットの MaxCapacity
および MinCapacity
プロパティ、スケーリングポリシーの TargetValue
プロパティは、スタックの作成または更新時にテンプレートに渡すパラメータ値を参照します。
JSON
{
"Resources" : {
"ECSScalableTarget" : {
"Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
"Properties" : {
"MaxCapacity" : { "Ref" : "MaxCount" },
"MinCapacity" : { "Ref" : "MinCount" },
"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" : "myContainerCluster
"
},
{
"Fn::GetAtt" : [
"myService
",
"Name"
]
}
]
]
}
}
},
"ServiceScalingPolicyALB" : {
"Type" : "AWS::ApplicationAutoScaling::ScalingPolicy",
"Properties" : {
"PolicyName" : "alb-requests-per-target-per-minute",
"PolicyType" : "TargetTrackingScaling",
"ScalingTargetId" : { "Ref" : "ECSScalableTarget" },
"TargetTrackingScalingPolicyConfiguration" : {
"TargetValue" : { "Ref" : "ALBPolicyTargetValue" },
"ScaleInCooldown" : 180,
"ScaleOutCooldown" : 30,
"DisableScaleIn" : true,
"PredefinedMetricSpecification" : {
"PredefinedMetricType" : "ALBRequestCountPerTarget",
"ResourceLabel" : {
"Fn::Join" : [
"/",
[
{
"Fn::GetAtt" : [
"myLoadBalancer
",
"LoadBalancerFullName"
]
},
{
"Fn::GetAtt" : [
"myTargetGroup
",
"TargetGroupFullName"
]
}
]
]
}
}
}
}
}
}
}
YAML
---
Resources:
ECSScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: !Ref MaxCount
MinCapacity: !Ref MinCount
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 myContainerCluster
- !GetAtt myService
.Name
ServiceScalingPolicyALB:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: alb-requests-per-target-per-minute
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref ECSScalableTarget
TargetTrackingScalingPolicyConfiguration:
TargetValue: !Ref ALBPolicyTargetValue
ScaleInCooldown: 180
ScaleOutCooldown: 30
DisableScaleIn: true
PredefinedMetricSpecification:
PredefinedMetricType: ALBRequestCountPerTarget
ResourceLabel: !Join
- '/'
- - !GetAtt myLoadBalancer
.LoadBalancerFullName
- !GetAtt myTargetGroup
.TargetGroupFullName
Lambda 関数の cron 式を使用した、計画されたアクションを作成する
このスニペットでは、AWS::ApplicationAutoScaling::ScalableTarget
リソースを使用して、BLUE
という名前の関数エイリアス (AWS::Lambda::Alias
) のプロビジョニングされた同時実行を登録しています。また、Cron 式を使用して、定期的なスケジュールでスケジュールされたアクションを作成します。定期スケジュールのタイムゾーンは UTC です。
RoleARN
プロパティで Fn::Join と Ref の組み込み関数を使用し、サービスリンクロールの ARN を指定します。Fn::Sub の組み込み関数を使用して、同じテンプレートで指定された AWS::Lambda::Function
または AWS::Serverless::Function
リソースの論理名を使用して ResourceId
プロパティを作成します。
注記
非公開バージョン ($LATEST
) を参照するエイリアスに、プロビジョニングされた同時実行を割り当てることもできません。
Lambda リソースの AWS CloudFormation テンプレートを作成する方法の詳細については、AWS コンピューティングブログのブログ記事「繰り返し発生するピーク使用量のために AWS Lambda プロビジョニングされた同時実行をスケジュールする
JSON
{
"ScalableTarget" : {
"Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
"Properties" : {
"MaxCapacity" : 250,
"MinCapacity" : 0,
"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:${logicalName
}:BLUE" },
"ScheduledActions" : [
{
"ScalableTargetAction" : {
"MinCapacity" : "250"
},
"ScheduledActionName" : "my-scale-out-scheduled-action",
"Schedule" : "cron(0 18 * * ? *)",
"EndTime" : "2022-12-31T12:00:00.000Z"
}
]
}
}
}
YAML
ScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 250
MinCapacity: 0
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:${logicalName
}:BLUE
ScheduledActions:
- ScalableTargetAction:
MinCapacity: 250
ScheduledActionName: my-scale-out-scheduled-action
Schedule: 'cron(0 18 * * ? *)'
EndTime: '2022-12-31T12:00:00.000Z'
スポットフリートの at
式を使用して、計画されたアクションを作成する
このスニペットでは、AWS::ApplicationAutoScaling::ScalableTarget
リソースを使用して、AWS::EC2::SpotFleet
リソースに対して 1 回だけ実行される 2 つの計画されたアクションを作成しています。1 回限りのスケジュールされた各アクションのタイムゾーンは UTC です。
Fn::Join と Ref の組み込み関数を使用して、同じテンプレートで指定された AWS::EC2::SpotFleet
リソースの論理名を使用して ResourceId
プロパティを作成します。
注記
スポットフリートリクエストには、タイプが maintain
のリクエストが必要です。自動スケーリングは 1 回限りのリクエストまたはスポットブロックではサポートされません。
JSON
{
"Resources" : {
"SpotFleetScalableTarget" : {
"Type" : "AWS::ApplicationAutoScaling::ScalableTarget",
"Properties" : {
"MaxCapacity" : 0,
"MinCapacity" : 0,
"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" : "logicalName
"
}
]
]
},
"ScheduledActions" : [
{
"ScalableTargetAction" : {
"MaxCapacity" : "10",
"MinCapacity" : "10"
},
"ScheduledActionName" : "my-scale-out-scheduled-action",
"Schedule" : "at(2022-05-20T13:00:00)"
},
{
"ScalableTargetAction" : {
"MaxCapacity" : "0",
"MinCapacity" : "0"
},
"ScheduledActionName" : "my-scale-in-scheduled-action",
"Schedule" : "at(2022-05-20T21:00:00)"
}
]
}
}
}
}
YAML
---
Resources:
SpotFleetScalableTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 0
MinCapacity: 0
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 logicalName
ScheduledActions:
- ScalableTargetAction:
MaxCapacity: 10
MinCapacity: 10
ScheduledActionName: my-scale-out-scheduled-action
Schedule: 'at(2022-05-20T13:00:00)'
- ScalableTargetAction:
MaxCapacity: 0
MinCapacity: 0
ScheduledActionName: my-scale-in-scheduled-action
Schedule: 'at(2022-05-20T21:00:00)'