ALIYUN::ESS::ScalingGroup类型用于创建伸缩组。伸缩组是具有相同应用场景的ECS实例的集合,创建成功后不会立即生效,需要使用ALIYUN::ESS::ScalingGroupEnable启用伸缩组,才能触发伸缩活动,执行伸缩规则。
语法
{
"Type": "ALIYUN::ESS::ScalingGroup",
"Properties": {
"MultiAZPolicy": String,
"DesiredCapacity": Integer,
"NotificationConfigurations": List,
"ProtectedInstances": List,
"LaunchTemplateId": String,
"LaunchTemplateVersion": String,
"ScalingGroupName": String,
"VSwitchIds": List,
"DefaultCooldown": Integer,
"MinSize": Integer,
"GroupDeletionProtection": Boolean,
"MaxSize": Integer,
"InstanceId": String,
"VSwitchId": String,
"LoadBalancerIds": List,
"StandbyInstances": List,
"RemovalPolicys": List,
"HealthCheckType": String,
"DBInstanceIds": List,
"Tags": List,
"OnDemandPercentageAboveBaseCapacity": Integer,
"CompensateWithOnDemand": Boolean,
"ContainerGroupId": String,
"ScalingPolicy": String,
"SpotInstanceRemedy": Boolean,
"SpotInstancePools": Integer,
"OnDemandBaseCapacity": Integer,
"GroupType": String,
"LaunchTemplateOverrides": List,
"AllocationStrategy": String,
"AzBalance": Boolean,
"MaxInstanceLifetime": Integer,
"CustomPolicyARN": String,
"SpotAllocationStrategy": String,
"ServerGroups": List,
"ResourceGroupId": String
}
}
属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
MinSize | Integer | 是 | 是 | 伸缩组内ECS实例个数的最小值。 | 取值范围:0~1000。 当伸缩组内ECS实例数小于MinSize时,弹性伸缩会自动创建ECS实例。 |
MaxSize | Integer | 是 | 是 | 伸缩组内ECS实例个数的最大值。 | 取值范围:0~1000。 当伸缩组内ECS实例数大于MaxSize时,弹性伸缩会自动移出ECS实例。 |
ScalingGroupName | String | 否 | 是 | 伸缩组的显示名称。 | 长度为2~64个字符。以数字、英文字母或汉字开头,可包含英文字母、汉字、数字、下划线(_)、短划线(-)和半角句号(.)。 同一账号同一地域内名称唯一。 默认值:ScalingGroupId。 |
LaunchTemplateId | String | 否 | 是 | 实例启动模板ID,用于指定伸缩组从实例启动模板获取启动配置信息。 | 无 |
LaunchTemplateVersion | String | 否 | 是 | ECS实例启动模板的版本。 | 取值:
|
RemovalPolicys | List | 否 | 是 | ECS实例移出伸缩组的策略。 | 取值:
|
VSwitchId | String | 否 | 是 | 交换机ID。 | 无 |
LoadBalancerIds | List | 否 | 是 | 负载均衡实例的ID。 | 取值可以是由多台负载均衡实例ID组成一个JSON数组,最多支持5个ID,ID之间用半角逗号(,)隔开。 |
DefaultCooldown | Integer | 否 | 是 | 一次伸缩活动(添加或移出ECS实例)结束后的一段冷却时间。 | 取值范围:0~86,400。 单位:秒。 默认值:300 。 冷却时间内,该伸缩组不执行其它的伸缩活动,仅针对云监控报警任务触发的伸缩活动有效。 |
DBInstanceIds | List | 否 | 是 | 云数据库RDS版实例的ID。 | 取值可以是由多台RDS实例ID组成一个JSON数组,最多支持8个ID,ID之间用半角逗号(,)隔开。 |
VSwitchIds | List | 否 | 是 | 多个交换机ID。 | 最多可指定5个交换机ID。当指定VSwitchIds时,将忽略VSwitchId的值。交换机的优先级按照指定顺序依次减小。 当优先级较高的虚拟交换机所在可用区无法创建ECS实例时,自动选择下一优先级的虚拟交换机创建ECS实例。 |
MultiAZPolicy | String | 否 | 是 | 多可用区伸缩组ECS实例扩缩容策略。 | 取值:
|
NotificationConfigurations | List | 否 | 是 | 事件及资源变化通知的配置列表。 | 更多信息,请参见NotificationConfigurations属性。 |
ProtectedInstances | List | 否 | 是 | 伸缩组内处于保护模式的ECS实例个数。 | 最多支持1000个实例。 |
StandbyInstances | List | 否 | 是 | 伸缩组内处于备用模式的ECS实例个数。 | 最多支持1000个实例。 |
HealthCheckType | String | 否 | 是 | 健康检查类型。 | 取值:
|
GroupDeletionProtection | Boolean | 否 | 是 | 是否开启伸缩组删除保护。 | 取值:
|
DesiredCapacity | Integer | 否 | 是 | 伸缩组内ECS实例的期望数量,伸缩组会自动将ECS实例数量维持在期望实例数。 | 取值大于等于MinSize,小于等于MaxSize。 |
InstanceId | String | 否 | 否 | ECS实例的ID。创建伸缩组时,将从指定的实例获取所需的配置信息,并自动创建伸缩配置。 | 无 |
Tags | List | 否 | 是 | 标签。 | 最多支持添加20个标签。 更多信息,请参见Tags属性。 |
OnDemandPercentageAboveBaseCapacity | Integer | 否 | 是 | 超出的实例中按量实例应占的比例。 | 伸缩组满足最小按量实例数(OnDemandBaseCapacity)要求后,超出的实例中按量实例应占的比例。 取值范围:0~100。 |
CompensateWithOnDemand | Boolean | 否 | 是 | 是否允许自动尝试创建满足ECS实例数要求的按量实例。 | 当MultiAZPolicy取值为COST_OPTIMIZED时,如果因价格、库存等原因无法创建足够的抢占式实例,是否允许自动尝试创建满足ECS实例数要求的按量实例。 取值:
|
ContainerGroupId | String | 否 | 否 | ECI实例ID。 | 无 |
ScalingPolicy | String | 否 | 否 | 指定伸缩组的回收模式。 | 取值:
ScalingPolicy指定伸缩组的回收模式,但实例被移出伸缩组时的具体动作,由RemoveInstances的RemovePolicy参数决定。更多信息,请参见RemoveInstances。 |
SpotInstanceRemedy | Boolean | 否 | 是 | 是否开启补齐抢占式实例。 | 取值:
|
SpotInstancePools | Integer | 否 | 是 | 指定可用实例规格的个数。 | 伸缩组将按成本最低的多个规格均衡创建抢占式实例。 取值范围:1~10。 |
OnDemandBaseCapacity | Integer | 否 | 是 | 伸缩组所需要按量实例个数的最小值。 | 取值范围:0~1000。 当按量实例个数少于该值时,将优先创建按量实例。 |
GroupType | String | 否 | 否 | 伸缩组管理的实例类型。 | 取值:
|
LaunchTemplateOverrides | List | 否 | 是 | 扩展启动模板的实例规格信息。 | 无 |
AllocationStrategy | String | 否 | 是 | 容量分配策略。 | 决定了伸缩组如何选择可用的实例规格类型满足容量。容量分布策略同时对按量和抢占式容量生效(仅当 取值:
|
AzBalance | Boolean | 否 | 是 | 伸缩组的容量是否在多个可用区间均衡分布。 | 仅当 取值:
|
MaxInstanceLifetime | Integer | 否 | 是 | 实例在伸缩组中存活的最大时间。 | 单位为秒。 取值范围:86400~ 默认值:null。 |
CustomPolicyARN | String | 否 | 是 | 自定义缩容策略Function函数ARN。 | 仅当RemovalPolicies配置第一个移除策略为CustomPolicy时生效。 |
SpotAllocationStrategy | String | 否 | 是 | 抢占式容量分布策略。 | 通过该参数单独指定抢占式容量的分布策略(仅当 取值:
|
ServerGroups | List | 否 | 否 | 负载均衡服务器组的配置。 | 更多信息,请参见ServerGroups属性。 |
ResourceGroupId | String | 否 | 是 | 资源组ID。 | 无 |
ServerGroups语法
"ServerGroups": [
{
"Type": String,
"ServerGroupId": String,
"Weight": Number,
"Port": Number
}
]
ServerGroups属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Type | String | 是 | 否 | 负载均衡服务器组类型。 | 取值范围:
|
ServerGroupId | String | 是 | 否 | 负载均衡服务器组ID。 | 无 |
Weight | Number | 是 | 否 | ECS实例或ECI实例作为后端服务器的权重。 | 取值范围:0~100。 权重越高,ECS实例或ECI实例将被分配到越多的访问请求。如果权重为 0,则ECS实例或ECI实例不会收到访问请求。 |
Port | Number | 是 | 否 | ECS实例或 ECI实例使用的端口号。 | 取值范围:1~65535。 |
NotificationConfigurations语法
"NotificationConfigurations": [
{
"NotificationArn": String,
"NotificationTypes": List
}
]
NotificationConfigurations属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
NotificationArn | String | 是 | 否 | 生命周期挂钩通知对象标识符,支持轻量消息队列(原 MNS)队列或主题。 | 取值:
|
NotificationTypes | List | 是 | 否 | ESS事件和资源更改通知类型。 | 无 |
Tags语法
"Tags": [
{
"Key": String,
"Value": String
}
]
Tags属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Key | String | 是 | 否 | 标签键。 | 长度为1~128个字符,不能以 |
Value | String | 否 | 否 | 标签值。 | 长度为0~128个字符,不能以 |
LaunchTemplateOverrides语法
"LaunchTemplateOverrides": [
{
"InstanceType": String,
"WeightedCapacity": Integer,
"SpotPriceLimit": Number
}
]
LaunchTemplateOverrides属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
InstanceType | String | 否 | 是 | ECS实例规格。 | 当您需要伸缩组按照实例规格容量进行伸缩时,请同时指定本参数和 本参数用于指定实例规格,会覆盖启动模板中的实例规格。 说明 仅当LaunchTemplateId参数指定了启动模板时,本参数生效。 |
WeightedCapacity | Integer | 否 | 是 | 规格配置的权重。 | 当您需要伸缩组按照实例规格容量进行伸缩时, 先指定 本参数用于指定实例规格的权重,即实例规格的单台实例在伸缩组中表示的容量大小。权重越大,满足期望容量所需的本实例规格的实例数量越少。 由于每个实例规格的 例如:
为满足期望容量,伸缩组将为用户扩容2台 本参数的取值范围:1~500。 说明 扩容时伸缩组的容量不得超过最大容量(MaxSize)与实例规格的最大权重之和。 |
SpotPriceLimit | Number | 否 | 是 | 竞价价格上限。 | 本参数用于指定实例启动模板覆盖规格(即 说明 仅当 |
返回值
Fn::GetAtt
ScalingGroupId:伸缩组的ID。
ScalingGroupName:伸缩组名称。
示例
YAML
格式
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
VPC:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Label:
zh-cn: 现有VPC的实例ID
en: Existing VPC Instance ID
VSwitch:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
Type: String
Label:
zh-cn: 网络交换机ID
en: VSwitch ID
AssociationPropertyMetadata:
VpcId: ${VPC}
LaunchTemplateId:
AssociationProperty: ALIYUN::ECS::LaunchTemplate::LaunchTemplateId
Type: String
Resources:
ScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
VpcId:
Ref: VPC
VSwitchId:
Ref: VSwitch
LaunchTemplateId:
Ref: LaunchTemplateId
MaxSize: 3
ScalingGroupName: TestScalingGroup
MinSize: 0
Outputs:
ScalingGroupId:
Description: Scaling group Id
Value:
Fn::GetAtt:
- ScalingGroup
- ScalingGroupId
ScalingGroupName:
Description: Scaling group name
Value:
Fn::GetAtt:
- ScalingGroup
- ScalingGroupName
JSON
格式
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"VPC": {
"AssociationProperty": "ALIYUN::ECS::VPC::VPCId",
"Type": "String",
"Label": {
"zh-cn": "现有VPC的实例ID",
"en": "Existing VPC Instance ID"
}
},
"VSwitch": {
"AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
"Type": "String",
"Label": {
"zh-cn": "网络交换机ID",
"en": "VSwitch ID"
},
"AssociationPropertyMetadata": {
"VpcId": "${VPC}"
}
},
"LaunchTemplateId":{
"AssociationProperty":"ALIYUN::ECS::LaunchTemplate::LaunchTemplateId",
"Type":"String"
}
},
"Resources": {
"ScalingGroup": {
"Type": "ALIYUN::ESS::ScalingGroup",
"Properties": {
"VpcId": {
"Ref": "VPC"
},
"VSwitchId": {
"Ref": "VSwitch"
},
"LaunchTemplateId": {
"Ref": "LaunchTemplateId"
},
"MaxSize": 3,
"ScalingGroupName": "TestScalingGroup",
"MinSize": 0
}
}
},
"Outputs": {
"ScalingGroupId": {
"Description": "Scaling group Id",
"Value": {
"Fn::GetAtt": [
"ScalingGroup",
"ScalingGroupId"
]
}
},
"ScalingGroupName": {
"Description": "Scaling group name",
"Value": {
"Fn::GetAtt": [
"ScalingGroup",
"ScalingGroupName"
]
}
}
}
}
当伸缩组中仅定义了一个伸缩组配置,且伸缩组配置中包含依赖的其他资源,您需要在定义资源模板时为伸缩组设置DependsOn属性,对伸缩组配置依赖的其他资源设置资源依赖关联。
伸缩组ScalingGroup设置DependsOn依赖关系到安全组SecurityGroup,因为伸缩组配置ScalingConfiguration依赖了安全组SecurityGroup资源。
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
Type: String
AssociationPropertyMetadata:
VpcId: ${VpcId}
Resources:
ScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingConfigurationId:
Ref: ScalingConfiguration
ScalingGroupId:
Ref: ScalingGroup
ScalingRuleArisExecuteVersion: 0
SecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: VpcId
SecurityGroupIngress:
- PortRange: '-1/-1'
Priority: 1
SourceCidrIp: 0.0.X.X/0
IpProtocol: all
NicType: internet
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.X.X/0
NicType: internet
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.X.X/0
NicType: intranet
ScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
DependsOn: ScalingGroup
Properties:
InstanceType: ecs.g6e.large
ImageId: centos_7_04_64_20G_alibase_201701015.vhd
SystemDiskCategory: cloud_essd
SystemDiskSize: 100
ScalingConfigurationName:
Ref: ALIYUN::StackName
ScalingGroupId:
Ref: ScalingGroup
SecurityGroupId:
Ref: SecurityGroup
ScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
DependsOn: SecurityGroup
Properties:
MaxSize: 3
MinSize: 0
DefaultCooldown: 15
VpcId:
Ref: VpcId
VSwitchId:
Ref: VSwitchId
Outputs: {}