ALIYUN::ESS::ScalingGroup

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实例启动模板的版本。

取值:

  • 固定的模板版本号。

  • Default:始终使用模板默认版本。

  • Latest:始终使用模板最新版本。

RemovalPolicys

List

ECS实例移出伸缩组的策略。

取值:

  • OldestInstance(默认值):移出最早加入伸缩组的ECS实例。

  • NewestInstance:移出最新加入伸缩组的ECS实例。

  • OldestScalingConfiguration(默认值):移出最早伸缩配置创建的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实例扩缩容策略。

取值:

  • PRIORITY:根据您定义的虚拟交换机扩缩容。当优先级较高的虚拟交换机所在可用区无法创建ECS实例时,自动使用下一优先级的虚拟交换机创建ECS实例。

  • BALANCE:在伸缩组指定的多可用区之间均匀分配ECS实例。

  • COST_OPTIMIZED:按vCPU单价从低到高进行尝试创建。当伸缩配置设置了抢占式计费方式的多实例规格时,优先创建对应抢占式计费实例。当抢占式计费实例由于库存等原因无法创建时,自动尝试以按量付费的方式创建。

NotificationConfigurations

List

事件及资源变化通知的配置列表。

更多信息,请参见NotificationConfigurations属性

ProtectedInstances

List

伸缩组内处于保护模式的ECS实例个数。

最多支持1000个实例。

StandbyInstances

List

伸缩组内处于备用模式的ECS实例个数。

最多支持1000个实例。

HealthCheckType

String

健康检查类型。

取值:

  • ECS

  • NONE

GroupDeletionProtection

Boolean

是否开启伸缩组删除保护。

取值:

  • true:开启伸缩组删除保护,此时不能删除该伸缩组。

  • false(默认值):关闭伸缩组删除保护。

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实例数要求的按量实例。

取值:

  • true(默认值):允许。

  • false:不允许。

ContainerGroupId

String

ECI实例ID。

ScalingPolicy

String

指定伸缩组的回收模式。

取值:

  • recycle:停机模式。

  • release:释放模式。

ScalingPolicy指定伸缩组的回收模式,但实例被移出伸缩组时的具体动作,由RemoveInstances的RemovePolicy参数决定。更多信息,请参见RemoveInstances

SpotInstanceRemedy

Boolean

是否开启补齐抢占式实例。

取值:

  • true:开启补齐抢占式实例。

    开启后,当收到抢占式实例将被回收的系统消息时,伸缩组将尝试创建新的实例,替换掉将被回收的抢占式实例。

  • false:未开启补齐抢占式实例。

SpotInstancePools

Integer

指定可用实例规格的个数。

伸缩组将按成本最低的多个规格均衡创建抢占式实例。

取值范围:1~10。

OnDemandBaseCapacity

Integer

伸缩组所需要按量实例个数的最小值。

取值范围:0~1000。

当按量实例个数少于该值时,将优先创建按量实例。

GroupType

String

伸缩组管理的实例类型。

取值:

  • ECS(默认值):伸缩组内管理的伸缩为ECS实例。

  • ECI:伸缩组内管理的伸缩为ECI实例。

LaunchTemplateOverrides

List

扩展启动模板的实例规格信息。

AllocationStrategy

String

容量分配策略。

决定了伸缩组如何选择可用的实例规格类型满足容量。容量分布策略同时对按量和抢占式容量生效(仅当MultiAZPolicy参数取值为COMPOSABLE策略时生效)。

取值:

  • priority(默认值):按照配置的实例规格顺序创建实例。

  • lowestPrice:按照实例规格单位vCpu价格从低到高创建实例。

AzBalance

Boolean

伸缩组的容量是否在多个可用区间均衡分布。

仅当MultiAZPolicy参数取值为COMPOSABLE策略时生效。

取值:

  • true:伸缩组的容量在多个可用区间均衡分布。

  • false(默认值):伸缩组的容量不在多个可用区间均衡分布。

MaxInstanceLifetime

Integer

实例在伸缩组中存活的最大时间。

单位为秒。

取值范围:86400~Integer.maxValue

默认值:null。

CustomPolicyARN

String

自定义缩容策略Function函数ARN。

仅当RemovalPolicies配置第一个移除策略为CustomPolicy时生效。

SpotAllocationStrategy

String

抢占式容量分布策略。

通过该参数单独指定抢占式容量的分布策略(仅当MultiAZPolicy参数取值为COMPOSABLE策略时生效)。

取值:

  • priority(默认值):按照配置的实例规格顺序创建实例。

  • lowestPrice:按照实例规格单位vCpu价格从低到高创建实例 。

ServerGroups

List

负载均衡服务器组的配置。

更多信息,请参见ServerGroups属性

ResourceGroupId

String

资源组ID。

ServerGroups语法

"ServerGroups": [
  {
    "Type": String,
    "ServerGroupId": String,
    "Weight": Number,
    "Port": Number
  }
]  

ServerGroups属性

属性名称

类型

必须

允许更新

描述

约束

Type

String

负载均衡服务器组类型。

取值范围:

  • ALB:应用型负载均衡 ALB(Application Load Balancer)。

  • NLB:网络型负载均衡 NLB(Network Load Balancer)。

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)队列或主题。

取值:

  • SMQ队列:acs:ess:{region}:{account-id}:queue/{queuename}

  • SMQ主题:acs:ess:{region}:{account-id}:topic/{topicname}

NotificationTypes

List

ESS事件和资源更改通知类型。

Tags语法

"Tags": [
  {
    "Key": String,
    "Value": String
  }
]  

Tags属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

标签键。

长度为1~128个字符,不能以aliyunacs:开头,不能包含http://或者https://

Value

String

标签值。

长度为0~128个字符,不能以aliyunacs:开头,不能包含http://或者https://

LaunchTemplateOverrides语法

"LaunchTemplateOverrides": [
  {
    "InstanceType": String,
    "WeightedCapacity": Integer,
    "SpotPriceLimit": Number
  }
]  

LaunchTemplateOverrides属性

属性名称

类型

必须

允许更新

描述

约束

InstanceType

String

ECS实例规格。

当您需要伸缩组按照实例规格容量进行伸缩时,请同时指定本参数和LaunchTemplateOverrides.WeightedCapacity

本参数用于指定实例规格,会覆盖启动模板中的实例规格。

说明

仅当LaunchTemplateId参数指定了启动模板时,本参数生效。

WeightedCapacity

Integer

规格配置的权重。

当您需要伸缩组按照实例规格容量进行伸缩时, 先指定LaunchTemplateOverrides.InstanceType后,再指定本参数。

本参数用于指定实例规格的权重,即实例规格的单台实例在伸缩组中表示的容量大小。权重越大,满足期望容量所需的本实例规格的实例数量越少。

由于每个实例规格的vCPU个数、内存大小等性能指标会有差异,您可以根据自身需求,给不同的实例规格配置不同的权重。

例如:

  • 当前容量:0。

  • 期望容量:6。

  • ecs.c5.xlarge规格容量:4。

为满足期望容量,伸缩组将为用户扩容2台ecs.c5.xlarge实例。

本参数的取值范围:1~500。

说明

扩容时伸缩组的容量不得超过最大容量(MaxSize)与实例规格的最大权重之和。

SpotPriceLimit

Number

竞价价格上限。

本参数用于指定实例启动模板覆盖规格(即LaunchTemplateOverrides.InstanceType)的竞价价格上限。

说明

仅当LaunchTemplateId参数指定了启动模板时,该参数才生效。

返回值

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: {}