Esta solução demonstra como usar o Alibaba Cloud Resource Orchestration Service (ROS) para criar um cluster completo de service web com um único modelo YAML. O modelo provisiona uma VPC, um grupo de instâncias ECS com Nginx instalado, um Classic Load Balancer (CLB) e um endereço IP elástico (EIP) em uma única criação de stack. Esta solução é ideal para cenários que exigem implantação rápida de clusters de service web de alta disponibilidade (HA).
Visão geral da solução
Cenário de negócios
Em uma virtual private cloud (VPC) do Alibaba Cloud, crie instâncias ECS em massa. Use o ECS Cloud Assistant para instalar e iniciar o Nginx automaticamente. Após a inicialização, anexe as instâncias ECS a uma instância CLB para distribuição de tráfego e exponha o endpoint de acesso HTTP por meio de um EIP.
Recursos criados
|
Nº |
Recurso |
Tipo de recurso ROS |
Finalidade |
|
1 |
VPC |
|
Fornece um ambiente de rede isolado. |
|
2 |
|
|
Divide sub-redes dentro da VPC e especifica zonas. |
|
3 |
Grupo de segurança |
|
Abre a porta HTTP de entrada 80 e permite todo o tráfego de saída. |
|
4 |
Grupo de instâncias ECS |
|
Cria múltiplas instâncias ECS e implanta o Nginx automaticamente via |
|
5 |
Instância CLB |
|
Instância de Classic Load Balancer que distribui tráfego para as instâncias ECS de backend. |
|
6 |
Listener CLB |
|
Configura a porta do listener TCP/HTTP do CLB e as verificações de integridade. |
|
7 |
Anexação de servidor de backend |
|
Anexa o grupo de instâncias ECS ao CLB como servidores de backend. |
|
8 |
EIP |
|
Fornece um ponto de entrada de acesso à rede pública. |
|
9 |
Associação de EIP |
|
Associa o EIP à instância CLB. |
Resultados esperados após a implantação
Após a implantação bem-sucedida do modelo, você terá:
Um ambiente de rede VPC completo (incluindo VPC,
vSwitche grupo de segurança com a porta 80 aberta).Um grupo de instâncias ECS (2 instâncias por padrão) com montagem de disco de dados e Nginx implantado automaticamente.
Uma instância CLB configurada com um listener na porta TCP 80 e verificações de integridade.
Todas as instâncias ECS anexadas ao grupo de servidores de backend do CLB, com distribuição de tráfego por peso.
Um EIP associado ao CLB, acessível via
http://<EIP address>.
Diagrama de arquitetura

