Utilice Alibaba Cloud Resource Orchestration Service (ROS) para aprovisionar una red VPC, un grupo de instancias ECS y un grupo de Auto Scaling (ESS) a partir de una sola plantilla YAML. Agregue las instancias ECS al grupo de escalado para que este escale horizontalmente o reduzca su tamaño automáticamente según la carga del negocio. Este tutorial es adecuado para escenarios que requieren gestión elástica de clústeres de servidores, como aplicaciones web y microservices.
Descripción general de la solución
Escenario de negocio
Cree por lotes instancias ECS en una Virtual Private Cloud (VPC) de Alibaba Cloud y agréguelas a un grupo de escalado. Una vez configuradas las reglas de escalado, el grupo aumenta o disminuye la cantidad de instancias ECS según la carga del negocio. Esto le permite gestionar de forma elástica los clústeres de servidores.
Recursos creados
|
Núm. |
Nombre del recurso |
Tipo de recurso de ROS |
Propósito |
|
1 |
VPC |
|
Proporciona un entorno de red aislado. |
|
2 |
|
|
Asigna un bloque CIDR de subred y especifica la zona dentro de la VPC. |
|
3 |
|
|
Controla las reglas de acceso de red entrante y saliente para las instancias ECS. |
|
4 |
ECS |
|
Crea por lotes las instancias ECS iniciales. |
|
5 |
|
|
Gestiona la política de escalado elástico (cantidades mínima y máxima de instancias). |
|
6 |
|
|
Define la plantilla de especificaciones de ECS que se utiliza durante el escalado horizontal. |
|
7 |
|
|
Habilita el grupo de escalado y le agrega las instancias ECS existentes. |
Resultados esperados tras el despliegue
Una vez que la plantilla se despliega correctamente, obtendrá lo siguiente:
Un entorno de red VPC completo que incluye la VPC, el VSwitch y el security group.
Un grupo de instancias ECS. La cantidad se define mediante el parámetro
ECSInstanceGroupCount, cuyo valor predeterminado es 3.Un grupo de escalado habilitado con una configuración de escalado para el escalado horizontal automático.
Todas las instancias ECS agregadas al grupo de escalado.
Diagrama de arquitectura

