Neste tutorial, você usa o Alibaba Cloud Resource Orchestration Service (ROS) para provisionar uma instância ECS e uma instância ApsaraDB RDS MySQL em uma única VPC. Em seguida, usa o Cloud Assistant para executar um script de inicialização que importa um conjunto de dados de exemplo para o RDS. Ao final, você terá um ambiente funcional de ECS + RDS criado a partir de um único modelo YAML, pronto para reimplantação sob demanda.
Visão geral da solução
Cenário de negócio
Crie uma instância Elastic Compute Service (ECS) e uma instância ApsaraDB RDS MySQL na mesma Virtual Private Cloud (VPC) da Alibaba Cloud. A instância ECS conecta-se à instância RDS pela rede interna da VPC, e o Cloud Assistant (RunCommand) executa automaticamente um script shell na instância ECS para inicializar o banco de dados.
Recursos criados
|
Nº |
Recurso |
Tipo de recurso ROS |
Descrição |
|
1 |
VPC |
|
Fornece um ambiente de rede isolado. Todos os recursos são implantados na mesma VPC. |
|
2 |
vSwitch |
|
Define uma sub-rede dentro da VPC e especifica a zona. |
|
3 |
Grupo de segurança |
|
Controla o tráfego de entrada e saída da instância ECS. |
|
4 |
Instância ECS |
|
Nó de computação que executa o script de inicialização do banco de dados. |
|
5 |
Instância ApsaraDB RDS MySQL |
|
Banco de dados de destino que armazena os dados inicializados. |
|
6 |
Conta de banco de dados |
|
Conta de login do RDS usada pela instância ECS para se conectar ao banco de dados. |
|
7 |
Comando do Cloud Assistant |
|
Executa remotamente o script shell na instância ECS para inicializar o banco de dados. |
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 uma VPC, um vSwitch e um grupo de segurança.
Uma instância ECS associada à rede VPC e ao grupo de segurança.
Uma instância ApsaraDB RDS MySQL 8.0 com um banco de dados inicial e uma conta superusuário.
O conjunto de dados de exemplo oficial
employeesdo MySQL (aproximadamente 300.000 registros) importado automaticamente para o banco de dados.
Diagrama de arquitetura