Pré-requisitos
Antes de usar este modelo, confirme os seguintes itens:
Permissões da conta: Sua conta Alibaba Cloud deve ter permissões de criação para ECS, CLB, VPC e EIP.
Conhecimento básico: Familiaridade com a sintaxe e estrutura básicas dos modelos ROS. Para mais informações, consulte ROS Template Getting Started.
Tutorial de escrita de modelos
Este tutorial demonstra o processo de escrita do modelo em duas fases:
Fase 1 (Modelo básico): Usa valores de parâmetros fixos para focar no entendimento das definições de recursos e nas relações de anexação do CLB.
Fase 2 (Modelo avançado): Parametriza todas as configurações variáveis e adiciona filtragem dinâmica de parâmetros, exibição condicional para tipo de faturamento e agrupamento de parâmetros.
Fase 1: Modelo básico — Definir recursos e dependências
Etapa 1: Definir recursos básicos de rede (VPC + vSwitch + security group)
Os recursos de rede são a base para todos os outros recursos e devem ser criados primeiro. O grupo de segurança deve abrir a porta HTTP de entrada 80 para permitir acesso externo ao Nginx.
Resources:
# ============================================================
# Network Layer: VPC → vSwitch → SecurityGroup
# ============================================================
Vpc:
Type: ALIYUN::ECS::VPC # Create a VPC
Properties:
CidrBlock: 192.168.0.0/16
VpcName:
Ref: ALIYUN::StackName # Pseudo parameter: use the stack name as the VPC name
VSwitch:
Type: ALIYUN::ECS::VSwitch # Create a vSwitch (subnet) within the VPC
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # Implicit dependency: ROS creates Vpc first
ZoneId: cn-beijing-h # This example uses Beijing zone H
CidrBlock: 192.168.0.0/24
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup # Create a security group
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress: # Inbound rule: open HTTP port 80 for Nginx
- PortRange: 80/80
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
NicType: internet
Conceitos principais
Para nomes personalizados como
VpcName,VSwitchNameeSecurityGroupName, use pseudoparâmetros para localizar rapidamente os recursos pertencentes a esta stack após a implantação.-
As regras do grupo de segurança podem ser personalizadas conforme suas necessidades:
Para permitir acesso externo a um service web, abra a porta HTTP de entrada 80 ou 8080.
Para permitir login SSH, abra a porta de entrada 22.
Em ambientes de produção, restrinja o
SourceCidrIpa intervalos de IP conhecidos em vez de0.0.0.0/0.
Etapa 2: Definir recursos CLB e EIP
A instância CLB distribui o tráfego recebido para múltiplas instâncias ECS de backend. O EIP fornece o ponto de entrada público.
Resources:
# ============================================================
# Load Balancing Layer: CLB + Listener + EIP
# ============================================================
Slb:
Type: ALIYUN::SLB::LoadBalancer # Create a Classic Load Balancer instance
Properties:
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
LoadBalancerName:
Fn::Sub: slb-${ALIYUN::StackName} # Fn::Sub concatenates strings
AddressType: intranet # Internal network CLB (public access via EIP)
LoadBalancerSpec: slb.s1.small
AutoPay: true
SlbListener:
Type: ALIYUN::SLB::Listener # Configure CLB listener
DependsOn:
- Slb # Explicit dependency: CLB must be created before adding a listener
Properties:
LoadBalancerId:
Ref: Slb
ListenerPort: 80 # Frontend listener port
BackendServerPort: 80 # Backend server port (Nginx default: 80)
Protocol: tcp # Layer 4 TCP forwarding
Bandwidth: -1 # -1 = unlimited; adjust based on CLB spec
Persistence: # Session persistence configuration
StickySession: 'on'
StickySessionType: insert # Cookie insertion
CookieTimeout: 60
PersistenceTimeout: 180
HealthCheck: # Health check configuration
HealthCheckType: tcp # TCP port probe
Port: 80
Interval: 2 # Check interval: 2 seconds
HealthyThreshold: 3 # 3 successes = healthy
UnhealthyThreshold: 3 # 3 failures = unhealthy
Timeout: 5 # Probe timeout: 5 seconds
EipSlbAddress:
Type: ALIYUN::VPC::EIP # Create an EIP
Properties:
Name:
Ref: ALIYUN::StackName
InternetChargeType: PayByTraffic # Pay by traffic
Bandwidth: 10 # Bandwidth cap: 10 Mbps
EipSlbAddressAssociation:
Type: ALIYUN::VPC::EIPAssociation # Associate EIP with CLB
Properties:
InstanceId:
Ref: Slb # Target: CLB instance
AllocationId:
Ref: EipSlbAddress # EIP resource ID
Conceitos principais:
-
Dependências implícitas versus explícitas:
Ao referenciar um recurso usando
RefouFn::GetAtt, o ROS determina automaticamente a dependência (implícita).Use
DependsOnapenas quando não houver referência direta entre dois recursos, mas a lógica de negócios exigir uma ordem específica de criação.
O CLB usa
AddressType: intranet(rede interna) e é vinculado a um EIP viaALIYUN::VPC::EIPAssociationpara fornecer acesso público. Este é o padrão de arquitetura recomendado.
Etapa 3: Definir o ECS instance group e usar Cloud Assistant para instalar o Nginx
As instâncias ECS executam um script de inicialização via Cloud Assistant para montar o disco de dados e instalar o Nginx.
Resources:
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ZoneId: cn-beijing-h
ImageId: centos_7
InstanceType: ecs.c5.large
MaxAmount: 2 # Create 2 ECS instances
AllocatePublicIP: false # No public IP (access via CLB + EIP)
IoOptimized: optimized
SystemDiskCategory: cloud_essd
SystemDiskSize: 40
DiskMappings: # Data disk configuration
- Category: cloud_essd
Size: 100
Password: <YourPassword> # Replace with actual password during deployment
RunSetup:
Type: ALIYUN::ECS::RunCommand
DependsOn: EcsInstanceGroup
Properties:
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
Type: RunShellScript
Sync: true
Timeout: 300
ContentEncoding: PlainText
CommandContent: |
#!/bin/bash
# === Data disk initialization: partition, format, mount to /disk1 ===
cat >> /root/InitDataDisk.sh << 'EOF'
#!/bin/bash
echo "p
n
p
w
" | fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /disk1
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
mount -a
# === Install and start Nginx ===
yum install -y nginx
systemctl start nginx.service
Conceitos principais
-
RefversusFn::GetAtt:Ref→ retorna o identificador principal do recurso (por exemplo, oVpcIdde uma VPC).Fn::GetAtt→ retorna outros atributos do recurso (por exemplo, osInstanceIdsde um grupo de instâncias ECS).
Etapa 4: Definir backend server attachment do CLB — Conectar instâncias ECS ao CLB
Use ALIYUN::SLB::BackendServerAttachment para anexar o grupo de instâncias ECS ao backend do CLB.
Resources:
# ============================================================
# Binding Layer: Attach ECS instance group to CLB backend servers
# ============================================================
SlbBackendServerAttachment:
Type: ALIYUN::SLB::BackendServerAttachment
DependsOn:
- EcsInstanceGroup # Explicit dependency: wait for ECS creation
Properties:
LoadBalancerId:
Ref: Slb
BackendServerList:
# Get all instance IDs from the ECS instance group
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
BackendServerWeightList: # Backend server weight list
- 100 # ECS instance 1: weight 100
- 100 # ECS instance 2: weight 100
Conceitos principais: Regras da BackendServerWeightList
Os valores de peso variam de 0 a 100. A instância com maior peso recebe mais tráfego.
Se a
BackendServerWeightListtiver menos entradas do que aBackendServerList, as instâncias ECS restantes usarão o último valor de peso da lista.
Modelo básico completo
A seguir está o modelo completo e pronto para implantação que combina todas as etapas acima:
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: Create VPC, deploy ECS with Nginx, attach to CLB, expose via EIP
en: Create VPC, deploy ECS group with Nginx, attach to CLB, expose via EIP
Resources:
# === 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: 80/80
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
# === Compute Layer ===
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7
InstanceType: ecs.c5.large
MaxAmount: 2
AllocatePublicIP: false
IoOptimized: optimized
SystemDiskCategory: cloud_essd
SystemDiskSize: 40
DiskMappings:
- Category: cloud_essd
Size: 100
Password: <YourPassword> # Replace with actual password during deployment
RunSetup:
Type: ALIYUN::ECS::RunCommand
DependsOn: EcsInstanceGroup
Properties:
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
Type: RunShellScript
Sync: true
Timeout: 300
ContentEncoding: PlainText
CommandContent: |
#!/bin/bash
# === Data disk initialization: partition, format, mount to /disk1 ===
cat >> /root/InitDataDisk.sh << 'EOF'
#!/bin/bash
echo "p
n
p
w
" | fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /disk1
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
mount -a
# === Install and start Nginx ===
yum install -y nginx
systemctl start nginx.service
# === Load Balancing Layer ===
Slb:
Type: ALIYUN::SLB::LoadBalancer
Properties:
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
LoadBalancerName:
Fn::Sub: slb-${ALIYUN::StackName}
AddressType: intranet
LoadBalancerSpec: slb.s1.small
AutoPay: true
SlbListener:
DependsOn:
- Slb
Type: ALIYUN::SLB::Listener
Properties:
LoadBalancerId:
Ref: Slb
ListenerPort: 80
BackendServerPort: 80
Protocol: tcp
Bandwidth: -1
Persistence:
StickySession: 'on'
StickySessionType: insert
CookieTimeout: 60
PersistenceTimeout: 180
HealthCheck:
HealthCheckType: tcp
Port: 80
Interval: 2
HealthyThreshold: 3
UnhealthyThreshold: 3
Timeout: 5
EipSlbAddress:
Type: ALIYUN::VPC::EIP
Properties:
Name:
Ref: ALIYUN::StackName
InternetChargeType: PayByTraffic
Bandwidth: 10
EipSlbAddressAssociation:
Type: ALIYUN::VPC::EIPAssociation
Properties:
InstanceId:
Ref: Slb
AllocationId:
Ref: EipSlbAddress
# === Binding Layer ===
SlbBackendServerAttachment:
DependsOn:
- EcsInstanceGroup
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServerList:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
LoadBalancerId:
Ref: Slb
BackendServerWeightList:
- 100
- 100
Outputs:
Endpoint:
Description:
zh-cn: Public HTTP endpoint
en: Public HTTP endpoint
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::GetAtt:
- EipSlbAddress
- EipAddress
Conceitos principais:
Após o modelo criar os recursos, use a seção Outputs para consultar atributos de recursos, como o endereço EIP vinculado ao CLB.
Fase 2: Modelo avançado — Parametrização e configuração dinâmica
O modelo básico usa valores fixos para InstanceType do ECS, SystemDiskCategory e LoadBalancerSpec do CLB. Parametrizar esses valores melhora significativamente a flexibilidade do modelo.
Este modelo introduz os seguintes recursos avançados:
Parametrização (Parameters) : Extrai configurações variáveis como parâmetros preenchidos dinamicamente no momento da implantação.
Filtragem dinâmica de parâmetros (AssociationProperty): Permite que o console ROS filtre automaticamente as opções disponíveis com base nos parâmetros selecionados.
Agrupamento de parâmetros (Metadata): Agrupa parâmetros por categoria lógica no console para melhorar a experiência de configuração.
Diagrama de dependência de parâmetros
O diagrama a seguir mostra a cadeia de dependências entre o tipo de instância ECS, o tipo de disco do sistema e a especificação da instância CLB:
ZoneId (zone — core filter parameter)
├── EcsInstanceType (filtered by zone + billing type)
│ ├── SystemDiskCategory (filtered by zone + instance type)
│ └── DataDiskCategory (filtered by zone + instance type)
└── LoadBalancerSpec (filtered by zone)
PayType (billing type)
├── PayPeriodUnit (shown only when PrePaid)
├── PayPeriod (shown only when PrePaid)
└── EcsInstanceType (filtered by zone + billing type)
Lógica principal: Selecione primeiro a zona e o tipo de faturamento do ECS e, em seguida, filtre os tipos de instância ECS e as especificações do CLB de acordo. Quando o faturamento por assinatura for selecionado, forneça a unidade e a duração do período de faturamento. Por fim, filtre os tipos de disco com base na zona e no tipo de instância ECS. Cada etapa mostra apenas as opções válidas nas condições atuais, evitando combinações inválidas de parâmetros.
Explicação sobre AssociationProperty
1. ZoneId — Zona de disponibilidade (Parâmetro base)
Defina AssociationProperty como ALIYUN::ECS::ZoneId para listar todas as zonas na região atual:
ZoneId:
Type: String
Label:
zh-cn: VSwitch Zone
en: VSwitch Availability Zone
Description:
zh-cn: Select zone for VSwitch, ECS and CLB
en: Select the availability zone for VSwitch, ECS and CLB will be deployed here
AssociationProperty: ALIYUN::ECS::ZoneId
Este parâmetro é a base de filtragem para todos os parâmetros subsequentes. Após selecionar uma zona, as listas de opções de todos os outros parâmetros são atualizadas automaticamente.
2. PayType — Tipo de faturamento do ECS
Defina o parâmetro PayType e use AssociationPropertyMetadata.Visible.Condition para mostrar os parâmetros de duração de faturamento apenas quando Subscription (PrePaid) for selecionado:
Parameters:
PayType:
Type: String
Label:
zh-cn: 付费类型
en: Charge Type
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Default: Month
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible: # Conditional display: show only when PayType is not PostPaid
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
zh-cn: 购买资源时长
en: Period
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
Quando Subscription (PostPaid) é selecionado no console ROS, os parâmetros de duração de faturamento são ocultados automaticamente. Eles aparecem apenas quando o usuário seleciona Subscription (PrePaid).
3. EcsInstanceType — Tipo de instância ECS
Defina AssociationProperty como ALIYUN::ECS::Instance::InstanceType para listar os tipos de instância ECS disponíveis, filtrados por ${ZoneId} e ${PayType}:
EcsInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${PayType}
A disponibilidade do tipo de instância varia por zona. Sem filtragem, os usuários podem selecionar um tipo de instância sem estoque disponível na zona escolhida, causando falha na criação da stack.
4. SystemDiskCategory — Tipo de disco do sistema
Defina AssociationProperty como ALIYUN::ECS::Disk::SystemDiskCategory para listar os tipos de disco do sistema disponíveis, filtrados por ${ZoneId} e ${EcsInstanceType}:
SystemDiskCategory:
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: ${ZoneId}
InstanceType: ${EcsInstanceType}
A disponibilidade do tipo de disco do sistema depende tanto da zona (algumas zonas não suportam ESSD) quanto do tipo de instância (alguns tipos de instância suportam apenas tipos específicos de disco).
5. LoadBalancerSpec — Especificação da instância CLB
Defina AssociationProperty como ALIYUN::SLB::Instance::InstanceType para listar as especificações de CLB disponíveis, filtradas por ${ZoneId}:
LoadBalancerSpec:
Type: String
Label:
zh-cn: CLB实例规格
en: CLB Instance Spec
Description:
zh-cn: 选择CLB实例规格,根据可用区自动过滤
en: Select CLB instance specification
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Modelo de filtragem dinâmica de parâmetros
Parameters:
ZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS和CLB将部署在此可用区
en: Select the availability zone for deployment
AssociationProperty: ALIYUN::ECS::ZoneId
PayType:
Type: String
Label:
zh-cn: 付费类型
en: Charge Type
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Default: Month
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
zh-cn: 购买资源时长
en: Period
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
EcsInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
en: ECS Instance Type
Description:
zh-cn: 选择ECS实例规格。列表已根据可用区和付费类型自动过滤。
en: Select ECS instance type, filtered by zone and charge type.
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${PayType}
SystemDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: System disk type
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
DataDiskCategory:
Type: String
Label:
zh-cn: 数据盘类型
en: Data Disk Category
Description:
zh-cn: 选择数据盘类型。可选值:cloud_essd、cloud_ssd、cloud_efficiency
en: Data disk type
AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
LoadBalancerSpec:
Type: String
Label:
zh-cn: CLB实例规格
en: CLB Instance Spec
Description:
zh-cn: 选择CLB实例规格,根据可用区自动过滤
en: Select CLB instance specification
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Como funciona o AssociationProperty
Quando um usuário cria uma stack no console ROS, a seleção de parâmetros ocorre em cascata:
Seleção da zona (
ZoneId).Seleção do tipo de faturamento do ECS (
PayType).Atualização automática da lista suspensa de tipos de instância ECS, mostrando apenas tipos com estoque disponível na zona selecionada que suportam o tipo de faturamento escolhido.
Atualização automática da lista suspensa de especificações de instância CLB, mostrando apenas especificações suportadas na zona selecionada.
Após a seleção de um tipo de instância ECS, atualização automática das listas suspensas de tipo de disco do sistema e tipo de disco de dados, mostrando apenas tipos suportados tanto pela zona quanto pelo tipo de instância selecionados.
Essa abordagem garante que cada seleção mostre apenas opções válidas nas condições atuais, evitando falhas de implantação decorrentes de combinações inválidas de parâmetros desde a origem.
Agrupamento de parâmetros com Metadata
Usando ALIYUN::ROS::Interface em Metadata, você pode organizar parâmetros em grupos lógicos com rótulos. O console ROS exibe os parâmetros em grupos, melhorando significativamente a experiência de configuração.
Sintaxe de Metadata
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups: # Parameter group list (required)
- Parameters: # List of parameter names in this group (required)
- paramName1
- paramName2
Label: # Group label (required)
default:
zh-cn: Chinese label
en: English label
Regras de sintaxe de Metadata:
ParameterGroups,ParameterseLabelsão obrigatórios.Os nomes de parâmetros listados em
Metadata.ALIYUN::ROS::Interface.ParameterGroups.Parametersdevem corresponder exatamente aos nomes definidos na seçãoParametersdo modelo.Parâmetros não incluídos em nenhum grupo são exibidos na área desagrupada do console.
Design de grupos de parâmetros para este modelo
Este modelo organiza 14 parâmetros em 4 grupos:
┌─────────────────────────────────────────────────┐
│ Network Configuration │
│ ├── VSwitch Availability Zone (ZoneId) │
│ ├── VPC CIDR Block (VpcCidrBlock) │
│ └── vSwitch CIDR Block (VSwitchCidrBlock) │
├─────────────────────────────────────────────────┤
│ Billing Configuration │
│ ├── Charge Type (PayType) │
│ ├── Pay Period Unit (PayPeriodUnit) │
│ └── Period (PayPeriod) │
├─────────────────────────────────────────────────┤
│ ECS Instance Configuration │
│ ├── ECS Instance Type (EcsInstanceType) │
│ ├── System Disk Category (SystemDiskCategory) │
│ ├── System Disk Size (SystemDiskSize) │
│ ├── Data Disk Category (DataDiskCategory) │
│ ├── Data Disk Size (DataDiskSize) │
│ └── ECS Instance Password (InstancePassword) │
├─────────────────────────────────────────────────┤
│ CLB Configuration │
│ ├── CLB Instance Spec (LoadBalancerSpec) │
│ └── EIP Bandwidth (Bandwidth) │
└─────────────────────────────────────────────────┘
Modelo de grupo de parâmetros de Metadata
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: Network Configuration
en: Network Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
zh-cn: Charge Type
en: Billing Configuration
- Parameters:
- EcsInstanceType
- SystemDiskCategory
- SystemDiskSize
- DataDiskCategory
- DataDiskSize
- InstancePassword
Label:
default:
zh-cn: ECS Instance Configuration
en: ECS Instance Configuration
- Parameters:
- LoadBalancerSpec
- Bandwidth
Label:
default:
zh-cn: CLB Configuration
en: CLB Configuration
Modelo avançado completo
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: >-
参数化模板:创建ECS实例组部署Nginx服务,挂载到CLB负载均衡器,通过EIP对外提供HTTP服务。
支持动态选择可用区、实例规格、磁盘类型和CLB规格,支持按量/包年包月付费模式切换。
en: >-
Parameterized template: Create ECS group with Nginx, attach to CLB, expose via EIP.
Supports dynamic selection and PayAsYouGo/Subscription billing switch.
Parameters:
# ─── 基础网络参数 ───
ZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS和CLB将部署在此可用区
en: Select the availability zone for deployment
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
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
Default: 192.168.0.0/24
# ─── 付费类型参数 ───
PayType:
Type: String
Label:
zh-cn: 付费类型
en: Charge Type
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Label:
zh-cn: 购买资源时长周期
en: Pay Period Unit
Description:
zh-cn: 包年包月的周期单位。Month为月,Year为年。仅包年包月时有效。
en: Subscription period unit. Only valid for PrePaid.
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
zh-cn: 购买资源时长
en: Period
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
# ─── ECS实例参数 ───
EcsInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
en: ECS Instance Type
Description:
zh-cn: 选择ECS实例规格。列表已根据可用区和付费类型自动过滤。
en: Select ECS instance type, filtered by zone and charge type.
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${PayType}
SystemDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: System disk type
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
SystemDiskSize:
Type: Number
Label:
zh-cn: 系统盘大小(GB)
en: System Disk Size (GB)
Description:
zh-cn: 系统盘大小,取值范围40~500 GB
en: System disk size, range 40-500 GB
Default: 40
MinValue: 40
MaxValue: 500
DataDiskCategory:
Type: String
Label:
zh-cn: 数据盘类型
en: Data Disk Category
Description:
zh-cn: 选择数据盘类型。可选值:cloud_essd、cloud_ssd、cloud_efficiency
en: Data disk type
AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
DataDiskSize:
Type: Number
Label:
zh-cn: 数据盘大小(GB)
en: Data Disk Size (GB)
Description:
zh-cn: ECS数据盘大小,取值范围20~32768 GB
en: Data disk size, range 20-32768 GB
Default: 100
MinValue: 20
MaxValue: 32768
InstancePassword:
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 character types
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
# ─── 负载均衡参数 ───
LoadBalancerSpec:
Type: String
Label:
zh-cn: CLB实例规格
en: CLB Instance Spec
Description:
zh-cn: 选择CLB实例规格,根据可用区自动过滤
en: Select CLB instance specification
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Bandwidth:
Type: Number
Label:
zh-cn: EIP带宽(Mbps)
en: EIP Bandwidth (Mbps)
Description:
zh-cn: 弹性公网IP的带宽上限,取值范围1~1000 Mbps
en: EIP bandwidth cap, range 1-1000 Mbps
Default: 10
MinValue: 1
MaxValue: 1000
Resources:
# === 基础网络层 ===
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: ZoneId
CidrBlock:
Ref: VSwitchCidrBlock
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: 80/80
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
# === 计算层 ===
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
IoOptimized: optimized
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize:
Ref: SystemDiskSize
DiskMappings:
- Category:
Ref: DataDiskCategory
Size:
Ref: DataDiskSize
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
MaxAmount: 2
ImageId: centos_7
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
AllocatePublicIP: false
RunSetup:
Type: ALIYUN::ECS::RunCommand
DependsOn: EcsInstanceGroup
Properties:
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
Type: RunShellScript
Sync: true
Timeout: 300
ContentEncoding: PlainText
CommandContent: |
#!/bin/bash
# === 数据盘初始化:分区、格式化、挂载到/disk1 ===
cat >> /root/InitDataDisk.sh << 'EOF'
#!/bin/bash
echo "p
n
p
w
" | fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /disk1
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
mount -a
# === 安装并启动Nginx ===
yum install -y nginx
systemctl start nginx.service
# === 负载均衡层 ===
Slb:
Type: ALIYUN::SLB::LoadBalancer
Properties:
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
LoadBalancerName:
Fn::Sub: slb-${ALIYUN::StackName}
PayType:
Ref: PayType
PricingCycle:
Ref: PayPeriodUnit
Duration:
Ref: PayPeriod
AddressType: intranet
LoadBalancerSpec:
Ref: LoadBalancerSpec
AutoPay: true
EipSlbAddress:
Type: ALIYUN::VPC::EIP
Properties:
Name:
Ref: ALIYUN::StackName
InternetChargeType: PayByTraffic
Bandwidth:
Ref: Bandwidth
EipSlbAddressAssociation:
Type: ALIYUN::VPC::EIPAssociation
Properties:
InstanceId:
Ref: Slb
AllocationId:
Ref: EipSlbAddress
SlbBackendServerAttachment:
DependsOn:
- EcsInstanceGroup
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServerList:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
LoadBalancerId:
Ref: Slb
BackendServerWeightList:
- 100
- 100
SlbListener:
DependsOn:
- Slb
Type: ALIYUN::SLB::Listener
Properties:
LoadBalancerId:
Ref: Slb
ListenerPort: 80
BackendServerPort: 80
Protocol: tcp
Bandwidth: -1
Persistence:
StickySession: 'on'
StickySessionType: insert
CookieTimeout: 60
PersistenceTimeout: 180
HealthCheck:
HealthCheckType: tcp
Port: 80
Interval: 2
HealthyThreshold: 3
UnhealthyThreshold: 3
Timeout: 5
Outputs:
Endpoint:
Description:
zh-cn: 对外暴露的公网访问地址
en: Public HTTP endpoint
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::GetAtt:
- EipSlbAddress
- EipAddress
# === 元数据:控制台参数分组配置 ===
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 基础网络配置
en: Network Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
zh-cn: 付费类型
en: Billing Configuration
- Parameters:
- EcsInstanceType
- SystemDiskCategory
- SystemDiskSize
- DataDiskCategory
- DataDiskSize
- InstancePassword
Label:ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: >-
参数化模板:创建ECS实例组部署Nginx服务,挂载到CLB负载均衡器,通过EIP对外提供HTTP服务。
支持动态选择可用区、实例规格、磁盘类型和CLB规格,支持按量/包年包月付费模式切换。
en: >-
Parameterized template: Create ECS group with Nginx, attach to CLB, expose via EIP.
Supports dynamic selection and PayAsYouGo/Subscription billing switch.
Parameters:
# ─── Basic network parameters ───
ZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS和CLB将部署在此可用区
en: Select the availability zone for deployment
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
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
Default: 192.168.0.0/24
# ─── Paytype Paramters ───
PayType:
Type: String
Label:
zh-cn: 付费类型
en: Charge Type
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Label:
zh-cn: 购买资源时长周期
en: Pay Period Unit
Description:
zh-cn: 包年包月的周期单位。Month为月,Year为年。仅包年包月时有效。
en: Subscription period unit. Only valid for PrePaid.
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
zh-cn: 购买资源时长
en: Period
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
# ─── ECS instance parameters ───
EcsInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
en: ECS Instance Type
Description:
zh-cn: 选择ECS实例规格。列表已根据可用区和付费类型自动过滤。
en: Select ECS instance type, filtered by zone and charge type.
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${PayType}
SystemDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: System Disk Category
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: System disk type
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
SystemDiskSize:
Type: Number
Label:
zh-cn: 系统盘大小(GB)
en: System Disk Size (GB)
Description:
zh-cn: 系统盘大小,取值范围40~500 GB
en: System disk size, range 40-500 GB
Default: 40
MinValue: 40
MaxValue: 500
DataDiskCategory:
Type: String
Label:
zh-cn: 数据盘类型
en: Data Disk Category
Description:
zh-cn: 选择数据盘类型。可选值:cloud_essd、cloud_ssd、cloud_efficiency
en: Data disk type
AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
DataDiskSize:
Type: Number
Label:
zh-cn: 数据盘大小(GB)
en: Data Disk Size (GB)
Description:
zh-cn: ECS数据盘大小,取值范围20~32768 GB
en: Data disk size, range 20-32768 GB
Default: 100
MinValue: 20
MaxValue: 32768
InstancePassword:
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 character types
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
# ─── CLB paramters ───
LoadBalancerSpec:
Type: String
Label:
zh-cn: CLB实例规格
en: CLB Instance Spec
Description:
zh-cn: 选择CLB实例规格,根据可用区自动过滤
en: Select CLB instance specification
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Bandwidth:
Type: Number
Label:
zh-cn: EIP带宽(Mbps)
en: EIP Bandwidth (Mbps)
Description:
zh-cn: 弹性公网IP的带宽上限,取值范围1~1000 Mbps
en: EIP bandwidth cap, range 1-1000 Mbps
Default: 10
MinValue: 1
MaxValue: 1000
Resources:
# === 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: ZoneId
CidrBlock:
Ref: VSwitchCidrBlock
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: 80/80
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:
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
IoOptimized: optimized
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize:
Ref: SystemDiskSize
DiskMappings:
- Category:
Ref: DataDiskCategory
Size:
Ref: DataDiskSize
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
MaxAmount: 2
ImageId: centos_7
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
AllocatePublicIP: false
RunSetup:
Type: ALIYUN::ECS::RunCommand
DependsOn: EcsInstanceGroup
Properties:
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
Type: RunShellScript
Sync: true
Timeout: 300
ContentEncoding: PlainText
CommandContent: |
#!/bin/bash
# === 数据盘初始化:分区、格式化、挂载到/disk1 ===
cat >> /root/InitDataDisk.sh << 'EOF'
#!/bin/bash
echo "p
n
p
w
" | fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /disk1
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
mount -a
# === install and start Nginx ===
yum install -y nginx
systemctl start nginx.service
# === CLB layer ===
Slb:
Type: ALIYUN::SLB::LoadBalancer
Properties:
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
LoadBalancerName:
Fn::Sub: slb-${ALIYUN::StackName}
PayType:
Ref: PayType
PricingCycle:
Ref: PayPeriodUnit
Duration:
Ref: PayPeriod
AddressType: intranet
LoadBalancerSpec:
Ref: LoadBalancerSpec
AutoPay: true
EipSlbAddress:
Type: ALIYUN::VPC::EIP
Properties:
Name:
Ref: ALIYUN::StackName
InternetChargeType: PayByTraffic
Bandwidth:
Ref: Bandwidth
EipSlbAddressAssociation:
Type: ALIYUN::VPC::EIPAssociation
Properties:
InstanceId:
Ref: Slb
AllocationId:
Ref: EipSlbAddress
SlbBackendServerAttachment:
DependsOn:
- EcsInstanceGroup
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServerList:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
LoadBalancerId:
Ref: Slb
BackendServerWeightList:
- 100
- 100
SlbListener:
DependsOn:
- Slb
Type: ALIYUN::SLB::Listener
Properties:
LoadBalancerId:
Ref: Slb
ListenerPort: 80
BackendServerPort: 80
Protocol: tcp
Bandwidth: -1
Persistence:
StickySession: 'on'
StickySessionType: insert
CookieTimeout: 60
PersistenceTimeout: 180
HealthCheck:
HealthCheckType: tcp
Port: 80
Interval: 2
HealthyThreshold: 3
UnhealthyThreshold: 3
Timeout: 5
Outputs:
Endpoint:
Description:
zh-cn: 对外暴露的公网访问地址
en: Public HTTP endpoint
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::GetAtt:
- EipSlbAddress
- EipAddress
# === Metadata ===
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 基础网络配置
en: Network Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
zh-cn: 付费类型
en: Billing Configuration
- Parameters:
- EcsInstanceType
- SystemDiskCategory
- SystemDiskSize
- DataDiskCategory
- DataDiskSize
- InstancePassword
Label:
default:
zh-cn: ECS实例配置
en: ECS Instance Configuration
- Parameters:
- LoadBalancerSpec
- Bandwidth
Label:
default:
zh-cn: 负载均衡配置
en: CLB Configuration
default:
zh-cn: ECS实例配置
en: ECS Instance Configuration
- Parameters:
- LoadBalancerSpec
- Bandwidth
Label:
default:
zh-cn: 负载均衡配置
en: CLB Configuration
Referência rápida de funções integradas do ROS
|
Função |
Exemplo de sintaxe |
Finalidade neste modelo |
Observações |
|
|
|
Referencia valores de parâmetros ou identificadores primários de recursos. |
Retorna o valor do parâmetro ao referenciar um Parameter; retorna o id primário ao referenciar um Resource. |
|
|
|
Obtém a lista de IDs de instância do grupo de instâncias ECS. |
Retorna atributos de saída de recursos (identificadores não primários) após a criação. |
|
|
|
Concatena o nome do CLB. |
Referencia variáveis com |
|
|
|
Exibição condicional de parâmetros de duração de faturamento. |
Negação lógica + comparação de igualdade, usada para condições Visible. |
Implantação
Parâmetros de implantação
Parâmetros obrigatórios (devem ser especificados durante a implantação)
|
Parâmetro |
Tipo |
Descrição |
Restrições |
|
|
String |
id da zona. |
Selecionado dinamicamente no console. |
|
|
String |
Tipo de instância ECS. |
Filtrado automaticamente por zona + tipo de faturamento. |
|
|
String |
Tipo de disco do sistema. |
Filtrado automaticamente por zona + tipo de instância. |
|
|
String |
Tipo de disco de dados. |
Filtrado automaticamente por zona + tipo de instância. |
|
|
String |
Especificação da instância CLB. |
Filtrado automaticamente por zona. |
Parâmetros opcionais (possuem valores padrão, podem ser deixados vazios)
|
Parâmetro |
Padrão |
Descrição |
|
|
192.168.0.0/16 |
Bloco CIDR da VPC. |
|
|
192.168.0.0/24 |
Bloco CIDR de sub-rede do |
|
|
|
Tipo de faturamento (pagamento conforme o uso / assinatura). |
|
|
Month |
Unidade do período de faturamento (mostrado apenas quando |
|
|
1 |
Duração do faturamento (mostrado apenas quando |
|
|
40 |
Tamanho do disco do sistema (GB), intervalo: 40–500. |
|
|
100 |
Tamanho do disco de dados (GB), intervalo: 20–32768. |
|
|
10 |
Limite de largura de banda do EIP (Mbps), intervalo: 1–1000. |
|
|
— |
Senha de login da instância ECS. Comprimento de 8–30 caracteres, deve conter pelo menos três tipos de caracteres: letras maiúsculas, letras minúsculas, dígitos, caracteres especiais. |
Métodos de implantação
Método 1: Implantar via console ROS
Faça login no console ROS.
No painel de navegação à esquerda, escolha Stacks > Create Stack.
Selecione Select an Existing Template > Enter Template Content e cole o modelo completo no editor.
Clique em Next e configure os parâmetros por grupo.
Após confirmar a configuração, clique em Create e aguarde até que o status da stack mude para
CREATE_COMPLETE.
Método 2: Implantar através do ROS IaC Code
O IaC Code é um assistente de infraestrutura como código com IA para infraestrutura em cloud. Ele ajuda usuários de recursos em cloud e engenheiros de O&M a gerar, implantar e gerenciar modelos de infraestrutura por meio de um fluxo de trabalho de terminal.
# Prompt
Help me deploy a group of ECS instances and attach them to a CLB load balancer with the following requirements:
1. Use a newly created VPC and vSwitch
2. Create 2 ECS instances and install and start Nginx via CommandContent
3. Use WaitCondition to wait for Nginx installation to complete before attaching to CLB
4. Configure CLB with TCP port 80 listener and health checks
5. Create an EIP and associate it with the CLB to provide HTTP access
6. Open inbound port 80 in the security group
7. Configure ECS with a 100 GB data disk and auto-partition and mount it in CommandContent
8. Configure ZoneId, EcsInstanceType, SystemDiskCategory, DataDiskCategory, LoadBalancerSpec with AssociationProperty for dynamic console filtering
9. Support switching between pay-as-you-go and subscription billing, with subscription parameters using conditional display
Perguntas frequentes
P1: A verificação de integridade do CLB continua falhando e as instâncias ECS de backend mostram "Unhealthy"
Causa: O service Nginx na instância ECS não está executando corretamente ou o grupo de segurança não abriu a porta 80.
Etapas de solução de problemas:
Log on the ECS instances e execute
systemctl status nginxpara confirmar se o Nginx está em execução.Verifique se a regra de entrada do grupo de segurança abre a porta 80 (
PortRange: 80/80).Confira se a
Portna configuração de verificação de integridade do CLB corresponde à porta do listener do Nginx.Aumente o
HealthyThreshold(limiar de integridade) e oInterval(intervalo de verificação) conforme apropriado.
P2: Como ajusto a proporção de distribuição de tráfego entre os servidores de backend?
Solução: Modifique a BackendServerWeightList em SlbBackendServerAttachment:
BackendServerWeightList:
- 100 # ECS instance 1: receives approximately 67% of traffic
- 50 # ECS instance 2: receives approximately 33% of traffic
A proporção de peso é 100:50, o que significa que a instância ECS 1 lida com aproximadamente 2/3 das solicitações. Para retirar temporariamente uma instância ECS de service (descomissionamento em escala de cinza), defina seu peso como 0.
P3: Como substituo o script de implantação do Nginx no ECS::RunCommand por um aplicativo personalizado?
Solução: Modifique a seção de instalação e início do script CommandContent mantendo a lógica de inicialização do disco de dados:
CommandContent:
Fn::Sub:
- |
#!/bin/bash
# ... Data disk initialization code (keep as is) ...
# === Replace with your application deployment script ===
# Example: Deploy a Java Spring Boot application
yum install -y java-11-openjdk
wget -P /disk1 https://your-oss-bucket.oss-cn-hangzhou.aliyuncs.com/app.jar
nohup java -jar /disk1/app.jar --server.port=80
P4: Como substituo o CLB pelo ALB (Application Load Balancer)?
Etapas de migração:
Substitua
ALIYUN::SLB::LoadBalancerporALIYUN::ALB::LoadBalancer.Use
ALIYUN::ALB::ServerGrouppara criar um grupo de servidores e adicionar instâncias ECS de backend.Use
ALIYUN::ALB::Listener+ALIYUN::ALB::Rulepara configurar o roteamento HTTP/HTTPS da Camada 7.O ALB suporta nativamente acesso à rede pública — não há necessidade de associar um EIP separadamente.
P5: Como uso uma VPC existente em vez de criar uma nova?
Solução: Remova a VPC e o vSwitch de Resources e passe-os como parâmetros:
Parameters:
ExistingVpcId:
Type: String
Label:
zh-cn: Existing VPC ID
en: Existing VPC ID
AssociationProperty: ALIYUN::ECS::VPC::VPCId
ExistingVSwitchId:
Type: String
Label:
zh-cn: Existing VSwitch ID
en: Existing vSwitch ID
AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${ExistingVpcId}
Para mais problemas comuns de implantação, consulte FAQ.