ALIYUN::ESS::ScalingConfiguration类型用于为伸缩组创建伸缩配置。
语法
{
"Type": "ALIYUN::ESS::ScalingConfiguration",
"Properties": {
"PasswordInherit": Boolean,
"DiskMappings": List,
"RamRoleName": String,
"IoOptimized": String,
"InternetChargeType": String,
"KeyPairName": String,
"InstanceId": String,
"InstanceTypes": List,
"ImageId": String,
"ResourceGroupId": String,
"SpotStrategy": String,
"InstanceType": String,
"SystemDiskCategory": String,
"SystemDiskSize": Integer,
"SystemDiskAutoSnapshotPolicyId": String,
"SystemDiskPerformanceLevel": String,
"InternetMaxBandwidthOut": Integer,
"InstanceName": String,
"InternetMaxBandwidthIn": Integer,
"ScalingConfigurationName": String,
"UserData": String,
"DeploymentSetId": String,
"SecurityGroupId": String,
"SpotPriceLimit": Number,
"HpcClusterId": String,
"ScalingGroupId": String,
"SpotPriceLimitForInstanceType": Map,
"TagList": List,
"Ipv6AddressCount": Integer,
"LoadBalancerWeight": Integer,
"CreditSpecification": String,
"ImageFamily": String,
"CpuOptions": Map,
"HostName": String,
"Password": String,
"SystemDiskBurstingEnabled": Boolean,
"ImageOptionsLoginAsNonRoot": Boolean,
"SystemDiskEncrypted": Boolean,
"SystemDiskEncryptAlgorithm": String,
"ZoneId": String,
"Cpu": Integer,
"SystemDiskProvisionedIops": Integer,
"SystemDiskKMSKeyId": String,
"InstancePatternInfos": List,
"SpotInterruptionBehavior": String,
"ImageName": String,
"SystemDiskDescription": String,
"SystemDiskDiskName": String,
"InstanceTypeOverrides": List,
"SystemDiskCategories": List,
"Memory": Integer,
"InstanceDescription": String,
"SecurityGroupIds": List,
"SpotDuration": Integer,
"SecurityEnhancementStrategy": String,
"Affinity": String,
"Tenancy": String,
"PrivatePoolOptions": Map,
"DedicatedHostId": String
}
}属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
ScalingGroupId | String | 是 | 否 | 伸缩配置所属的伸缩组ID。 | 无 |
Affinity | String | 否 | 是 | 专有宿主机实例是否与专有宿主机关联。 | 取值范围:
|
Cpu | Integer | 否 | 是 | vCPU个数。 | 同时指定CPU和Memory可以定义实例规格范围,例如,CPU=2且Memory=16可以定义配置为2 vCPU和16 GiB的所有实例规格。弹性伸缩会结合IO优化、可用区等因素确定可用实例规格集合,并根据价格排序为您创建价格最低的实例。 |
CpuOptions | Map | 否 | 是 | CPU 选项。 | 更多信息,请参考CpuOptions属性。 |
CreditSpecification | String | 否 | 是 | 突发性能实例的运行模式。 | 取值:
关于实例性能的更多信息,请参见性能模式。 |
DedicatedHostId | String | 否 | 是 | 是否在专有宿主机上创建ECS实例。 | 由于专有宿主机不支持创建抢占式实例,指定DedicatedHostId参数后,会自动忽略请求中的SpotStrategy和SpotPriceLimit设置。 您可以调用DescribeDedicatedHosts查询专有宿主机ID列表。 |
DeploymentSetId | String | 否 | 否 | 部署集ID。 | 无 |
DiskMappings | List | 否 | 是 | 需要挂载的磁盘。 | 最多支持16块磁盘。 更多信息,请参见DiskMappings属性。 |
HostName | String | 否 | 是 | 云服务器的主机名。 | 半角句号(.)或短划线(-)不能作为首尾字符,不能连续使用半角句号(.)或短划线(-)。 不同类型实例的命名要求如下:
|
HpcClusterId | String | 否 | 否 | 实例所属的EHPC集群ID。 | 无 |
ImageFamily | String | 否 | 是 | 镜像族系名称。 | 通过设置该参数来获取当前镜像族系内最新可用镜像,用于创建实例。如果已经设置了参数ImageId,则不能设置该参数。 |
ImageId | String | 否 | 是 | 实例的镜像ID,包括公共镜像、自定义镜像和云市场镜像。 | 更多信息,请参见公共镜像。 |
ImageName | String | 否 | 是 | 镜像文件名称。 | 无 |
ImageOptionsLoginAsNonRoot | Boolean | 否 | 否 | ECS 实例是否使用ecs-user用户登录。 | 取值:
|
InstanceDescription | String | 否 | 是 | ECS实例的描述。 | 长度为2~256个英文或中文字符,不能以 |
InstanceId | String | 否 | 否 | 伸缩配置的实例ID。 | 无 |
InstanceName | String | 否 | 是 | 基于当前伸缩配置创建的实例的名称。 | 无 |
InstancePatternInfos | List | 否 | 是 | 智能配置的信息集合。 | 更多信息,请参见InstancePatternInfos属性。 |
InstanceType | String | 否 | 是 | 实例规格。 | 更多信息,请参见实例规格族。 |
InstanceTypeOverrides | List | 否 | 是 | 用于指定的实例规格相关信息。 | 更多信息,请参见InstanceTypeOverrides属性 |
InstanceTypes | List | 否 | 是 | 多实例规格参数。 | 如果指定了InstanceTypes,则InstanceType无效。 一个伸缩配置内最多可以设置10种实例规格,优先级按列表元素的顺序依次降低。当无法根据优先级较高的实例规格创建出实例时,弹性伸缩服务会自动选择下一优先级的实例规格来创建实例。 |
InternetChargeType | String | 否 | 是 | 公网访问带宽计费方式。 | 取值:
|
InternetMaxBandwidthIn | Integer | 否 | 否 | 公网最大入网带宽。 | 单位:Mbps。 取值范围:1~200。 如果您没有指定该参数,则入带宽将自动被设置为200 Mbps。实例的入数据流量免费,该参数在任何情况下都不涉及计费。 |
InternetMaxBandwidthOut | Integer | 否 | 是 | 公网最大出网带宽。 | 取值范围:
单位:Mbps。 |
IoOptimized | String | 否 | 是 | 是否创建I/O优化实例。 | 取值:
|
Ipv6AddressCount | Integer | 否 | 是 | 为弹性网卡指定随机生成的IPv6地址数量。 | 无 |
KeyPairName | String | 否 | 是 | 实例绑定的密钥对名称。 |
|
LoadBalancerWeight | Integer | 否 | 是 | ECS实例作为负载均衡后端服务器时的权重。 | 取值范围:1~100。 默认值:50。 |
Memory | Integer | 否 | 是 | 内存大小。 | 单位:GiB。 同时指定CPU和Memory可以定义实例规格范围。例如,CPU=2且Memory=16可以定义配置为2 vCPU和16 GiB的所有实例规格。弹性伸缩会结合IO优化、可用区等因素确定可用实例规格集合,并根据价格排序为您创建价格最低的实例。 |
Password | String | 否 | 是 | ECS实例的密码。 | 长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号中的三类字符。特殊符号可以是: Windows实例不能以斜线号(/)为密码首字符。 说明 如果传入Password参数,建议您使用HTTPS协议发送请求,避免密码泄露。 |
PasswordInherit | Boolean | 否 | 是 | 是否使用镜像预设的密码。 | 如果使用镜像预设的密码,您需要确保所用镜像已经预设了密码。 |
PrivatePoolOptions | Map | 否 | 是 | 实例启动的私有池配置 | 更多信息,请参见PrivatePoolOptions属性 |
RamRoleName | String | 否 | 是 | 实例RAM角色名称。 | |
ResourceGroupId | String | 否 | 是 | 实例所在的资源组ID。 | 无 |
ScalingConfigurationName | String | 否 | 是 | 伸缩配置的名称。 | 长度为2~64个字符,以数字、英文字母或汉字开头,可包含数字、英文字母、汉字、下划线(_)、短划线(-)和半角句号(.)。 在同一地域下同一伸缩组内伸缩配置名称唯一。 如果您没有指定本参数,则默认使用伸缩配置的ID。 |
SecurityEnhancementStrategy | String | 否 | 否 | 是否开启安全加固。 | 取值范围:
|
SecurityGroupId | String | 否 | 是 | 实例所属的安全组。 | 无 |
SecurityGroupIds | List | 否 | 是 | 将ECS实例同时加入多个安全组。 | 说明 不支持同时指定SecurityGroupId和SecurityGroupIds。 |
SpotDuration | Integer | 否 | 是 | 抢占式实例的保留时长。 | 单位为小时。取值范围:
|
SpotInterruptionBehavior | String | 否 | 是 | 抢占实例中断模式。 | 无 |
SpotPriceLimit | Number | 否 | 是 | 实例每小时的最高价格。 | 支持最多3位小数。 当 |
SpotPriceLimitForInstanceType | Map | 否 | 是 | 抢占式实例的实例规格和对应的出价。 | 格式: 当 最多可设置10组实例和价格。 |
SpotStrategy | String | 否 | 是 | 后付费实例的抢占策略。 | 取值:
|
SystemDiskAutoSnapshotPolicyId | String | 否 | 是 | 系统盘使用的自动快照策略ID。 | 无 |
SystemDiskBurstingEnabled | Boolean | 否 | 否 | 系统盘是否开启Burst(性能突发)。 | 取值:
|
SystemDiskCategories | List | 否 | 是 | 系统盘的多磁盘类型。 | 当无法使用高优先级的磁盘类型时,弹性伸缩自动尝试下一优先级的磁盘类型创建系统盘。取值范围:
|
SystemDiskCategory | String | 否 | 是 | 系统盘类型。 | 取值:
当InstanceType为I系列的实例规格且实例属于非I/O优化实例时,默认值为cloud,否则,默认值为cloud_efficiency。 |
SystemDiskDescription | String | 否 | 是 | 系统盘的描述。 | 无 |
SystemDiskDiskName | String | 否 | 是 | 系统盘的名称。 | 无 |
SystemDiskEncryptAlgorithm | String | 否 | 是 | 系统盘采用的加密算法。 | 取值:
|
SystemDiskEncrypted | Boolean | 否 | 是 | 系统盘是否加密。 | 取值:
|
SystemDiskKMSKeyId | String | 否 | 是 | 系统盘使用的KMS密钥ID。 | 无 |
SystemDiskPerformanceLevel | String | 否 | 是 | 创建ESSD云盘作为系统盘使用时,设置云盘的性能等级。 | 取值:
有关如何选择ESSD性能等级,请参见ESSD云盘。 |
SystemDiskProvisionedIops | Integer | 否 | 是 | 系统盘预配置的IOPS(Input/Output Operations Per Second)性能指标。 | 无 |
SystemDiskSize | Integer | 否 | 是 | 系统盘大小。 | 取值范围:20~500。 默认值:40。 单位:GiB。 如果使用自定义镜像创建系统盘,则系统盘大小必须大于等于自定义镜像大小。 |
TagList | List | 否 | 是 | 实例标签。 | 标签以键值对方式传入,最多可以使用5组标签,格式为 更多信息,请参见TagList属性。 |
Tenancy | String | 否 | 是 | 是否在专有宿主机上创建实例。 | 取值范围:
|
UserData | String | 否 | 是 | 创建实例时传递的用户数据。 | 内容需要限制在16KB以内,无需Base64转码,特殊字符需要使用反斜线(\)转义。 |
ZoneId | String | 否 | 是 | 实例所属的可用区ID。 | 无 |
DiskMappings语法
"DiskMappings": [
{
"Category": String,
"DiskName": String,
"Description": String,
"AutoSnapshotPolicyId": String,
"PerformanceLevel": String,
"Encrypted": String,
"KMSKeyId": String,
"Device": String,
"SnapshotId": String,
"Size": String,
"DeleteWithInstance": Boolean,
"ProvisionedIops": Integer,
"Categories": List,
"BurstingEnabled": Boolean
}
]DiskMappings属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
AutoSnapshotPolicyId | String | 否 | 否 | 数据盘使用的自动快照策略ID。 | 无 |
BurstingEnabled | Boolean | 否 | 否 | 数据盘是否开启 Burst(性能突发)。 | 可能值:
|
Categories | List | 否 | 否 | 数据盘的多磁盘类型。 | 第一个磁盘类型优先级最高,其他磁盘类型的优先级依次递减。当无法使用高优先级的磁盘类型时,弹性伸缩自动尝试下一优先级的磁盘类型创建数据盘。取值范围:
|
Category | String | 否 | 否 | 数据盘类型。 | 取值:
对于I/O优化实例,默认值为cloud_efficiency;对于非I/O优化实例,默认值为cloud。 |
DeleteWithInstance | Boolean | 否 | 否 | 数据盘是否随实例释放。 | 取值范围:
|
Description | String | 否 | 否 | 数据盘描述。 | 长度为2~256个字符。不能以 |
Device | String | 否 | 否 | 数据盘挂载点。 | 如果该参数值未指定,则默认将在自动创建ECS实例时由系统分配,取值从 |
DiskName | String | 否 | 否 | 数据盘名称。 | 长度为2~128个字符。 必须以英文字母或汉字开头,不能以 可以包含数字、英文字母、汉字、半角冒号(:)、下划线(_)和短划线(-)。 |
Encrypted | String | 否 | 否 | 数据盘是否加密。 | 取值:
|
KMSKeyId | String | 否 | 否 | 数据盘对应的KMS密钥ID。 | 无 |
PerformanceLevel | String | 否 | 否 | 创建ESSD云盘作为数据盘使用时,设置云盘的性能等级。 | 取值:
有关如何选择ESSD性能等级,请参见ESSD云盘。 |
ProvisionedIops | Integer | 否 | 否 | 数据盘预配置的 IOPS(Input/Output Operations Per Second)性能指标。 | 说明 IOPS(Input/Output Operations Per Second)指每秒能处理的 I/O 个数,表示块存储处理读写(输出/输入)的能力,单位为次。 |
Size | String | 否 | 否 | 数据盘磁盘大小。 | 取值:
单位:GB。 指定该参数后,磁盘大小必须大于等于快照大小(快照通过 |
SnapshotId | String | 否 | 否 | 创建数据盘时使用的快照。 | 指定该参数后,Size会被忽略,实际创建的磁盘大小为指定快照的大小。如果快照创建于2013年7月15日或之前,调用快照会被拒绝,返回参数中会提示 |
PrivatePoolOptions语法
"PrivatePoolOptions":
{
"MatchCriteria": String,
"Id": String
}PrivatePoolOptions属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Id | String | 否 | 是 | 私有池ID。 | 即弹性保障服务ID或容量预定服务ID。 |
MatchCriteria | String | 否 | 是 | 实例启动的私有池容量选项。 | 弹性保障服务或容量预定服务在生效后会生成私有池容量,供实例启动时选择。取值范围:
|
InstanceTypeOverrides语法
"InstanceTypeOverrides": [
{
"InstanceType": String,
"WeightedCapacity": Integer
}
]InstanceTypeOverrides属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
InstanceType | String | 否 | 是 | 指定实例规格。 | 当您需要伸缩组按照实例规格容量进行伸缩时,请同时指定本参数和 WeightedCapacity。 |
WeightedCapacity | Integer | 否 | 是 | 指定实例规格的权重。 | 由于每个实例规格的vCPU 个数、内存大小等性能指标会有差异,您可以根据自身需求,给不同的实例规格配置不同的权重。 例如:
为满足期望容量,伸缩组将为用户扩容2台ecs.c5.xlarge实例。 |
InstancePatternInfos语法
"InstancePatternInfos": [
{
"BurstablePerformance": String,
"Architectures": List,
"InstanceFamilyLevel": String,
"Memory": Number,
"MaxPrice": Number,
"ExcludedInstanceTypes": List,
"Cores": Integer
}
]InstancePatternInfos属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Architectures | List | 否 | 是 | 实例规格所属的架构类型。 | 取值范围:
默认值:包含所有架构类型。 |
BurstablePerformance | String | 否 | 否 | 是否为性能突发实例规格。 | 取值范围:
默认值:Include。 |
Cores | Integer | 否 | 是 | 智能配置模式下,实例规格的vCPU内核数目。 | 用于筛选符合要求的实例规格范围。更多信息,请参见实例规格族。 请注意以下信息:
|
ExcludedInstanceTypes | List | 否 | 是 | 需要排除的实例规格。 | 通过使用通配符(*)可以排除单个规格或者整个规格族。例如:
|
InstanceFamilyLevel | String | 否 | 是 | 实例规格族级别。 | 用于筛选符合要求的实例规格范围,当 |
MaxPrice | Number | 否 | 是 | 智能配置模式下,按量付费实例或者抢占式实例可接受的每小时最高价格。 | 无。 |
Memory | Number | 否 | 是 | 智能配置模式下,实例规格的内存大小。 | 单位为GiB,用于筛选符合要求的实例规格范围。 |
CpuOptions语法
"CpuOptions":
{
"NestedVirtualization": String
}CpuOptions属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
NestedVirtualization | String | 否 | 是 | 是否启用嵌套虚拟化。取值:
| 取值:enabled
|
TagList语法
"TagList": [
{
"Key": String,
"Value": String
}
]TagList属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Key | String | 是 | 否 | 标签键。 | 长度为1~64个字符,不能以 |
Value | String | 否 | 否 | 标签值。 | 长度为0~128个字符,不能以 |
返回值
Fn::GetAtt
ScalingConfigurationId:伸缩配置的ID。由系统生成,全局唯一。
ScalingGroupId:伸缩配置所属的伸缩组ID。
示例
场景 1 :为已有伸缩组创建伸缩配置。
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 为已有伸缩组创建一个简单的伸缩配置,指定实例规格、镜像和安全组。
en: Create a simple scaling configuration for an existing scaling group with specified instance type, image, and security group.
Parameters:
AutoScalingGroupId:
Type: String
Label:
zh-cn: 伸缩组ID
en: Scaling Group ID
Description:
zh-cn: 选择已创建的伸缩组ID。
en: Select an existing scaling group ID.
AssociationProperty: ALIYUN::ESS::AutoScalingGroup::AutoScalingGroupId
SecurityGroupId:
Type: String
Label:
zh-cn: 安全组ID
en: Security Group ID
Description:
zh-cn: 选择安全组ID。
en: Select a security group ID.
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
ImageId:
Type: String
Label:
zh-cn: 镜像ID
en: Image ID
Description:
zh-cn: 选择用于创建实例的镜像。
en: Select an image for creating instances.
AssociationProperty: ALIYUN::ECS::Image::ImageId
AssociationPropertyMetadata:
SupportedImageOwnerAlias:
- system
- self
- others
InstanceType:
Type: String
Label:
zh-cn: 实例规格
en: Instance Type
Description:
zh-cn: 选择ECS实例规格。
en: Select an ECS instance type.
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
InstanceChargeType: PostPaid
SystemDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。
en: Select a system disk category.
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
InstanceType: ${InstanceType}
Default: cloud_essd
Resources:
ScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
ScalingGroupId:
Ref: AutoScalingGroupId
SecurityGroupId:
Ref: SecurityGroupId
ImageId:
Ref: ImageId
InstanceType:
Ref: InstanceType
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize: 40
ScalingConfigurationName:
Ref: ALIYUN::StackName
InternetMaxBandwidthOut: 5
InternetChargeType: PayByTraffic
Outputs:
ScalingConfigurationId:
Description:
zh-cn: 伸缩配置ID。
en: Scaling configuration ID.
Label:
zh-cn: 伸缩配置ID
en: Scaling Configuration ID
Value:
Fn::GetAtt:
- ScalingConfiguration
- ScalingConfigurationId
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- AutoScalingGroupId
- SecurityGroupId
- ImageId
- InstanceType
- SystemDiskCategory{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "为已有伸缩组创建一个简单的伸缩配置,指定实例规格、镜像和安全组。",
"en": "Create a simple scaling configuration for an existing scaling group with specified instance type, image, and security group."
},
"Parameters": {
"AutoScalingGroupId": {
"Type": "String",
"Label": {
"zh-cn": "伸缩组ID",
"en": "Scaling Group ID"
},
"Description": {
"zh-cn": "选择已创建的伸缩组ID。",
"en": "Select an existing scaling group ID."
},
"AssociationProperty": "ALIYUN::ESS::AutoScalingGroup::AutoScalingGroupId"
},
"SecurityGroupId": {
"Type": "String",
"Label": {
"zh-cn": "安全组ID",
"en": "Security Group ID"
},
"Description": {
"zh-cn": "选择安全组ID。",
"en": "Select a security group ID."
},
"AssociationProperty": "ALIYUN::ECS::SecurityGroup::SecurityGroupId"
},
"ImageId": {
"Type": "String",
"Label": {
"zh-cn": "镜像ID",
"en": "Image ID"
},
"Description": {
"zh-cn": "选择用于创建实例的镜像。",
"en": "Select an image for creating instances."
},
"AssociationProperty": "ALIYUN::ECS::Image::ImageId",
"AssociationPropertyMetadata": {
"SupportedImageOwnerAlias": [
"system",
"self",
"others"
]
}
},
"InstanceType": {
"Type": "String",
"Label": {
"zh-cn": "实例规格",
"en": "Instance Type"
},
"Description": {
"zh-cn": "选择ECS实例规格。",
"en": "Select an ECS instance type."
},
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"InstanceChargeType": "PostPaid"
}
},
"SystemDiskCategory": {
"Type": "String",
"Label": {
"zh-cn": "系统盘类型",
"en": "System Disk Category"
},
"Description": {
"zh-cn": "选择系统盘类型。",
"en": "Select a system disk category."
},
"AssociationProperty": "ALIYUN::ECS::Disk::SystemDiskCategory",
"AssociationPropertyMetadata": {
"InstanceType": "${InstanceType}"
},
"Default": "cloud_essd"
}
},
"Resources": {
"ScalingConfiguration": {
"Type": "ALIYUN::ESS::ScalingConfiguration",
"Properties": {
"ScalingGroupId": {
"Ref": "AutoScalingGroupId"
},
"SecurityGroupId": {
"Ref": "SecurityGroupId"
},
"ImageId": {
"Ref": "ImageId"
},
"InstanceType": {
"Ref": "InstanceType"
},
"SystemDiskCategory": {
"Ref": "SystemDiskCategory"
},
"SystemDiskSize": 40,
"ScalingConfigurationName": {
"Ref": "ALIYUN::StackName"
},
"InternetMaxBandwidthOut": 5,
"InternetChargeType": "PayByTraffic"
}
}
},
"Outputs": {
"ScalingConfigurationId": {
"Description": {
"zh-cn": "伸缩配置ID。",
"en": "Scaling configuration ID."
},
"Label": {
"zh-cn": "伸缩配置ID",
"en": "Scaling Configuration ID"
},
"Value": {
"Fn::GetAtt": [
"ScalingConfiguration",
"ScalingConfigurationId"
]
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"AutoScalingGroupId",
"SecurityGroupId",
"ImageId",
"InstanceType",
"SystemDiskCategory"
]
}
]
}
}
}场景 2 :创建 VPC 网络并构建完整伸缩组基础架构。
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建VPC、交换机、安全组、伸缩组和伸缩配置,并启用伸缩组,实现完整的弹性伸缩基础架构。
en: Create VPC, VSwitch, Security Group, Scaling Group and Scaling Configuration, then enable the scaling group to build a complete auto-scaling infrastructure.
Parameters:
ZoneId:
Type: String
Label:
zh-cn: 可用区
en: Availability Zone
Description:
zh-cn: 选择可用区。
en: Select an availability zone.
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
AssociationPropertyMetadata:
AutoSelectFirst: true
InstanceType:
Type: String
Label:
zh-cn: 实例规格
en: Instance Type
Description:
zh-cn: 选择ECS实例规格。
en: Select an ECS instance type.
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
InstanceChargeType: PostPaid
ZoneId: ${ZoneId}
ImageId:
Type: String
Label:
zh-cn: 镜像ID
en: Image ID
Description:
zh-cn: 选择用于创建实例的镜像。
en: Select an image for creating instances.
AssociationProperty: ALIYUN::ECS::Image::ImageId
AssociationPropertyMetadata:
SupportedImageOwnerAlias:
- system
- self
- others
SystemDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。
en: Select a system disk category.
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
InstanceType: ${InstanceType}
Default: cloud_essd
InstancePassword:
Type: String
Label:
zh-cn: 实例密码
en: Instance Password
Description:
zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。
en: Server login password, 8-30 characters, must contain three types (uppercase, lowercase, numbers, special symbols).
NoEcho: true
AssociationProperty: ALIYUN::ECS::Instance::Password
ConstraintDescription:
zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。
en: Length 8-30, must contain three types (uppercase, lowercase, numbers, special symbols).
MaxSize:
Type: Number
Label:
zh-cn: 最大实例数
en: Max Size
Description:
zh-cn: 伸缩组内ECS实例个数的最大值。
en: The maximum number of ECS instances in the scaling group.
Default: 5
MinValue: 0
MaxValue: 1000
MinSize:
Type: Number
Label:
zh-cn: 最小实例数
en: Min Size
Description:
zh-cn: 伸缩组内ECS实例个数的最小值。
en: The minimum number of ECS instances in the scaling group.
Default: 1
MinValue: 0
MaxValue: 1000
Resources:
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
VpcName:
Fn::Sub: ${ALIYUN::StackName}-vpc
CidrBlock: 192.168.0.0/16
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Fn::Sub: ${ALIYUN::StackName}-vsw
VpcId:
Ref: Vpc
CidrBlock: 192.168.0.0/24
ZoneId:
Ref: ZoneId
SecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Fn::Sub: ${ALIYUN::StackName}-sg
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: 22/22
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
- PortRange: 80/80
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
- PortRange: 443/443
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
ScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
DependsOn: SecurityGroup
Properties:
MinSize:
Ref: MinSize
MaxSize:
Ref: MaxSize
DefaultCooldown: 300
ScalingGroupName: web-autoscaling-group
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
HealthCheckType: ECS
RemovalPolicys:
- OldestInstance
- NewestInstance
GroupDeletionProtection: false
ScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
DependsOn: ScalingGroup
Properties:
ScalingGroupId:
Ref: ScalingGroup
SecurityGroupId:
Ref: SecurityGroup
ImageId:
Ref: ImageId
InstanceType:
Ref: InstanceType
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize: 40
ScalingConfigurationName: web-scaling-config
Password:
Ref: InstancePassword
InternetMaxBandwidthOut: 5
InternetChargeType: PayByTraffic
IoOptimized: optimized
TagList:
- Key: CreatedBy
Value: ROS
ScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingGroupId:
Ref: ScalingGroup
ScalingConfigurationId:
Ref: ScalingConfiguration
ScalingRuleArisExecuteVersion: 0
Outputs:
ScalingGroupId:
Description:
zh-cn: 伸缩组ID。
en: Scaling group ID.
Label:
zh-cn: 伸缩组ID
en: Scaling Group ID
Value:
Fn::GetAtt:
- ScalingGroup
- ScalingGroupId
ScalingConfigurationId:
Description:
zh-cn: 伸缩配置ID。
en: Scaling configuration ID.
Label:
zh-cn: 伸缩配置ID
en: Scaling Configuration ID
Value:
Fn::GetAtt:
- ScalingConfiguration
- ScalingConfigurationId
SecurityGroupId:
Description:
zh-cn: 安全组ID。
en: Security group ID.
Label:
zh-cn: 安全组ID
en: Security Group ID
Value:
Ref: SecurityGroup
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- InstanceType
- ImageId
- SystemDiskCategory
- InstancePassword
- Parameters:
- MaxSize
- MinSize{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "创建VPC、交换机、安全组、伸缩组和伸缩配置,并启用伸缩组,实现完整的弹性伸缩基础架构。",
"en": "Create VPC, VSwitch, Security Group, Scaling Group and Scaling Configuration, then enable the scaling group to build a complete auto-scaling infrastructure."
},
"Parameters": {
"ZoneId": {
"Type": "String",
"Label": {
"zh-cn": "可用区",
"en": "Availability Zone"
},
"Description": {
"zh-cn": "选择可用区。",
"en": "Select an availability zone."
},
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"AssociationPropertyMetadata": {
"AutoSelectFirst": true
}
},
"InstanceType": {
"Type": "String",
"Label": {
"zh-cn": "实例规格",
"en": "Instance Type"
},
"Description": {
"zh-cn": "选择ECS实例规格。",
"en": "Select an ECS instance type."
},
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"InstanceChargeType": "PostPaid",
"ZoneId": "${ZoneId}"
}
},
"ImageId": {
"Type": "String",
"Label": {
"zh-cn": "镜像ID",
"en": "Image ID"
},
"Description": {
"zh-cn": "选择用于创建实例的镜像。",
"en": "Select an image for creating instances."
},
"AssociationProperty": "ALIYUN::ECS::Image::ImageId",
"AssociationPropertyMetadata": {
"SupportedImageOwnerAlias": [
"system",
"self",
"others"
]
}
},
"SystemDiskCategory": {
"Type": "String",
"Label": {
"zh-cn": "系统盘类型",
"en": "System Disk Category"
},
"Description": {
"zh-cn": "选择系统盘类型。",
"en": "Select a system disk category."
},
"AssociationProperty": "ALIYUN::ECS::Disk::SystemDiskCategory",
"AssociationPropertyMetadata": {
"InstanceType": "${InstanceType}"
},
"Default": "cloud_essd"
},
"InstancePassword": {
"Type": "String",
"Label": {
"zh-cn": "实例密码",
"en": "Instance Password"
},
"Description": {
"zh-cn": "服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。",
"en": "Server login password, 8-30 characters, must contain three types (uppercase, lowercase, numbers, special symbols)."
},
"NoEcho": true,
"AssociationProperty": "ALIYUN::ECS::Instance::Password",
"ConstraintDescription": {
"zh-cn": "长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。",
"en": "Length 8-30, must contain three types (uppercase, lowercase, numbers, special symbols)."
}
},
"MaxSize": {
"Type": "Number",
"Label": {
"zh-cn": "最大实例数",
"en": "Max Size"
},
"Description": {
"zh-cn": "伸缩组内ECS实例个数的最大值。",
"en": "The maximum number of ECS instances in the scaling group."
},
"Default": 5,
"MinValue": 0,
"MaxValue": 1000
},
"MinSize": {
"Type": "Number",
"Label": {
"zh-cn": "最小实例数",
"en": "Min Size"
},
"Description": {
"zh-cn": "伸缩组内ECS实例个数的最小值。",
"en": "The minimum number of ECS instances in the scaling group."
},
"Default": 1,
"MinValue": 0,
"MaxValue": 1000
}
},
"Resources": {
"Vpc": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"VpcName": {
"Fn::Sub": "${ALIYUN::StackName}-vpc"
},
"CidrBlock": "192.168.0.0/16"
}
},
"VSwitch": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VSwitchName": {
"Fn::Sub": "${ALIYUN::StackName}-vsw"
},
"VpcId": {
"Ref": "Vpc"
},
"CidrBlock": "192.168.0.0/24",
"ZoneId": {
"Ref": "ZoneId"
}
}
},
"SecurityGroup": {
"Type": "ALIYUN::ECS::SecurityGroup",
"Properties": {
"SecurityGroupName": {
"Fn::Sub": "${ALIYUN::StackName}-sg"
},
"VpcId": {
"Ref": "Vpc"
},
"SecurityGroupIngress": [
{
"PortRange": "22/22",
"Priority": 1,
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
},
{
"PortRange": "80/80",
"Priority": 1,
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
},
{
"PortRange": "443/443",
"Priority": 1,
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
}
],
"SecurityGroupEgress": [
{
"PortRange": "-1/-1",
"Priority": 1,
"IpProtocol": "all",
"DestCidrIp": "0.0.0.0/0",
"NicType": "intranet"
}
]
}
},
"ScalingGroup": {
"Type": "ALIYUN::ESS::ScalingGroup",
"DependsOn": "SecurityGroup",
"Properties": {
"MinSize": {
"Ref": "MinSize"
},
"MaxSize": {
"Ref": "MaxSize"
},
"DefaultCooldown": 300,
"ScalingGroupName": "web-autoscaling-group",
"VpcId": {
"Ref": "Vpc"
},
"VSwitchId": {
"Ref": "VSwitch"
},
"HealthCheckType": "ECS",
"RemovalPolicys": [
"OldestInstance",
"NewestInstance"
],
"GroupDeletionProtection": false
}
},
"ScalingConfiguration": {
"Type": "ALIYUN::ESS::ScalingConfiguration",
"DependsOn": "ScalingGroup",
"Properties": {
"ScalingGroupId": {
"Ref": "ScalingGroup"
},
"SecurityGroupId": {
"Ref": "SecurityGroup"
},
"ImageId": {
"Ref": "ImageId"
},
"InstanceType": {
"Ref": "InstanceType"
},
"SystemDiskCategory": {
"Ref": "SystemDiskCategory"
},
"SystemDiskSize": 40,
"ScalingConfigurationName": "web-scaling-config",
"Password": {
"Ref": "InstancePassword"
},
"InternetMaxBandwidthOut": 5,
"InternetChargeType": "PayByTraffic",
"IoOptimized": "optimized",
"TagList": [
{
"Key": "CreatedBy",
"Value": "ROS"
}
]
}
},
"ScalingGroupEnable": {
"Type": "ALIYUN::ESS::ScalingGroupEnable",
"Properties": {
"ScalingGroupId": {
"Ref": "ScalingGroup"
},
"ScalingConfigurationId": {
"Ref": "ScalingConfiguration"
},
"ScalingRuleArisExecuteVersion": 0
}
}
},
"Outputs": {
"ScalingGroupId": {
"Description": {
"zh-cn": "伸缩组ID。",
"en": "Scaling group ID."
},
"Label": {
"zh-cn": "伸缩组ID",
"en": "Scaling Group ID"
},
"Value": {
"Fn::GetAtt": [
"ScalingGroup",
"ScalingGroupId"
]
}
},
"ScalingConfigurationId": {
"Description": {
"zh-cn": "伸缩配置ID。",
"en": "Scaling configuration ID."
},
"Label": {
"zh-cn": "伸缩配置ID",
"en": "Scaling Configuration ID"
},
"Value": {
"Fn::GetAtt": [
"ScalingConfiguration",
"ScalingConfigurationId"
]
}
},
"SecurityGroupId": {
"Description": {
"zh-cn": "安全组ID。",
"en": "Security group ID."
},
"Label": {
"zh-cn": "安全组ID",
"en": "Security Group ID"
},
"Value": {
"Ref": "SecurityGroup"
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"ZoneId",
"InstanceType",
"ImageId",
"SystemDiskCategory",
"InstancePassword"
]
},
{
"Parameters": [
"MaxSize",
"MinSize"
]
}
]
}
}
}场景 3 :创建包含 CLB 负载均衡与生命周期挂钩的完整自动伸缩方案
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建完整的弹性伸缩方案,包含VPC网络、CLB负载均衡、多实例规格伸缩配置(含抢占式实例策略和数据盘)、生命周期挂钩(自动部署应用)、伸缩组启用与负载均衡挂载,实现高可用自动伸缩与自动运维。
en: Create a complete auto-scaling solution including VPC network, CLB load balancer, multi-instance-type scaling configuration with spot strategy and data disks, lifecycle hooks for automatic application deployment, scaling group enablement and load balancer attachment, achieving high-availability auto-scaling and automated O&M.
Parameters:
ZoneId:
Type: String
Label:
zh-cn: 可用区
en: Availability Zone
Description:
zh-cn: 选择可用区。
en: Select an availability zone.
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
AssociationPropertyMetadata:
AutoSelectFirst: true
InstanceType:
Type: String
Label:
zh-cn: 主实例规格
en: Primary Instance Type
Description:
zh-cn: 选择ECS主实例规格(伸缩配置将同时配置备选规格以应对库存不足)。
en: Select the primary ECS instance type (the scaling configuration will also configure alternate types for inventory fallback).
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
InstanceChargeType: PostPaid
ZoneId: ${ZoneId}
ImageId:
Type: String
Label:
zh-cn: 镜像ID
en: Image ID
Description:
zh-cn: 选择用于创建实例的镜像。
en: Select an image for creating instances.
AssociationProperty: ALIYUN::ECS::Image::ImageId
AssociationPropertyMetadata:
SupportedImageOwnerAlias:
- system
- self
- others
SystemDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。
en: Select a system disk category.
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
InstanceType: ${InstanceType}
Default: cloud_essd
InstancePassword:
Type: String
Label:
zh-cn: 实例密码
en: Instance Password
Description:
zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。
en: Server login password, 8-30 characters, must contain three types (uppercase, lowercase, numbers, special symbols).
NoEcho: true
AssociationProperty: ALIYUN::ECS::Instance::Password
ConstraintDescription:
zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。
en: Length 8-30, must contain three types (uppercase, lowercase, numbers, special symbols).
MaxSize:
Type: Number
Label:
zh-cn: 最大实例数
en: Max Size
Description:
zh-cn: 伸缩组内ECS实例个数的最大值。
en: The maximum number of ECS instances in the scaling group.
Default: 10
MinValue: 0
MaxValue: 1000
MinSize:
Type: Number
Label:
zh-cn: 最小实例数
en: Min Size
Description:
zh-cn: 伸缩组内ECS实例个数的最小值。
en: The minimum number of ECS instances in the scaling group.
Default: 2
MinValue: 0
MaxValue: 1000
DesiredCapacity:
Type: Number
Label:
zh-cn: 期望实例数
en: Desired Capacity
Description:
zh-cn: 伸缩组内ECS实例的期望数量。
en: The desired number of ECS instances in the scaling group.
Default: 2
MinValue: 0
MaxValue: 1000
DataDiskSize:
Type: Number
Label:
zh-cn: 数据盘大小(GB)
en: Data Disk Size (GB)
Description:
zh-cn: 数据盘大小,单位GB。
en: Data disk size in GB.
Default: 100
MinValue: 20
MaxValue: 32768
Resources:
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
VpcName:
Fn::Sub: ${ALIYUN::StackName}-vpc
CidrBlock: 192.168.0.0/16
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Fn::Sub: ${ALIYUN::StackName}-vsw
VpcId:
Ref: Vpc
CidrBlock: 192.168.0.0/24
ZoneId:
Ref: ZoneId
SecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Fn::Sub: ${ALIYUN::StackName}-sg
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: 22/22
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
- PortRange: 80/80
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
- PortRange: 443/443
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
LoadBalancer:
Type: ALIYUN::SLB::LoadBalancer
Properties:
LoadBalancerName:
Fn::Sub: ${ALIYUN::StackName}-slb
AddressType: internet
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
LoadBalancerSpec: slb.s2.medium
Bandwidth: 5
LoadBalancerListener:
Type: ALIYUN::SLB::Listener
Properties:
LoadBalancerId:
Ref: LoadBalancer
ListenerPort: 80
BackendServerPort: 80
Bandwidth: 5
HealthCheck:
HealthCheckType: http
Interval: 5
Timeout: 3
URI: /
HttpCode: http_2xx,http_3xx,http_4xx,http_5xx
HealthyThreshold: 2
UnhealthyThreshold: 3
Port: 80
Scheduler: wrr
Protocol: http
ScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
DependsOn: SecurityGroup
Properties:
MinSize:
Ref: MinSize
MaxSize:
Ref: MaxSize
DesiredCapacity:
Ref: DesiredCapacity
DefaultCooldown: 300
ScalingGroupName: web-autoscaling-group
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
HealthCheckType: ECS
MultiAZPolicy: PRIORITY
RemovalPolicys:
- OldestScalingConfiguration
- OldestInstance
GroupDeletionProtection: false
ScalingPolicy: release
LoadBalancerIds:
- Ref: LoadBalancer
ScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
DependsOn: ScalingGroup
Properties:
ScalingGroupId:
Ref: ScalingGroup
SecurityGroupId:
Ref: SecurityGroup
ImageId:
Ref: ImageId
InstanceType:
Ref: InstanceType
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize: 40
SystemDiskPerformanceLevel: PL1
ScalingConfigurationName: web-scaling-config
Password:
Ref: InstancePassword
InternetMaxBandwidthOut: 5
InternetChargeType: PayByTraffic
IoOptimized: optimized
SpotStrategy: SpotWithPriceLimit
SpotPriceLimit: 0.5
SpotDuration: 1
LoadBalancerWeight: 50
DiskMappings:
- Category:
Ref: SystemDiskCategory
Size:
Ref: DataDiskSize
DiskName: data-disk
DeleteWithInstance: true
PerformanceLevel: PL1
TagList:
- Key: CreatedBy
Value: ROS
- Key: Environment
Value: Production
ScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingGroupId:
Ref: ScalingGroup
ScalingConfigurationId:
Ref: ScalingConfiguration
ScalingRuleArisExecuteVersion: 0
LifecycleHookForScaleOut:
Type: ALIYUN::ESS::LifecycleHook
DependsOn: ScalingGroupEnable
Properties:
ScalingGroupId:
Ref: ScalingGroup
LifecycleHookName: scale-out-hook
LifecycleTransition: SCALE_OUT
DefaultResult: CONTINUE
HeartbeatTimeout: 600
NotificationArn:
Fn::Join:
- ''
- - 'acs:ess:'
- Ref: ALIYUN::Region
- ':'
- Ref: ALIYUN::TenantId
- ':'
- oos/ACS-ESS-LifeCycleRunCommand
NotificationMetadata:
Fn::Sub: |-
{
"commandContent": "#!/bin/bash\nyum install -y nginx\nsystemctl enable nginx\nsystemctl start nginx",
"commandType": "RunShellScript"
}
LifecycleHookForScaleIn:
Type: ALIYUN::ESS::LifecycleHook
DependsOn: ScalingGroupEnable
Properties:
ScalingGroupId:
Ref: ScalingGroup
LifecycleHookName: scale-in-hook
LifecycleTransition: SCALE_IN
DefaultResult: CONTINUE
HeartbeatTimeout: 300
Outputs:
ScalingGroupId:
Description:
zh-cn: 伸缩组ID。
en: Scaling group ID.
Label:
zh-cn: 伸缩组ID
en: Scaling Group ID
Value:
Fn::GetAtt:
- ScalingGroup
- ScalingGroupId
ScalingConfigurationId:
Description:
zh-cn: 伸缩配置ID。
en: Scaling configuration ID.
Label:
zh-cn: 伸缩配置ID
en: Scaling Configuration ID
Value:
Fn::GetAtt:
- ScalingConfiguration
- ScalingConfigurationId
LoadBalancerId:
Description:
zh-cn: 负载均衡实例ID。
en: Load balancer ID.
Label:
zh-cn: 负载均衡ID
en: Load Balancer ID
Value:
Ref: LoadBalancer
LoadBalancerPublicIp:
Description:
zh-cn: 负载均衡公网IP。
en: Load balancer public IP.
Label:
zh-cn: 负载均衡公网IP
en: Load Balancer Public IP
Value:
Fn::GetAtt:
- LoadBalancer
- IpAddress
Console.LoadBalancerUrl:
Description:
zh-cn: 负载均衡访问地址。
en: Load balancer access URL.
Label:
zh-cn: 负载均衡地址
en: Load Balancer URL
Value:
Fn::Sub:
- http://${Ip}
- Ip:
Fn::GetAtt:
- LoadBalancer
- IpAddress
SecurityGroupId:
Description:
zh-cn: 安全组ID。
en: Security group ID.
Label:
zh-cn: 安全组ID
en: Security Group ID
Value:
Ref: SecurityGroup
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- InstanceType
- ImageId
- SystemDiskCategory
- InstancePassword
- Parameters:
- MaxSize
- MinSize
- DesiredCapacity
- DataDiskSize{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": {
"zh-cn": "创建完整的弹性伸缩方案,包含VPC网络、CLB负载均衡、多实例规格伸缩配置(含抢占式实例策略和数据盘)、生命周期挂钩(自动部署应用)、伸缩组启用与负载均衡挂载,实现高可用自动伸缩与自动运维。",
"en": "Create a complete auto-scaling solution including VPC network, CLB load balancer, multi-instance-type scaling configuration with spot strategy and data disks, lifecycle hooks for automatic application deployment, scaling group enablement and load balancer attachment, achieving high-availability auto-scaling and automated O&M."
},
"Parameters": {
"ZoneId": {
"Type": "String",
"Label": {
"zh-cn": "可用区",
"en": "Availability Zone"
},
"Description": {
"zh-cn": "选择可用区。",
"en": "Select an availability zone."
},
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"AssociationPropertyMetadata": {
"AutoSelectFirst": true
}
},
"InstanceType": {
"Type": "String",
"Label": {
"zh-cn": "主实例规格",
"en": "Primary Instance Type"
},
"Description": {
"zh-cn": "选择ECS主实例规格(伸缩配置将同时配置备选规格以应对库存不足)。",
"en": "Select the primary ECS instance type (the scaling configuration will also configure alternate types for inventory fallback)."
},
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"InstanceChargeType": "PostPaid",
"ZoneId": "${ZoneId}"
}
},
"ImageId": {
"Type": "String",
"Label": {
"zh-cn": "镜像ID",
"en": "Image ID"
},
"Description": {
"zh-cn": "选择用于创建实例的镜像。",
"en": "Select an image for creating instances."
},
"AssociationProperty": "ALIYUN::ECS::Image::ImageId",
"AssociationPropertyMetadata": {
"SupportedImageOwnerAlias": [
"system",
"self",
"others"
]
}
},
"SystemDiskCategory": {
"Type": "String",
"Label": {
"zh-cn": "系统盘类型",
"en": "System Disk Category"
},
"Description": {
"zh-cn": "选择系统盘类型。",
"en": "Select a system disk category."
},
"AssociationProperty": "ALIYUN::ECS::Disk::SystemDiskCategory",
"AssociationPropertyMetadata": {
"InstanceType": "${InstanceType}"
},
"Default": "cloud_essd"
},
"InstancePassword": {
"Type": "String",
"Label": {
"zh-cn": "实例密码",
"en": "Instance Password"
},
"Description": {
"zh-cn": "服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。",
"en": "Server login password, 8-30 characters, must contain three types (uppercase, lowercase, numbers, special symbols)."
},
"NoEcho": true,
"AssociationProperty": "ALIYUN::ECS::Instance::Password",
"ConstraintDescription": {
"zh-cn": "长度8-30,必须包含三项(大写字母、小写字母、数字、特殊符号)。",
"en": "Length 8-30, must contain three types (uppercase, lowercase, numbers, special symbols)."
}
},
"MaxSize": {
"Type": "Number",
"Label": {
"zh-cn": "最大实例数",
"en": "Max Size"
},
"Description": {
"zh-cn": "伸缩组内ECS实例个数的最大值。",
"en": "The maximum number of ECS instances in the scaling group."
},
"Default": 10,
"MinValue": 0,
"MaxValue": 1000
},
"MinSize": {
"Type": "Number",
"Label": {
"zh-cn": "最小实例数",
"en": "Min Size"
},
"Description": {
"zh-cn": "伸缩组内ECS实例个数的最小值。",
"en": "The minimum number of ECS instances in the scaling group."
},
"Default": 2,
"MinValue": 0,
"MaxValue": 1000
},
"DesiredCapacity": {
"Type": "Number",
"Label": {
"zh-cn": "期望实例数",
"en": "Desired Capacity"
},
"Description": {
"zh-cn": "伸缩组内ECS实例的期望数量。",
"en": "The desired number of ECS instances in the scaling group."
},
"Default": 2,
"MinValue": 0,
"MaxValue": 1000
},
"DataDiskSize": {
"Type": "Number",
"Label": {
"zh-cn": "数据盘大小(GB)",
"en": "Data Disk Size (GB)"
},
"Description": {
"zh-cn": "数据盘大小,单位GB。",
"en": "Data disk size in GB."
},
"Default": 100,
"MinValue": 20,
"MaxValue": 32768
}
},
"Resources": {
"Vpc": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"VpcName": {
"Fn::Sub": "${ALIYUN::StackName}-vpc"
},
"CidrBlock": "192.168.0.0/16"
}
},
"VSwitch": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"VSwitchName": {
"Fn::Sub": "${ALIYUN::StackName}-vsw"
},
"VpcId": {
"Ref": "Vpc"
},
"CidrBlock": "192.168.0.0/24",
"ZoneId": {
"Ref": "ZoneId"
}
}
},
"SecurityGroup": {
"Type": "ALIYUN::ECS::SecurityGroup",
"Properties": {
"SecurityGroupName": {
"Fn::Sub": "${ALIYUN::StackName}-sg"
},
"VpcId": {
"Ref": "Vpc"
},
"SecurityGroupIngress": [
{
"PortRange": "22/22",
"Priority": 1,
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
},
{
"PortRange": "80/80",
"Priority": 1,
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
},
{
"PortRange": "443/443",
"Priority": 1,
"SourceCidrIp": "0.0.0.0/0",
"IpProtocol": "tcp"
}
],
"SecurityGroupEgress": [
{
"PortRange": "-1/-1",
"Priority": 1,
"IpProtocol": "all",
"DestCidrIp": "0.0.0.0/0",
"NicType": "intranet"
}
]
}
},
"LoadBalancer": {
"Type": "ALIYUN::SLB::LoadBalancer",
"Properties": {
"LoadBalancerName": {
"Fn::Sub": "${ALIYUN::StackName}-slb"
},
"AddressType": "internet",
"VpcId": {
"Ref": "Vpc"
},
"VSwitchId": {
"Ref": "VSwitch"
},
"LoadBalancerSpec": "slb.s2.medium",
"Bandwidth": 5
}
},
"LoadBalancerListener": {
"Type": "ALIYUN::SLB::Listener",
"Properties": {
"LoadBalancerId": {
"Ref": "LoadBalancer"
},
"ListenerPort": 80,
"BackendServerPort": 80,
"Bandwidth": 5,
"HealthCheck": {
"HealthCheckType": "http",
"Interval": 5,
"Timeout": 3,
"URI": "/",
"HttpCode": "http_2xx,http_3xx,http_4xx,http_5xx",
"HealthyThreshold": 2,
"UnhealthyThreshold": 3,
"Port": 80
},
"Scheduler": "wrr",
"Protocol": "http"
}
},
"ScalingGroup": {
"Type": "ALIYUN::ESS::ScalingGroup",
"DependsOn": "SecurityGroup",
"Properties": {
"MinSize": {
"Ref": "MinSize"
},
"MaxSize": {
"Ref": "MaxSize"
},
"DesiredCapacity": {
"Ref": "DesiredCapacity"
},
"DefaultCooldown": 300,
"ScalingGroupName": "web-autoscaling-group",
"VpcId": {
"Ref": "Vpc"
},
"VSwitchId": {
"Ref": "VSwitch"
},
"HealthCheckType": "ECS",
"MultiAZPolicy": "PRIORITY",
"RemovalPolicys": [
"OldestScalingConfiguration",
"OldestInstance"
],
"GroupDeletionProtection": false,
"ScalingPolicy": "release",
"LoadBalancerIds": [
{
"Ref": "LoadBalancer"
}
]
}
},
"ScalingConfiguration": {
"Type": "ALIYUN::ESS::ScalingConfiguration",
"DependsOn": "ScalingGroup",
"Properties": {
"ScalingGroupId": {
"Ref": "ScalingGroup"
},
"SecurityGroupId": {
"Ref": "SecurityGroup"
},
"ImageId": {
"Ref": "ImageId"
},
"InstanceType": {
"Ref": "InstanceType"
},
"SystemDiskCategory": {
"Ref": "SystemDiskCategory"
},
"SystemDiskSize": 40,
"SystemDiskPerformanceLevel": "PL1",
"ScalingConfigurationName": "web-scaling-config",
"Password": {
"Ref": "InstancePassword"
},
"InternetMaxBandwidthOut": 5,
"InternetChargeType": "PayByTraffic",
"IoOptimized": "optimized",
"SpotStrategy": "SpotWithPriceLimit",
"SpotPriceLimit": 0.5,
"SpotDuration": 1,
"LoadBalancerWeight": 50,
"DiskMappings": [
{
"Category": {
"Ref": "SystemDiskCategory"
},
"Size": {
"Ref": "DataDiskSize"
},
"DiskName": "data-disk",
"DeleteWithInstance": true,
"PerformanceLevel": "PL1"
}
],
"TagList": [
{
"Key": "CreatedBy",
"Value": "ROS"
},
{
"Key": "Environment",
"Value": "Production"
}
]
}
},
"ScalingGroupEnable": {
"Type": "ALIYUN::ESS::ScalingGroupEnable",
"Properties": {
"ScalingGroupId": {
"Ref": "ScalingGroup"
},
"ScalingConfigurationId": {
"Ref": "ScalingConfiguration"
},
"ScalingRuleArisExecuteVersion": 0
}
},
"LifecycleHookForScaleOut": {
"Type": "ALIYUN::ESS::LifecycleHook",
"DependsOn": "ScalingGroupEnable",
"Properties": {
"ScalingGroupId": {
"Ref": "ScalingGroup"
},
"LifecycleHookName": "scale-out-hook",
"LifecycleTransition": "SCALE_OUT",
"DefaultResult": "CONTINUE",
"HeartbeatTimeout": 600,
"NotificationArn": {
"Fn::Join": [
"",
[
"acs:ess:",
{
"Ref": "ALIYUN::Region"
},
":",
{
"Ref": "ALIYUN::TenantId"
},
":",
"oos/ACS-ESS-LifeCycleRunCommand"
]
]
},
"NotificationMetadata": {
"Fn::Sub": "{\n \"commandContent\": \"#!/bin/bash\\nyum install -y nginx\\nsystemctl enable nginx\\nsystemctl start nginx\",\n \"commandType\": \"RunShellScript\"\n}"
}
}
},
"LifecycleHookForScaleIn": {
"Type": "ALIYUN::ESS::LifecycleHook",
"DependsOn": "ScalingGroupEnable",
"Properties": {
"ScalingGroupId": {
"Ref": "ScalingGroup"
},
"LifecycleHookName": "scale-in-hook",
"LifecycleTransition": "SCALE_IN",
"DefaultResult": "CONTINUE",
"HeartbeatTimeout": 300
}
}
},
"Outputs": {
"ScalingGroupId": {
"Description": {
"zh-cn": "伸缩组ID。",
"en": "Scaling group ID."
},
"Label": {
"zh-cn": "伸缩组ID",
"en": "Scaling Group ID"
},
"Value": {
"Fn::GetAtt": [
"ScalingGroup",
"ScalingGroupId"
]
}
},
"ScalingConfigurationId": {
"Description": {
"zh-cn": "伸缩配置ID。",
"en": "Scaling configuration ID."
},
"Label": {
"zh-cn": "伸缩配置ID",
"en": "Scaling Configuration ID"
},
"Value": {
"Fn::GetAtt": [
"ScalingConfiguration",
"ScalingConfigurationId"
]
}
},
"LoadBalancerId": {
"Description": {
"zh-cn": "负载均衡实例ID。",
"en": "Load balancer ID."
},
"Label": {
"zh-cn": "负载均衡ID",
"en": "Load Balancer ID"
},
"Value": {
"Ref": "LoadBalancer"
}
},
"LoadBalancerPublicIp": {
"Description": {
"zh-cn": "负载均衡公网IP。",
"en": "Load balancer public IP."
},
"Label": {
"zh-cn": "负载均衡公网IP",
"en": "Load Balancer Public IP"
},
"Value": {
"Fn::GetAtt": [
"LoadBalancer",
"IpAddress"
]
}
},
"Console.LoadBalancerUrl": {
"Description": {
"zh-cn": "负载均衡访问地址。",
"en": "Load balancer access URL."
},
"Label": {
"zh-cn": "负载均衡地址",
"en": "Load Balancer URL"
},
"Value": {
"Fn::Sub": [
"http://${Ip}",
{
"Ip": {
"Fn::GetAtt": [
"LoadBalancer",
"IpAddress"
]
}
}
]
}
},
"SecurityGroupId": {
"Description": {
"zh-cn": "安全组ID。",
"en": "Security group ID."
},
"Label": {
"zh-cn": "安全组ID",
"en": "Security Group ID"
},
"Value": {
"Ref": "SecurityGroup"
}
}
},
"Metadata": {
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
{
"Parameters": [
"ZoneId",
"InstanceType",
"ImageId",
"SystemDiskCategory",
"InstancePassword"
]
},
{
"Parameters": [
"MaxSize",
"MinSize",
"DesiredCapacity",
"DataDiskSize"
]
}
]
}
}
}