Pré-requisitos
Antes de começar, confirme os seguintes itens:
Conta e permissões: Uma conta Alibaba Cloud com permissões para criar recursos no ECS, ApsaraDB RDS, VPC e Cloud Assistant.
Conhecimento prévio: Noções básicas sobre a sintaxe e a estrutura de modelos ROS. Para mais detalhes, consulte Get started with template content.
Tutorial de criação de modelos
Este tutorial aborda o modelo em duas fases:
Fase 1 (Básica): Usa valores de parâmetros fixos para que você possa focar nas definições de recursos e nas relações de dependência.
Fase 2 (Avançada): Parametriza todas as configurações ajustáveis, adiciona filtragem dinâmica de parâmetros e agrupa os parâmetros.
Fase 1: Modelo básico — Definir recursos e dependências
Etapa 1: Definir recursos de rede (VPC + vSwitch + Security group)
Os recursos de rede constituem a base para todos os demais recursos e devem ser criados primeiro.
Resources:
# ============================================================
# Network layer: VPC → vSwitch → SecurityGroup
# ============================================================
Vpc:
Type: ALIYUN::ECS::VPC # Create VPC
Properties:
CidrBlock: 192.168.0.0/16 # VPC CIDR block, supports up to 65,534 internal IPs
VpcName:
Ref: ALIYUN::StackName # Pseudo parameter: use 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 (implicit dependency; ROS creates Vpc first)
ZoneId: cn-beijing-h # This example uses Beijing zone H
CidrBlock: 192.168.0.0/24 # Subnet CIDR block; must be a subset of the VPC CIDR
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup # Create a security group
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # Bind the security group to the same VPC
SecurityGroupIngress: # Inbound rule: allow all inbound traffic
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 0.0.0.0/0
NicType: intranet
Conceitos principais:
Nomes personalizados como
VpcName,VSwitchNameeSecurityGroupNamepodem usar pseudoparâmetros. Isso facilita a localização rápida dos recursos associados a uma stack após a implantação.-
As regras do grupo de segurança podem ser personalizadas conforme suas necessidades de negócio. Por exemplo:
Para permitir acesso externo a um service web, adicione uma regra de entrada liberando a porta HTTP 80 ou 8080.
Para permitir login via SSH, adicione uma regra de entrada liberando a porta 22.
Etapa 2: Definir recursos de banco de dados (RDS instance + Database account)
Resources:
# ============================================================
# Database layer: ApsaraDB RDS MySQL instance + database account
# ============================================================
DBInstance:
Type: ALIYUN::RDS::DBInstance # Create ApsaraDB RDS MySQL instance
Properties:
ZoneId: cn-beijing-h
VpcId:
Ref: Vpc # Deploy RDS in the same VPC as ECS (required for internal network connectivity)
VSwitchId:
Ref: VSwitch # Specify the vSwitch so ECS and RDS are in the same subnet
Engine: MySQL # Database engine
EngineVersion: '8.0' # MySQL version
DBInstanceClass: mysql.n2e.medium.1 # Instance type (2 vCPU, 4 GB)
DBInstanceStorage: 10 # Storage: 10 GB
MultiAZ: true # Multi-zone deployment for higher availability
DBInstanceNetType: Intranet # Internal network type (VPC network)
DBMappings: # Create an initial database
- CharacterSetName: utf8 # Character set
DBName: employees # Database name
SecurityIPList: 0.0.0.0/0 # RDS whitelist (allows all IPs in the VPC)
DBAccount:
Type: ALIYUN::RDS::Account # Create RDS database account
Properties:
DBInstanceId:
# Fn::GetAtt returns an output attribute of the resource (not the primary identifier)
Fn::GetAtt:
- DBInstance # Logical resource name
- DBInstanceId # Attribute name to retrieve
AccountPassword: Admin@2791
AccountType: Super # Super account (has all database permissions)
AccountName: rdsuser # Account name
Conceitos principais:
-
Diferença entre
RefeFn::GetAtt:Refretorna o identificador principal do recurso (por exemplo, oVpcIdde uma VPC).Fn::GetAttretorna um atributo relacionado do recurso (por exemplo, oInnerConnectionStringde uma instância RDS).
Etapa 3: Definir recursos de ECS instance
Resources:
# ============================================================
# Compute layer + initialization: ECS instance + Cloud Assistant for database initialization
# ============================================================
EcsInstance:
Type: ALIYUN::ECS::Instance # Create ECS instance
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch # Same vSwitch as RDS to ensure internal network connectivity
ImageId: aliyun_3_x64_20G_alibase # OS image: Alibaba Cloud Linux 3 (maintained release)
AllocatePublicIP: true
InstanceType: ecs.c5.large # Instance type: 2 vCPU, 4 GiB
SystemDiskSize: 40 # System disk: 40 GiB
SystemDiskCategory: cloud_essd # enterprise SSD (ESSD)
Password: <REPLACE_WITH_STRONG_PASSWORD> # 8-30 chars, mix of upper/lower/digit/special
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand # Cloud Assistant: remotely runs commands on ECS
DependsOn:
- DBAccount # Explicit dependency: wait until the database account is created before connecting
Properties:
CommandContent:
# Fn::Sub function: string variable substitution
# Syntax: Fn::Sub: [template string, {variable: value}]
# Reference variables in the template string using ${variable}
Fn::Sub:
- |
#!/bin/bash
# 1. Install the MySQL client and decompression tool
yum -y install mariadb unzip
# 2. Download the MySQL official sample dataset from OSS
wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
# 3. Extract the data files
unzip /tmp/test_db-master.zip -d /tmp/
# 4. Connect to the database over the RDS internal endpoint and import SQL
mysql -h${DBConnectString} -P3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master/employees.sql
- DBConnectString:
# Retrieve the internal connection string of the RDS instance
Fn::GetAtt:
- DBInstance
- InnerConnectionString
DBUsername: rdsuser
DBPassword: Admin@2791
Type: RunShellScript # Command type: shell script
InstanceIds: # Target ECS instance list
- Fn::GetAtt:
- EcsInstance
- InstanceId
Timeout: '500' # Command execution timeout: 500 seconds
Conceitos principais:
InnerConnectionStringé o endpoint de conexão interna da VPC gerado automaticamente após a criação da instância RDS.Se
AllocatePublicIP: false, a instância ECS não terá IP público. Para baixar arquivos da internet, configure um NAT Gateway para a VPC ou definaAllocatePublicIP: true.-
Dependência implícita versus explícita:
Ao usar
RefouFn::GetAttpara referenciar um recurso, o ROS infere a dependência automaticamente (implícita).Use
DependsOn(explícita) apenas quando dois recursos não tiverem relação direta de referência, mas precisarem ser criados em uma ordem específica.
Os dados de inicialização deste exemplo correspondem ao conjunto de dados oficial employees do MySQL. Para garantir downloads estáveis, faça upload do arquivo de dados para seu bucket OSS antecipadamente e substitua a URL do comando wget.
Modelo básico completo
ROSTemplateFormatVersion: '2015-09-01'
Description: Create VPC network, deploy ECS and RDS MySQL instances, initialize the database via RunCommand
Parameters:
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: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 0.0.0.0/0
NicType: intranet
# === Database layer ===
DBInstance:
Type: ALIYUN::RDS::DBInstance
Properties:
ZoneId: cn-beijing-h
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
Engine: MySQL
EngineVersion: '8.0'
DBInstanceClass: mysql.n2e.medium.1
DBInstanceStorage: 200
MultiAZ: false
DBInstanceNetType: Intranet
DBMappings:
- CharacterSetName: utf8
DBName: employees
SecurityIPList: 0.0.0.0/0
DBAccount:
Type: ALIYUN::RDS::Account
DependsOn:
- DBInstance
Properties:
DBInstanceId:
Fn::GetAtt:
- DBInstance
- DBInstanceId
AccountPassword: Admin@2791
AccountType: Super
AccountName: rdsuser
# === Compute layer + database initialization ===
EcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: aliyun_3_x64_20G_alibase
AllocatePublicIP: true
InstanceType: ecs.c5.large
SystemDiskSize: 40
SystemDiskCategory: cloud_essd
Password: <REPLACE_WITH_STRONG_PASSWORD> # 8-30 chars, mix of upper/lower/digit/special
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand
DependsOn:
- DBAccount
Properties:
CommandContent:
Fn::Sub:
- |
#!/bin/bash
yum -y install mariadb unzip
wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
unzip /tmp/test_db-master.zip -d /tmp/
mysql -h${DBConnectString} -P3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master/employees.sql
- DBConnectString:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
DBUsername: rdsuser
DBPassword: Admin@2791
Type: RunShellScript
InstanceIds:
- Fn::GetAtt:
- EcsInstance
- InstanceId
Timeout: '500'
Outputs:
RDSInnerConnectionString:
Description: RDS internal endpoint
Label: RDS internal endpoint
Value:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
RDSPort:
Description: RDS port
Label: RDS port
Value:
Fn::GetAtt:
- DBInstance
- InnerPort
ECSPrivateIp:
Description: ECS internal IP address
Label: ECS internal IP address
Value:
Fn::GetAtt:
- EcsInstance
- PrivateIp
ECSPublicIp:
Description: ECS public IP address
Label: ECS public IP address
Value:
Fn::GetAtt:
- EcsInstance
- PublicIp
Conceito principal:
Após o modelo criar os recursos, use a seção
Outputspara consultar atributos como o endpoint interno do RDS, a porta do RDS, o IP interno do ECS e o IP público do ECS.
Fase 2: Modelo avançado — Parametrização e configuração dinâmica
No modelo básico, propriedades como InstanceType e SystemDiskCategory da instância ECS, além de DBInstanceClass da instância RDS, usam valores fixos. Ao reutilizar o modelo em diferentes regiões ou com outras especificações, é necessário editá-lo manualmente a cada vez. Além disso, os parâmetros frequentemente possuem relações de dependência. Por exemplo, os tipos de instância ECS são restritos pela zona (zonas diferentes oferecem tipos diferentes), e a categoria do disco do sistema depende tanto da zona quanto do tipo de instância. Se você inserir esses parâmetros manualmente, poderá selecionar combinações inválidas que causam falhas na implantação.
As melhorias a seguir tornam o modelo flexível e reutilizável:
Parametrização (Parameters) — Extrai configurações variáveis como parâmetros preenchidos dinamicamente durante a 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) — Organiza os 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 abaixo ilustra a cadeia de dependências usando como exemplo o tipo de instância ECS, a categoria do disco do sistema e o tipo de instância RDS:
VSwitchZoneId (zone) <- Base parameter, no prerequisite
|
|-> ECSInstanceType (ECS instance type)
| | Depends on: ZoneId
| |
| |-> ECSDiskCategory (system disk category)
| Depends on: ZoneId + InstanceType
|
|-> DBInstanceClass (RDS instance type)
Depends on: ZoneId + Engine (fixed value)
Abordagem central: Primeiro selecione a zona, depois filtre os tipos de instância ECS e RDS de acordo com ela e, por fim, filtre a categoria do disco com base na zona combinada ao tipo de instância ECS. Cada etapa exibe apenas as opções válidas para as condições atuais, evitando combinações inválidas.
Como funciona o AssociationProperty
1. VSwitchZoneId — Zona (parâmetro base)
Defina AssociationProperty como ALIYUN::ECS::ZoneId para listar todas as zonas disponíveis na região atual:
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS 和 RDS 将部署在此可用区
en: Select the availability zone for VSwitch. ECS and RDS are deployed in this zone.
AssociationProperty: ALIYUN::ECS::ZoneId
Este parâmetro serve como base de filtragem para todos os parâmetros subsequentes. Quando uma zona é selecionada, as listas de opções dos outros parâmetros são atualizadas automaticamente.
2. ECSInstanceType — Tipo de instância ECS
Defina AssociationProperty como ALIYUN::ECS::Instance::InstanceType e associe ${VSwitchZoneId} para filtrar os tipos de instância ECS disponíveis na zona selecionada:
ECSInstanceType:
Type: String
Label:
zh-cn: ECS 实例规格
en: ECS Instance Type
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
Os tipos de instância disponíveis variam conforme a zona. Sem filtragem, os usuários podem selecionar um tipo indisponível na zona escolhida, o que causa falha na criação.
3. ECSDiskCategory — Categoria do disco do sistema
Defina AssociationProperty como ALIYUN::ECS::Disk::SystemDiskCategory e associe ${VSwitchZoneId} e ${ECSInstanceType} para filtrar as categorias de disco suportadas pela zona e pelo tipo de instância selecionados:
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}
A disponibilidade da categoria de disco depende tanto da zona (algumas zonas não suportam ESSD) quanto do tipo de instância (alguns tipos suportam apenas certas categorias de disco).
4. DBInstanceClass — Tipo de instância RDS
Defina AssociationProperty como ALIYUN::RDS::Instance::InstanceType e associe ${VSwitchZoneId} e um valor fixo Engine: MySQL para filtrar os tipos de instância RDS que suportam MySQL na zona selecionada:
DBInstanceClass:
Type: String
Label:
zh-cn: RDS 实例规格
en: RDS Instance Class
Description:
zh-cn: 选择RDS实例规格。列表已根据数据库引擎和可用区自动过滤。
en: Select RDS instance class, filtered by engine type and zone.
AssociationProperty: ALIYUN::RDS::Instance::InstanceType
AssociationPropertyMetadata:
Engine: MySQL
ZoneId: ${VSwitchZoneId}
EngineVersion: '8.0'
Category: Basic
InstanceChargeTYpe: Postpaid
Como este cenário usa MySQL, o mecanismo é fixo. Caso deseje selecionar outro mecanismo, adicione um parâmetro Engine com AssociationProperty: ALIYUN::RDS::Engine::EngineId e referencie ${Engine} neste local.
Modelo de filtragem dinâmica de parâmetros
Parameters:
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
Description:
zh-cn: 选择交换机所在的可用区,ECS和RDS将部署在此可用区
en: Select the availability zone for VSwitch, ECS and RDS 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}
DBInstanceClass:
Type: String
Label:
zh-cn: RDS实例规格
en: RDS Instance Class
Description:
zh-cn: 选择RDS实例规格。列表已根据数据库引擎和可用区自动过滤。
en: Select RDS instance class, filtered by engine type and zone.
AssociationProperty: ALIYUN::RDS::Instance::InstanceType
AssociationPropertyMetadata:
Engine: MySQL
ZoneId: ${VSwitchZoneId}
Como funciona a filtragem em cascata do AssociationProperty
Ao criar uma stack no console ROS, a seleção de parâmetros aciona uma cascata:
Seleciona a zona (
VSwitchZoneId).A lista suspensa de tipos de instância ECS é atualizada para mostrar apenas os tipos disponíveis naquela zona.
A lista suspensa de tipos de instância RDS é atualizada para mostrar apenas os tipos que suportam MySQL nessa zona.
Após a seleção do tipo de instância ECS, a lista suspensa de categorias de disco do sistema é atualizada para exibir somente as categorias suportadas pela combinação de zona e tipo de instância.
Isso garante que cada seleção mostre apenas opções válidas e elimina falhas de implantação causadas por combinações inválidas de parâmetros.
Agrupamento de parâmetros via Metadata
Use ALIYUN::ROS::Interface em Metadata para organizar os parâmetros em grupos lógicos com rótulos. O console exibe os parâmetros agrupados, o que melhora a experiência de configuração.
Sintaxe do Metadata
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups: # Parameter group list (required)
- Parameters: # Parameters in this group (required)
- ParameterName1
- ParameterName2
Label: # Group label (required)
default:
en: English label text
Regras do Metadata:
ParameterGroups,ParameterseLabelsão obrigatórios.Os nomes dos parâmetros listados em
Metadata.ALIYUN::ROS::Interface.ParameterGroups.Parametersdevem corresponder exatamente aos nomes definidos na seçãoParameters.Parâmetros não atribuídos a nenhum grupo aparecem em uma área sem grupo no console.
Modelo de Metadata:
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 基础网络配置
en: Network Configuration
- Parameters:
- ECSInstanceType
- ECSDiskSize
- ECSDiskCategory
- EcsInstancePassword
Label:
default:
zh-cn: ECS实例配置
en: ECS Instance Configuration
- Parameters:
- DBInstanceClass
- DBInstanceStorage
- DBName
- DBUsername
- DBPassword
Label:
default:
zh-cn: 数据库配置
en: Database Configuration
Design de agrupamento para este cenário
Este modelo divide 12 parâmetros em 3 grupos:
|
Grupo |
Parâmetros incluídos |
|
Configuração de Rede |
Zona de Disponibilidade do vSwitch |
|
Configuração da Instância ECS |
Tipo de Instância ECS |
|
Configuração do Banco de Dados |
Classe da Instância RDS |
Modelo avançado completo
ROSTemplateFormatVersion: '2015-09-01'
Description: >-
Parameterized template: create ECS and RDS MySQL in a VPC, initialize the database via RunCommand.
Supports dynamic selection of zone, instance type, and disk category.
Parameters:
# --- Network parameters ---
VSwitchZoneId:
Type: String
Label: VSwitch Availability Zone
Description: Select the availability zone for VSwitch. ECS and RDS are deployed in this zone.
AssociationProperty: ALIYUN::ECS::ZoneId
VpcCidrBlock:
Type: String
Label: VPC CIDR Block
Description: 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: vSwitch CIDR Block
Description: Must be a subnet of the VPC CIDR and must not overlap with other vSwitches
Default: 192.168.0.0/24
# --- ECS parameters ---
ECSInstanceType:
Type: String
Label: ECS Instance Type
Description: Select ECS instance type. The list is filtered by the selected zone.
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
ECSDiskSize:
Type: Number
Label: System Disk Size (GiB)
Description: ECS system disk size, range 40-500 GiB
Default: 40
MinValue: 40
MaxValue: 500
ECSDiskCategory:
Type: String
Label: System Disk Category
Description: "System disk type. Options: cloud_essd (enterprise SSD), cloud_ssd (standard SSD), cloud_efficiency (ultra disk)"
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
EcsInstancePassword:
Type: String
NoEcho: true
Label: ECS Instance Password
Description: Length 8-30, must contain at least three of uppercase letters, lowercase letters, digits, and special characters
MinLength: 8
MaxLength: 30
# --- Database parameters ---
DBInstanceClass:
Type: String
Label: RDS Instance Class
Description: Select RDS instance class. Filtered by engine type and zone.
AssociationProperty: ALIYUN::RDS::Instance::InstanceType
AssociationPropertyMetadata:
Engine: MySQL
ZoneId: ${VSwitchZoneId}
EngineVersion: '8.0'
Category: Basic
InstanceChargeType: Postpaid
DBInstanceStorage:
Type: Number
Label: RDS Storage (GB)
Description: RDS storage size, range 20-2000 GB, increment by 5
Default: 200
MinValue: 20
MaxValue: 2000
DBName:
Type: String
Label: Database Name
Description: Initial database name. Must start with a letter, alphanumeric only.
Default: employees
MinLength: 1
MaxLength: 64
DBUsername:
Type: String
Label: Database Username
Description: RDS primary account name. 2-16 lowercase letters, must start with a letter.
Default: rdsuser
MinLength: 2
MaxLength: 16
DBPassword:
Type: String
NoEcho: true
Label: Database Password
Description: RDS database user password
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: VSwitchZoneId
CidrBlock:
Ref: VSwitchCidrBlock
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
NicType: intranet
SourceCidrIp: '0.0.0.0/0'
# === Database layer ===
DBInstance:
Type: ALIYUN::RDS::DBInstance
Properties:
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
Engine: MySQL
EngineVersion: '8.0'
DBInstanceClass:
Ref: DBInstanceClass
DBInstanceStorage:
Ref: DBInstanceStorage
DBInstanceNetType: Intranet
DBMappings:
- CharacterSetName: utf8
DBName:
Ref: DBName
SecurityIPList: 0.0.0.0/0
DBAccount:
Type: ALIYUN::RDS::Account
DependsOn:
- DBInstance
Properties:
DBInstanceId:
Fn::GetAtt:
- DBInstance
- DBInstanceId
AccountPassword:
Ref: DBPassword
AccountType: Super
AccountName:
Ref: DBUsername
# === Compute layer + database initialization ===
EcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: aliyun_3_x64_20G_alibase
AllocatePublicIP: true # Public IP is required to download data files from OSS
InstanceType:
Ref: ECSInstanceType
SystemDiskSize:
Ref: ECSDiskSize
SystemDiskCategory:
Ref: ECSDiskCategory
Password:
Ref: EcsInstancePassword
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand
DependsOn:
- DBAccount # Wait for the database account to be ready before connecting
Properties:
CommandContent:
Fn::Sub:
- |
#!/bin/bash
yum -y install mariadb unzip
wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
unzip /tmp/test_db-master.zip -d /tmp/
mysql -h${DBConnectString} -P3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master/employees.sql
- DBConnectString:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
DBUsername:
Ref: DBUsername
DBPassword:
Ref: DBPassword
Type: RunShellScript
InstanceIds:
- Fn::GetAtt:
- EcsInstance
- InstanceId
Timeout: '500'
Outputs:
RDSInnerConnectionString:
Description: RDS internal endpoint
Label: RDS internal endpoint
Value:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
RDSPort:
Description: RDS port
Label: RDS port
Value:
Fn::GetAtt:
- DBInstance
- InnerPort
ECSPrivateIp:
Description: ECS internal IP address
Label: ECS internal IP address
Value:
Fn::GetAtt:
- EcsInstance
- PrivateIp
ECSPublicIp:
Description: ECS public IP address
Label: ECS public IP address
Value:
Fn::GetAtt:
- EcsInstance
- PublicIp
# === Metadata: console parameter group configuration ===
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
en: Network Configuration
- Parameters:
- ECSInstanceType
- ECSDiskSize
- ECSDiskCategory
- EcsInstancePassword
Label:
default:
en: ECS Instance Configuration
- Parameters:
- DBInstanceClass
- DBInstanceStorage
- DBName
- DBUsername
- DBPassword
Label:
default:
en: Database Configuration
Referência rápida de funções integradas do ROS
|
Função |
Exemplo de sintaxe |
Uso neste modelo |
Descrição |
|
|
|
Referencia valores de parâmetros ou o identificador principal de um recurso |
Retorna o valor do parâmetro ao referenciar um Parameter; retorna o ID principal ao referenciar um Resource |
|
|
|
Recupera o endpoint interno do RDS |
Retorna um atributo de saída do recurso após a criação (não o identificador principal) |
|
|
|
Concatena informações de conexão do banco de dados em comandos shell |
Use |
Implantação
Parâmetros de implantação
Parâmetros obrigatórios (devem ser especificados na implantação)
|
Parâmetro |
Tipo |
Descrição |
Restrições |
|
|
String |
Senha do usuário do ApsaraDB RDS |
Siga a política de senhas do RDS |
Parâmetros opcionais (possuem valores padrão, podem ser mantidos inalterados)
|
Parâmetro |
Valor padrão |
Descrição |
|
|
192.168.0.0/16 |
Faixa de endereços CIDR da VPC |
|
|
192.168.0.0/24 |
CIDR da sub-rede do |
|
|
— |
ID da zona (selecionado dinamicamente no console) |
|
|
— |
Tipo de instância ECS (filtrado dinamicamente no console) |
|
|
|
Categoria do disco do sistema ECS |
|
|
40 |
Tamanho do disco do sistema ECS (GiB), intervalo de 40-500 |
|
|
— |
Senha de login da instância ECS. Comprimento de 8-30 caracteres, deve conter pelo menos três dos seguintes: letras maiúsculas, letras minúsculas, dígitos e caracteres especiais. |
|
|
— |
Tipo de instância RDS (filtrado dinamicamente no console) |
|
|
200 |
Tamanho do armazenamento RDS (GB), intervalo de 20-2000 |
|
|
employees |
Nome do banco de dados inicial |
|
|
rdsuser |
Nome da conta do banco de dados (2-16 letras minúsculas) |
Métodos de implantação
Método 1: Implantar pelo 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 via ROS IaC Code
O IaC Code é um assistente de infraestrutura como código baseado em IA para infraestrutura cloud. Ele ajuda usuários de recursos cloud e engenheiros de O&M a gerar, implantar e gerenciar modelos de infraestrutura por meio de um fluxo de trabalho no terminal.
# Prompt
Deploy an ECS instance and an ApsaraDB RDS MySQL instance. Use Cloud Assistant to initialize the RDS database. The initialization data download URL is: https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
Requirements:
1. ECS uses a newly created VPC and vSwitch.
2. ECS security group opens inbound ports 22 and 3306.
3. Create a new RDS super account and use it to initialize the RDS database.
4. ECS must have a public IP address.
5. VpcCidrBlock, VSwitchZoneId, VSwitchCidrBlock, ECSInstanceType, and ECSDiskCategory must use AssociationProperty and AssociationPropertyMetadata for dynamic console filtering.
Perguntas frequentes
P1: Falha na implantação com "The specified InstanceType is not available in the zone"
Causa: O tipo de instância ECS selecionado não possui estoque na zona especificada.
Solução:
No modelo avançado, o
AssociationPropertyfiltra automaticamente os tipos disponíveis para evitar esse problema.Se estiver usando o modelo básico, acesse Aba de preços da página do produto Elastic Compute Service para confirmar a disponibilidade do tipo de instância na zona de destino ou troque para uma zona diferente.
P2: Tempo limite na execução do comando do Cloud Assistant (timeout do RunCommand)
Causa: O download do arquivo de dados está lento ou a importação SQL excede o valor configurado em Timeout.
Solução:
Aumente o valor de
Timeoutno modelo (por exemplo, altere para'600'ou superior).Garanta que a instância ECS tenha acesso à internet para baixar arquivos (
AllocatePublicIP: trueou configure um NAT Gateway).Armazene o arquivo de dados em um bucket OSS na mesma região da instância ECS e faça o download através de um endpoint interno.
P3: ECS não consegue conectar-se ao RDS, erro "Can't connect to MySQL server"
Etapas de solução de problemas:
Confirme se o ECS e o RDS estão na mesma VPC e no mesmo
vSwitch(garantido pelo modelo).Verifique se a lista de permissões do RDS (
SecurityIPList) inclui o intervalo de IP interno do ECS ou está definida como0.0.0.0/0.Confirme se o status da instância RDS é Running (
DependsOn: DBAccountgarante que o RDS esteja pronto antes da execução do comando).Verifique se as regras do grupo de segurança permitem tráfego de saída na porta 3306.
P4: Como usar uma VPC existente em vez de criar uma nova?
Solução: Remova VPC e vSwitch de Resources e passe-os como 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}
P5: Como modificar este modelo para usar PostgreSQL?
Alterações necessárias:
Altere o recurso RDS para
Engine: PostgreSQLeEngineVersion: '16.0'.Atualize
DBInstanceClasspara um tipo de instância PostgreSQL (por exemplo,pg.n4.medium.2c).Substitua o comando
mysqlemRunCommandpor um comandopsql.-
Atualize o arquivo SQL de inicialização para que seja compatível com PostgreSQL.
Para mais problemas de implantação, consulte FAQ.