Requisitos previos
Antes de comenzar, confirme lo siguiente:
Cuenta y permisos: una cuenta de Alibaba Cloud con permisos para crear recursos en ECS, ESS (escalado elástico) y VPC.
Conocimientos previos: nociones básicas sobre la sintaxis y estructura de las plantillas de ROS. Para más detalles, consulte Quick start for templates.
Tutorial de creación de plantillas
Este tutorial muestra el proceso de creación de plantillas en dos fases:
Fase 1 (versión básica): utiliza valores de parámetros fijos y se centra en comprender las definiciones y dependencias de los recursos.
Fase 2 (versión avanzada): parametriza todas las configuraciones variables y añade filtrado dinámico y agrupación de parámetros.
Fase 1: plantilla básica — definición de recursos y sus dependencias
Paso 1: definir los recursos de red básicos (VPC + VSwitch + Security group)
Los recursos de red son la base de todos los demás recursos, por lo que deben crearse primero.
Resources:
# ============================================================
# Basic network layer: VPC → VSwitch → SecurityGroup
# ============================================================
Vpc:
Type: ALIYUN::ECS::VPC # Create the VPC
Properties:
CidrBlock: 192.168.0.0/16 # VPC CIDR block, which provides 65,534 private IP addresses
VpcName:
Ref: ALIYUN::StackName # Pseudo parameter: uses the stack name as the VPC name
VSwitch:
Type: ALIYUN::ECS::VSwitch # Create a VSwitch (subnet) in the VPC
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # Ref returns the VpcId of Vpc (an implicit dependency, so ROS creates Vpc first)
ZoneId: cn-beijing-h # This scenario uses zone H in the China (Beijing) region as an example
CidrBlock: 192.168.0.0/24 # Subnet CIDR block, which must be a subset of the VPC CIDR block
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup # Create the security group
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # Bind the security group to the same VPC
# Inbound rule: this example allows all inbound traffic for simplicity. Restrict the ports as needed in production.
SecurityGroupIngress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 0.0.0.0/0
NicType: intranet
Puntos clave:
Las configuraciones personalizadas como
VpcName,VSwitchNameySecurityGroupNamepueden establecerse con pseudoparámetros. Esto facilita localizar rápidamente los recursos desplegados por una pila específica después del despliegue.-
Las reglas de acceso de
SecurityGrouppueden personalizarse según los requisitos de su negocio. Por ejemplo:Para acceder a un servicio web desde Internet, abra el puerto entrante HTTP 80 u 8080 en el security group.
Para iniciar sesión en los servidores mediante SSH, abra el puerto entrante 22 en el security group.
Paso 2: definir el recurso ECS instance group
ALIYUN::ECS::InstanceGroup crea varias instancias ECS con la misma configuración de forma simultánea. Este método resulta más eficiente que declarar ALIYUN::ECS::Instance múltiples veces.
Resources:
# ============================================================
# Compute layer: batch-create ECS instances
# ============================================================
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup # Batch-create ECS instances
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd # CentOS 7.9 image
AllocatePublicIP: false # Do not allocate a public IP address
InstanceType: ecs.c5.large # Instance type: 2 vCPUs, 4 GiB
SystemDiskSize: 200 # 200 GiB system disk
SystemDiskCategory: cloud_essd # ESSD cloud disk
MaxAmount: 3 # Create 3 ECS instances
Password: <YourPassword> # Replace with an actual password at deployment time (must contain uppercase letters, lowercase letters, digits, and special characters)
InstanceName: # Instance name: stack name plus a sequence number, such as mystack-0001
Fn::Sub:
- ${StackName}-[1,4]
- StackName:
Ref: ALIYUN::StackName
Puntos clave:
ALIYUN::ECS::InstanceGrouputiliza la propiedadMaxAmountpara especificar la cantidad de instancias ECS que se van a crear.La función
Fn::Subconcatena cadenas de texto.[1,4]es un marcador de posición de número secuencial específico de ROS. Indica un número de cuatro dígitos que se incrementa a partir de 1, como 0001 y 0002.El atributo de salida
InstanceIdsde este recurso es una lista de identificadores de instancias ECS que el grupo de escalado puede referenciar.
Paso 3: definir los recursos del grupo de escalado (Scaling group+Scaling configuration+Enable scaling configuration)
Un grupo de escalado funciona mediante tres recursos: ScalingGroup define la política de escalado, ScalingConfiguration define la plantilla de ECS utilizada durante el escalado horizontal y ScalingGroupEnable habilita el grupo de escalado y le agrega las instancias existentes.
Resources:
# ============================================================
# Auto Scaling layer: scaling group + scaling configuration + enable scaling group
# ============================================================
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup # Create the scaling group
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance # Scale-in policy: removes the most recently created instances first
MinSize: 3 # The scaling group keeps at least 3 instances
MaxSize: 50 # The scaling group can scale out to at most 50 instances
VSwitchId:
Ref: VSwitch # Bind the scaling group to the VSwitch (determines the network location of instances added during scale-out)
DefaultCooldown: 300 # A cooldown period of 300 seconds prevents frequent scaling
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration # Scaling configuration (the ECS template used during scale-out)
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup # Associate with the scaling group defined above
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName} # Fn::Sub substitutes the pseudo parameter variable directly
InstanceType: ecs.c5.large # ECS instance type created during scale-out (should match the initial ECS instances)
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd # Image used during scale-out (should match the initial ECS instances)
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable # Enable the scaling group
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration # Specify the scaling configuration to take effect
InstanceIds:
# Add the ECS instances created in Step 2 to the scaling group
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds # Obtain the list of all instance IDs of InstanceGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
Puntos clave:
Establezca
MinSizedel grupo de escalado con el mismo valor queECSInstanceGroupCount(la cantidad de instancias creadas inicialmente). Así evitará que se active una reducción de escala inmediatamente después de habilitar el grupo.Es posible agregar una regla de escalado (ALIYUN::ESS::ScalingRule) y una tarea de alarma (ALIYUN::ESS::AlarmTask) al grupo de escalado para implementar el escalado automático basado en métricas como el uso de CPU y de memoria.
-
Diferencia entre
RefyFn::GetAtt:Refdevuelve el identificador principal de un recurso, como elVpcIdde una VPC.Fn::GetAttdevuelve un atributo relacionado de un recurso, como losInstanceIdsdeEcsInstanceGroup.
Versión básica — plantilla completa
A continuación se muestra la plantilla completa y lista para usarse, que combina los tres pasos anteriores:
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建VPC网络环境,批量部署ECS实例并加入伸缩组,实现弹性扩缩容管理
en: Create VPC network, deploy ECS instance group and manage them with ESS scaling group
Resources:
# === basic network layer ===
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock: 192.168.0.0/16
VpcName:
Ref: ALIYUN::StackName
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
ZoneId: cn-beijing-h
CidrBlock: 192.168.0.0/24
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 0.0.0.0/0
NicType: intranet
# === Computing layer ===
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd
AllocatePublicIP: false
InstanceType: ecs.c5.large
SystemDiskSize: 200
SystemDiskCategory: cloud_essd
MaxAmount: 3
Password: <YourPassword>
InstanceName:
Fn::Sub:
- ${StackName}-[1,4]
- StackName:
Ref: ALIYUN::StackName
# === ESS layer ===
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize: 3
MaxSize: 50
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName}
InstanceType: ecs.c5.large
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroup
Outputs:
ECSInstanceIds:
Label: ECS instance ID list
Value:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
Puntos clave:
Después de que la plantilla cree los recursos, puede consultar directamente los atributos internos de dichos recursos desde la sección Outputs de la plantilla, como la lista de identificadores de instancias ECS.
Fase 2: plantilla avanzada — parametrización y configuración dinámica
En la plantilla básica, propiedades como InstanceType, SystemDiskCategory e ImageId de las instancias ECS, así como MaxSize del grupo de escalado, utilizan valores fijos. Para reutilizar la plantilla en otra región o con especificaciones distintas, tendría que modificarla repetidamente. Además, los parámetros de una plantilla suelen depender unos de otros. Por ejemplo, el tipo de instancia ECS está limitado por la zona (cada zona tiene inventarios distintos de tipos de instancia), y la categoría del disco del sistema depende tanto de la zona como del tipo de instancia. Si especifica estos parámetros manualmente, es fácil elegir una combinación no disponible, lo que provoca que el despliegue falle.
Las siguientes optimizaciones mejoran considerablemente la flexibilidad y reutilización de la plantilla:
Parametrización (Parameters): extraiga las configuraciones variables como parámetros y especifíquelas de forma dinámica durante el despliegue.
Filtrado dinámico de parámetros (AssociationProperty): permita que la consola de ROS filtre automáticamente las opciones disponibles según los parámetros ya seleccionados.
Agrupación de parámetros (Metadata): muestre los parámetros en grupos lógicos dentro de la consola para mejorar la experiencia de entrada de datos.
Diagrama de dependencias de parámetros
El siguiente ejemplo utiliza el tipo de instancia ECS y la categoría del disco del sistema para mostrar la cadena de dependencias entre parámetros:
VSwitchZoneId (zone) ← base parameter, no prerequisite
├──→ ECSInstanceType (ECS instance type)
│ Depends on: ZoneId
│
└──→ ECSDiskCategory (system disk category)
Depends on: ZoneId + InstanceType
Lógica principal: seleccione primero la zona, luego filtre los tipos de instancia ECS disponibles en esa zona y, por último, filtre las categorías de disco compatibles con la zona y el tipo de instancia seleccionados. Cada paso muestra únicamente las opciones válidas bajo las condiciones actuales, lo que evita combinaciones incorrectas.
Explicación de AssociationProperty
1. VSwitchZoneId — zona (parámetro base)
Establezca AssociationProperty en ALIYUN::ECS::ZoneId para listar todas las zonas de la región actual. Ejemplo:
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
en: Select the availability zone for VSwitch, ECS and scaling group will be deployed here
AssociationProperty: ALIYUN::ECS::ZoneId
Este parámetro es la base de filtrado para todos los parámetros posteriores. Al seleccionar una zona, las listas de opciones de los demás parámetros se actualizan en consecuencia.
2. ECSInstanceType — tipo de instancia ECS
Establezca AssociationProperty en ALIYUN::ECS::Instance::InstanceType para listar los tipos de instancia ECS disponibles y asocie ${VSwitchZoneId} para filtrar los tipos de instancia disponibles en la zona seleccionada. Ejemplo:
ECSInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
El inventario de tipos de instancia varía según la zona. Sin filtrado, podría seleccionar un tipo sin existencias en la zona elegida, lo que provocaría un error de creación.
3. ECSDiskCategory — categoría del disco del sistema
Establezca AssociationProperty en ALIYUN::ECS::Disk::SystemDiskCategory para listar las categorías de disco del sistema disponibles. Además, asocie ${VSwitchZoneId} y ${ECSInstanceType} para filtrar las categorías de disco del sistema compatibles con la zona y el tipo de instancia ECS seleccionados. Ejemplo:
ECSDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: "System disk type. Options: cloud_essd, cloud_ssd, cloud_efficiency"
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
La disponibilidad de una categoría de disco del sistema depende tanto de la zona (algunas zonas no admiten ESSD) como del tipo de instancia (ciertos tipos solo admiten categorías específicas de disco).
Ejemplo de filtrado dinámico de parámetros
El siguiente ejemplo muestra el efecto de configurar AssociationProperty para obtener de forma dinámica los tipos de instancia ECS y las categorías de disco:
Parameters:
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
en: Select the availability zone for VSwitch, ECS and scaling group will be deployed here
AssociationProperty: ALIYUN::ECS::ZoneId
ECSInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
ECSDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: "System disk type. Options: cloud_essd, cloud_ssd, cloud_efficiency"
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
Funcionamiento de AssociationProperty
Cuando se crea una pila en la consola de ROS, la selección de parámetros se activa en cascada:
Seleccione una zona (
VSwitchZoneId).La lista desplegable de tipos de instancia ECS se actualiza automáticamente y muestra solo los tipos con existencias en esa zona.
Al seleccionar un tipo de instancia ECS, la lista desplegable de categorías de disco del sistema se actualiza automáticamente y muestra solo las categorías compatibles con esa zona y ese tipo de instancia.
De este modo, cada paso presenta únicamente las opciones disponibles bajo las condiciones actuales, lo que previene errores de despliegue causados por combinaciones de parámetros no válidas.
Grupos de parámetros en Metadata
Al configurar ALIYUN::ROS::Interface dentro de Metadata, puede dividir los parámetros en grupos lógicos, cada uno con su encabezado. La consola muestra los parámetros por grupo, lo que mejora significativamente la experiencia de entrada de datos.
Estructura de sintaxis de Metadata
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups: # List of parameter groups (required)
- Parameters: # List of parameter names in the group (required)
- Parameter1
- Parameter2
Label: # Group heading (required)
default:
zh-cn: 中文标题
en: English Title
Reglas de sintaxis de Metadata:
ParameterGroups,ParametersyLabelson obligatorios.Los nombres de parámetros listados en
Parametersdeben coincidir exactamente con los nombres definidos en la secciónParametersde la plantilla.Los parámetros que no aparecen en ningún grupo se muestran en un área sin agrupar dentro de la consola.
Diseño de grupos de parámetros
Esta plantilla divide nueve parámetros en tres grupos según el tipo de recurso:
┌────────────────────────────────────────────────────┐
│ Network configuration │
│ ├── VSwitch zone (VSwitchZoneId) │
│ ├── VPC CIDR block (VpcCidrBlock) │
│ └── VSwitch CIDR block (VSwitchCidrBlock) │
├────────────────────────────────────────────────────┤
│ ECS instance configuration │
│ ├── ECS instance type (ECSInstanceType) │
│ ├── ECS image ID (ECSImageId) │
│ ├── System disk category (ECSDiskCategory) │
│ ├── ECS instance password (EcsInstancePassword) │
│ └── ECS instance count (ECSInstanceGroupCount) │
├────────────────────────────────────────────────────┤
│ ESS scaling group configuration │
│ └── Maximum instance count (ESSGroupMaxSize) │
└────────────────────────────────────────────────────┘
Ejemplo de agrupación en Metadata
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 基础网络配置
en: Network Configuration
- Parameters:
- ECSInstanceType
- ECSDiskCategory
- ECSImageId
- EcsInstancePassword
- ECSInstanceGroupCount
Label:
default:
zh-cn: ECS实例配置
en: ECS Instance Configuration
- Parameters:
- ESSGroupMaxSize
Label:
default:
zh-cn: ESS伸缩组配置
en: Scaling Group Configuration
Versión avanzada — plantilla completa
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: >-
参数化模板:批量创建ECS实例并通过弹性伸缩组管理,支持自动扩缩容。
支持动态选择可用区、实例规格、磁盘类型和镜像,适用于多地域复用。
en: >-
Parameterized template: Create ECS instance group managed by ESS scaling group.
Supports dynamic selection of zone, instance type, disk category and image.
Parameters:
# ─── basic network parameters ───
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
en: Select the availability zone for VSwitch, ECS and scaling group will be deployed here
AssociationProperty: ALIYUN::ECS::ZoneId
VpcCidrBlock:
Type: String
Label:
zh-cn: VPC网段
en: VPC CIDR Block
Description:
zh-cn: VPC的IP地址段范围。推荐使用 10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16
en: VPC IP address range. Recommended 10.0.0.0/8, 172.16.0.0/12, or 192.168.0.0/16
Default: 192.168.0.0/16
VSwitchCidrBlock:
Type: String
Label:
zh-cn: 交换机网段
en: VSwitch CIDR Block
Description:
zh-cn: 必须是VPC网段的子网段,且不能与同VPC下其他交换机网段重叠
en: Must be a subnet of VPC CIDR and not overlap with other VSwitches
Default: 192.168.0.0/24
# ─── ECS instance parameters ───
ECSInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
en: ECS Instance Type
Description:
zh-cn: 选择ECS实例规格。列表已根据可用区自动过滤可用规格。
en: Select ECS instance type. List is filtered by selected availability zone.
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
ECSDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: "System disk type. Options: cloud_essd, cloud_ssd, cloud_efficiency"
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
ECSImageId:
Type: String
Label:
zh-cn: ECS镜像ID
en: Image ID
Description:
zh-cn: 选择ECS实例使用的操作系统镜像
en: Select the OS image for ECS instances
AssociationProperty: ALIYUN::ECS::Image::ImageId
ECSInstanceGroupCount:
Type: Number
Label:
zh-cn: ECS初始实例数量
en: Initial Instance Count
Description:
zh-cn: 初始创建的ECS实例数量,这些实例将加入伸缩组管理
en: Number of ECS instances to create initially, they will be added to scaling group
Default: 3
EcsInstancePassword:
Type: String
NoEcho: true
Label:
zh-cn: ECS实例密码
en: ECS Instance Password
Description:
zh-cn: 长度8-30位,需包含大写字母、小写字母、数字、特殊字符中的至少三种
en: Length 8-30, must contain at least three of uppercase, lowercase, digits, special characters
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
# ─── scaling group parameters ───
ESSGroupMaxSize:
Type: Number
Label:
zh-cn: 伸缩组最大实例数
en: Scaling Group Max Size
Description:
zh-cn: 伸缩组内ECS实例的最大数量,达到此上限后不再自动扩容
en: Maximum number of ECS instances in scaling group
Default: 50
Resources:
# === basic network layer ===
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock:
Ref: VpcCidrBlock
VpcName:
Ref: ALIYUN::StackName
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
ZoneId:
Ref: VSwitchZoneId
CidrBlock:
Ref: VSwitchCidrBlock
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: 8080/8080
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
NicType: internet
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: internet
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
# === Computing layer ===
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
InstanceName:
Fn::Sub:
- ${StackName}-[1,4]
- StackName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
SecurityGroupId:
Ref: EcsSecurityGroup
SystemDiskCategory:
Ref: ECSDiskCategory
SystemDiskSize: 200
MaxAmount:
Ref: ECSInstanceGroupCount
ImageId:
Ref: ECSImageId
InstanceType:
Ref: ECSInstanceType
Password:
Ref: EcsInstancePassword
AllocatePublicIP: false
# === ESS layer ===
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize:
Ref: ECSInstanceGroupCount
MaxSize:
Ref: ESSGroupMaxSize
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName}
InstanceType:
Ref: ECSInstanceType
SystemDiskCategory:
Ref: ECSDiskCategory
SystemDiskSize: 200
ImageId:
Ref: ECSImageId
InstanceName:
Fn::Sub:
- ${StackName}-[index,1,4]
- StackName:
Ref: ALIYUN::StackName
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroup
Outputs:
ECSInstanceIds:
Label: ECS 实例 ID 列表
Value:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
# === Metadata ===
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 基础网络配置
en: Network Configuration
- Parameters:
- ECSInstanceType
- ECSDiskCategory
- ECSImageId
- EcsInstancePassword
- ECSInstanceGroupCount
Label:
default:
zh-cn: ECS实例配置
en: ECS Instance Configuration
- Parameters:
- ESSGroupMaxSize
Label:
default:
zh-cn: 伸缩组配置
en: Scaling Group Configuration
Referencia rápida de las funciones integradas de ROS utilizadas en esta plantilla
|
Función |
Ejemplo de sintaxis |
Uso en esta plantilla |
Descripción |
|
|
|
Referencia el valor de un parámetro o el identificador principal de un recurso. |
Al referenciar un parámetro, devuelve su valor; al referenciar un recurso, devuelve su identificador principal. |
|
|
|
Obtiene la lista de identificadores de instancia del grupo de instancias ECS. |
Obtiene un atributo de salida de un recurso después de su creación (no el identificador principal). |
|
|
|
Concatena el nombre de la configuración de escalado. |
Utilice |
Despliegue
Parámetros de despliegue
Parámetros obligatorios (deben especificarse durante el despliegue)
|
Parámetro |
Descripción |
Restricción |
|
|
Identificador de la zona. |
Se selecciona de forma dinámica en la consola. |
|
|
Tipo de instancia ECS. |
Los tipos de instancia disponibles se filtran automáticamente según la zona. |
|
|
Categoría del disco del sistema de ECS. |
Se filtra automáticamente según la zona y el tipo de instancia. |
|
|
Identificador de la imagen de ECS. |
Se selecciona de forma dinámica en la consola. |
Parámetros opcionales (tienen valores predeterminados y pueden dejarse vacíos)
|
Parámetro |
Valor predeterminado |
Descripción |
|
|
192.168.0.0/16 |
Bloque CIDR de la VPC. |
|
|
192.168.0.0/24 |
Bloque CIDR de la subred del VSwitch. |
|
|
3 |
Cantidad de instancias ECS creadas inicialmente. |
|
|
50 |
Cantidad máxima de instancias en el grupo de escalado de ESS. |
|
|
Ninguna |
Contraseña de inicio de sesión de las instancias ECS. Debe tener entre 8 y 30 caracteres e incluir como mínimo tres de los siguientes tipos: letras mayúsculas, letras minúsculas, dígitos y caracteres especiales. |
Métodos de despliegue
Método 1: despliegue desde la consola de ROS
Inicie sesión en la consola de ROS.
En el panel de navegación izquierdo, elija Stacks > Create Stack.
Seleccione Select an Existing Template > Enter Template Content y pegue la plantilla completa en el editor.
Haga clic en Next y configure los parámetros por grupo.
Tras confirmar la configuración, haga clic en Create y espere a que el estado de la pila cambie a
CREATE_COMPLETE.
Método 2: despliegue mediante código IaC de ROS
IaC Code es un asistente de infraestructura como código basado en inteligencia artificial para infraestructura en la nube. Ayuda a los usuarios de recursos en la nube y a los ingenieros de operaciones a generar, desplegar y gestionar plantillas de infraestructura mediante un flujo de trabajo en terminal.
# Prompt
Deploy a group of ECS instances and manage them with an Auto Scaling group. Requirements:
1. Use a newly created VPC and VSwitch.
2. Create 3 ECS instances initially and add them to the scaling group.
3. Set the maximum number of instances in the scaling group to 50 and the minimum number to 3.
4. Set the scale-in policy to remove the newest instances first.
5. Open inbound port 8080 in the security group.
6. Configure VSwitchZoneId, ECSInstanceType, ECSDiskCategory, and ECSImageId with AssociationProperty so that they are dynamically filtered in the console.
Preguntas frecuentes
P1: El despliegue falla con el mensaje "The specified InstanceType is not available in the zone"
Causa: el tipo de instancia de ECS seleccionado no tiene existencias disponibles en la zona especificada.
Solución:
En la plantilla avanzada,
AssociationPropertyfiltra automáticamente los tipos de instancia disponibles, lo que evita este problema.Si utiliza la plantilla básica, vaya a Precios de Elastic Compute Service (ECS) para comprobar las existencias del tipo de instancia en la zona de destino o seleccione otra zona.
P2: El grupo de escalado activa una reducción de escala inmediatamente después de habilitarse
Causa: el valor de MinSize es mayor que la cantidad de instancias que realmente se unieron al grupo, o bien las instancias no lograron unirse.
Solución:
Asegúrese de que el valor de
ECSInstanceGroupCountsea mayor o igual que el valor deMinSizedel grupo de escalado.Compruebe si las instancias de ECS están en estado Running.
Confirme que las instancias y el grupo de escalado pertenezcan a la misma VPC o al mismo VSwitch.
P3: Las nuevas instancias de ECS creadas durante el escalado horizontal tienen una configuración inesperada
Causa: los valores de ScalingConfiguration, como InstanceType y ImageId, no coinciden con la configuración de las instancias de ECS iniciales.
Solución:
En la plantilla avanzada, los parámetros de
ScalingConfiguration, comoInstanceTypeyImageId, ya hacen referencia a los mismos parámetros queEcsInstanceGroup. Esto mantiene consistente la configuración del escalado horizontal.Si necesita escalar horizontalmente con configuraciones distintas, cree varios recursos
ScalingConfigurationy controle sus proporciones mediante ponderación.
P4: ¿Cómo implemento el escalado automático basado en el uso de CPU?
Solución: agregue una regla de escalado y una tarea de alarma a la plantilla:
# Scale-out rule: adds 2 instances each time
ScaleOutRule:
Type: ALIYUN::ESS::ScalingRule
Properties:
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingRuleName: scale-out-2
ScalingRuleType: SimpleScalingRule
AdjustmentType: QuantityChangeInCapacity # Adjust by quantity
AdjustmentValue: 2 # Add 2 instances each time
# Alarm trigger: triggers scale-out when CPU utilization exceeds 80%
CpuAlarm:
Type: ALIYUN::ESS::AlarmTask
Properties:
AlarmTaskName: cpu-high-alarm
ScalingGroupId:
Ref: EssInstanceScalingGroup
MetricName: CpuUtilization
Threshold: 80
ComparisonOperator: '>='
EvaluationCount: 3 # Triggers only after 3 consecutive samples exceed the threshold
AlarmActions:
- Fn::GetAtt:
- ScaleOutRule
- ScalingRuleAri
P5: ¿Cómo utilizo una VPC existente en lugar de crear una nueva?
Solución: elimine la VPC y el VSwitch de Resources y páselos mediante Parameters:
Parameters:
ExistingVpcId:
Type: String
Label:
en: Existing VPC ID
AssociationProperty: ALIYUN::ECS::VPC::VPCId
ExistingVSwitchId:
Type: String
Label:
en: Existing VSwitch ID
AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${ExistingVpcId}
P6: ¿Cómo asocio un SLB al grupo de escalado para distribuir el tráfico?
Solución: agregue LoadBalancerIds a Properties dentro de ScalingGroup:
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize:
Ref: ECSInstanceGroupCount
MaxSize:
Ref: ESSGroupMaxSize
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
LoadBalancerIds:
- Ref: MyLoadBalancer # References an existing SLB instance
Cuando el grupo de escalado agrega o elimina instancias, estas se añaden o se quitan automáticamente del grupo de servidores del backend de SLB.
Para más preguntas sobre el despliegue de recursos, consulte FAQ collection.