Dalam tutorial ini, Anda menggunakan Resource Orchestration Service (ROS) Alibaba Cloud untuk menyediakan instance Elastic Compute Service (ECS) dan instance ApsaraDB RDS MySQL dalam satu Virtual Private Cloud (VPC), lalu menggunakan Cloud Assistant untuk menjalankan skrip inisialisasi yang mengimpor dataset sampel ke RDS. Di akhir proses, Anda akan memiliki lingkungan ECS + RDS yang berfungsi, dibuat dari satu templat YAML yang dapat diterapkan ulang sesuai kebutuhan.
Ikhtisar solusi
Skenario bisnis
Buat instance Elastic Compute Service (ECS) dan instance ApsaraDB RDS MySQL dalam Alibaba Cloud Virtual Private Cloud (VPC) yang sama. Instance ECS terhubung ke instance RDS melalui jaringan internal VPC, dan Cloud Assistant (RunCommand) secara otomatis menjalankan skrip shell pada instance ECS untuk melakukan inisialisasi database.
Sumber daya yang dibuat
No. | Resource | Jenis sumber daya ROS | Deskripsi |
1 | VPC |
| Menyediakan lingkungan jaringan terisolasi. Semua sumber daya diterapkan dalam VPC yang sama. |
2 | vSwitch |
| Membagi subnet dalam VPC dan menentukan zona. |
3 | Security group |
| Mengontrol lalu lintas inbound dan outbound untuk instance ECS. |
4 | ECS instance |
| Node komputasi yang menjalankan skrip inisialisasi database. |
5 | ApsaraDB RDS MySQL instance |
| Database target yang menyimpan data hasil inisialisasi. |
6 | Database account |
| Akun logon RDS yang digunakan instance ECS untuk terhubung ke database. |
7 | Cloud Assistant command |
| Menjalankan skrip shell secara jarak jauh pada instance ECS untuk melakukan inisialisasi database. |
Hasil yang diharapkan setelah penerapan
Setelah templat berhasil diterapkan, Anda akan memiliki:
Lingkungan jaringan VPC lengkap, termasuk VPC, vSwitch, dan security group.
Instance ECS yang terhubung ke jaringan VPC dan security group.
Instance ApsaraDB RDS MySQL 8.0 dengan database awal dan akun super.
Dataset sampel employees resmi MySQL (sekitar 300.000 record) yang secara otomatis diimpor ke database.
Diagram arsitektur

Prasyarat
Sebelum memulai, pastikan hal-hal berikut:
Akun dan izin: Akun Alibaba Cloud dengan izin untuk membuat sumber daya di ECS, ApsaraDB RDS, VPC, dan Cloud Assistant.
Persiapan pengetahuan: Pengetahuan dasar tentang sintaks dan struktur templat ROS. Untuk detailnya, lihat Memulai dengan konten templat.
Tutorial penulisan templat
Tutorial ini membahas templat dalam dua fase:
Fase 1 (Dasar): menggunakan nilai parameter tetap sehingga Anda dapat fokus pada definisi sumber daya dan hubungan dependensi.
Fase 2 (Advanced): memarameterisasi semua pengaturan yang dapat dikonfigurasi, menambahkan penyaringan parameter dinamis, dan mengelompokkan parameter.
Fase 1: Templat dasar — Definisikan sumber daya dan dependensi
Langkah 1: Definisikan sumber daya jaringan (VPC + vSwitch + Security group)
Sumber daya jaringan merupakan fondasi bagi semua sumber daya lain dan harus dibuat terlebih dahulu.
Resources:
# ============================================================
# Lapisan jaringan: VPC → vSwitch → SecurityGroup
# ============================================================
Vpc:
Type: ALIYUN::ECS::VPC # Buat VPC
Properties:
CidrBlock: 192.168.0.0/16 # Blok CIDR VPC, mendukung hingga 65.534 IP internal
VpcName:
Ref: ALIYUN::StackName # Parameter semu: gunakan nama stack sebagai nama VPC
VSwitch:
Type: ALIYUN::ECS::VSwitch # Buat vSwitch (subnet) dalam VPC
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # Ref mengembalikan VpcId dari Vpc (dependensi implisit; ROS membuat Vpc terlebih dahulu)
ZoneId: cn-beijing-h # Contoh ini menggunakan zona H Beijing
CidrBlock: 192.168.0.0/24 # Blok CIDR subnet; harus merupakan subset dari blok CIDR VPC
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup # Buat security group
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # Ikat security group ke VPC yang sama
SecurityGroupIngress: # Aturan masuk: izinkan semua lalu lintas masuk
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 0.0.0.0/0
NicType: intranetKonsep kunci:
Nama kustom seperti
VpcName,VSwitchName, danSecurityGroupNamedapat menggunakan parameter semu. Hal ini membantu Anda dengan cepat menemukan sumber daya yang terkait dengan stack setelah penerapan.Aturan security group dapat disesuaikan sesuai kebutuhan bisnis Anda. Misalnya:
Untuk mengizinkan akses eksternal ke layanan web, tambahkan aturan masuk untuk membuka Port HTTP 80 atau 8080.
Untuk mengizinkan logon SSH, tambahkan aturan masuk untuk membuka port 22.
Langkah 2: Definisikan sumber daya database (Instance RDS + Akun database)
Resources:
# ============================================================
# Lapisan database: instance ApsaraDB RDS MySQL + akun database
# ============================================================
DBInstance:
Type: ALIYUN::RDS::DBInstance # Buat instance ApsaraDB RDS MySQL
Properties:
ZoneId: cn-beijing-h
VpcId:
Ref: Vpc # Terapkan RDS dalam VPC yang sama dengan ECS (wajib untuk konektivitas jaringan internal)
VSwitchId:
Ref: VSwitch # Tentukan vSwitch agar ECS dan RDS berada dalam subnet yang sama
Engine: MySQL # Mesin database
EngineVersion: '8.0' # Versi MySQL
DBInstanceClass: mysql.n2e.medium.1 # Tipe instans (2 vCPU, 4 GB)
DBInstanceStorage: 10 # Penyimpanan: 10 GB
MultiAZ: true # Penerapan multi-zona untuk ketersediaan lebih tinggi
DBInstanceNetType: Intranet # Jenis jaringan internal (jaringan VPC)
DBMappings: # Buat database awal
- CharacterSetName: utf8 # Set karakter
DBName: employees # Nama database
SecurityIPList: 0.0.0.0/0 # Daftar putih RDS (mengizinkan semua IP dalam VPC)
DBAccount:
Type: ALIYUN::RDS::Account # Buat akun database RDS
Properties:
DBInstanceId:
# Fn::GetAtt mengembalikan atribut output dari sumber daya (bukan pengenal utama)
Fn::GetAtt:
- DBInstance # Nama sumber daya logis
- DBInstanceId # Nama atribut yang diambil
AccountPassword: Admin@2791
AccountType: Super # Akun super (memiliki semua izin database)
AccountName: rdsuser # Nama akunKonsep kunci:
Perbedaan antara
RefdanFn::GetAtt:Refmengembalikan pengenal utama sumber daya (misalnya,VpcIddari VPC).Fn::GetAttmengembalikan atribut terkait sumber daya (misalnya,InnerConnectionStringdari instance RDS).
Langkah 3: Definisikan sumber daya instance ECS
Resources:
# ============================================================
# Lapisan komputasi + inisialisasi: instance ECS + Cloud Assistant untuk inisialisasi database
# ============================================================
EcsInstance:
Type: ALIYUN::ECS::Instance # Buat instance ECS
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch # vSwitch yang sama dengan RDS untuk memastikan konektivitas jaringan internal
ImageId: aliyun_3_x64_20G_alibase # Citra OS: Alibaba Cloud Linux 3 (rilis yang dipelihara)
AllocatePublicIP: true
InstanceType: ecs.c5.large # Tipe instans: 2 vCPU, 4 GiB
SystemDiskSize: 40 # Disk sistem: 40 GiB
SystemDiskCategory: cloud_essd # SSD Perusahaan (ESSD)
Password: <REPLACE_WITH_STRONG_PASSWORD> # 8-30 karakter, kombinasi huruf besar/kecil, angka, dan karakter khusus
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand # Cloud Assistant: menjalankan perintah jarak jauh pada ECS
DependsOn:
- DBAccount # Dependensi eksplisit: tunggu hingga akun database dibuat sebelum terhubung
Properties:
CommandContent:
# Fungsi Fn::Sub: substitusi variabel string
# Sintaks: Fn::Sub: [string templat, {variabel: nilai}]
# Referensikan variabel dalam string templat menggunakan ${variabel}
Fn::Sub:
- |
#!/bin/bash
# 1. Instal klien MySQL dan tool dekompresi
yum -y install mariadb unzip
# 2. Unduh dataset sampel resmi MySQL dari OSS
wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
# 3. Ekstrak file data
unzip /tmp/test_db-master.zip -d /tmp/
# 4. Terhubung ke database melalui titik akhir internal RDS dan impor SQL
mysql -h${DBConnectString} -P3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master/employees.sql
- DBConnectString:
# Ambil string koneksi internal instance RDS
Fn::GetAtt:
- DBInstance
- InnerConnectionString
DBUsername: rdsuser
DBPassword: Admin@2791
Type: RunShellScript # Jenis perintah: skrip shell
InstanceIds: # Daftar instance ECS target
- Fn::GetAtt:
- EcsInstance
- InstanceId
Timeout: '500' # Batas waktu eksekusi perintah: 500 detikKonsep kunci:
InnerConnectionStringadalah titik akhir koneksi internal VPC yang dihasilkan secara otomatis setelah instance RDS dibuat.Jika
AllocatePublicIP: false, instance ECS tidak memiliki IP publik. Untuk mengunduh file dari internet, konfigurasikan Gateway NAT untuk VPC atau aturAllocatePublicIP: true.Dependensi implisit vs eksplisit:
Saat Anda menggunakan
RefatauFn::GetAttuntuk mereferensikan sumber daya, ROS secara otomatis menyimpulkan dependensinya (implisit).Gunakan
DependsOn(eksplisit) hanya ketika dua sumber daya tidak memiliki hubungan referensi langsung tetapi harus dibuat dalam urutan tertentu.
Data inisialisasi dalam contoh ini adalah dataset sampel employees resmi MySQL. Untuk memastikan unduhan stabil, unggah file data ke bucket OSS Anda terlebih dahulu dan ganti URL wget.
Templat dasar lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description: Buat jaringan VPC, terapkan instance ECS dan RDS MySQL, inisialisasi database melalui RunCommand
Parameters:
Resources:
# === Lapisan jaringan ===
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
# === Lapisan database ===
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
# === Lapisan komputasi + inisialisasi database ===
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 karakter, kombinasi huruf besar/kecil, angka, dan karakter khusus
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: Titik akhir internal RDS
Label: Titik akhir internal RDS
Value:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
RDSPort:
Description: Port RDS
Label: Port RDS
Value:
Fn::GetAtt:
- DBInstance
- InnerPort
ECSPrivateIp:
Description: Alamat IP internal ECS
Label: Alamat IP internal ECS
Value:
Fn::GetAtt:
- EcsInstance
- PrivateIp
ECSPublicIp:
Description: Alamat IP publik ECS
Label: Alamat IP publik ECS
Value:
Fn::GetAtt:
- EcsInstance
- PublicIpKonsep kunci:
Setelah templat membuat sumber daya, gunakan bagian
Outputsuntuk mengkueri atribut sumber daya seperti titik akhir internal RDS, port RDS, IP internal ECS, dan IP publik ECS.
Fase 2: Templat advanced — Parameterisasi dan konfigurasi dinamis
Dalam templat dasar, properti seperti InstanceType dan SystemDiskCategory untuk instance ECS serta DBInstanceClass untuk instance RDS menggunakan nilai tetap. Saat Anda menggunakan kembali templat di wilayah berbeda atau dengan spesifikasi berbeda, Anda harus mengedit templat setiap kali. Parameter dalam templat sering kali memiliki hubungan dependensi. Misalnya, tipe instans ECS dibatasi oleh zona (zona berbeda menawarkan tipe berbeda), dan kategori disk sistem selanjutnya dibatasi oleh zona dan tipe instans. Jika Anda memasukkan parameter ini secara manual, Anda dapat dengan mudah memilih kombinasi yang tidak valid sehingga menyebabkan kegagalan penerapan.
Perbaikan berikut membuat templat fleksibel dan dapat digunakan kembali:
Parameterisasi (Parameters) — Ekstrak konfigurasi variabel sebagai parameter yang diisi secara dinamis saat penerapan.
Penyaringan parameter dinamis (AssociationProperty) — Biarkan konsol ROS secara otomatis menyaring opsi yang tersedia berdasarkan parameter yang dipilih.
Pengelompokan parameter (Metadata) — Kelompokkan parameter berdasarkan kategori logis di konsol untuk meningkatkan pengalaman konfigurasi.
Diagram dependensi parameter
Diagram berikut menunjukkan rantai dependensi menggunakan tipe instans ECS, kategori disk sistem, dan tipe instans RDS sebagai contoh:
VSwitchZoneId (zona) <- Parameter dasar, tanpa prasyarat
|
|-> ECSInstanceType (tipe instans ECS)
| | Bergantung pada: ZoneId
| |
| |-> ECSDiskCategory (kategori disk sistem)
| Bergantung pada: ZoneId + InstanceType
|
|-> DBInstanceClass (tipe instans RDS)
Bergantung pada: ZoneId + Engine (nilai tetap)Pendekatan inti: Pertama pilih zona, lalu saring tipe instans ECS dan RDS sesuai, dan akhirnya saring kategori disk berdasarkan zona ditambah tipe instans ECS. Setiap langkah hanya menampilkan opsi yang tersedia dalam kondisi saat ini, mencegah kombinasi yang tidak valid.
Cara kerja AssociationProperty
1. VSwitchZoneId — Zona (parameter dasar)
Atur AssociationProperty ke ALIYUN::ECS::ZoneId untuk mencantumkan semua zona yang tersedia di wilayah saat ini:
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::ZoneIdParameter ini menjadi dasar penyaringan untuk semua parameter berikutnya. Saat zona dipilih, daftar opsi untuk parameter lain akan diperbarui secara otomatis.
2. ECSInstanceType — Tipe instans ECS
Atur AssociationProperty ke ALIYUN::ECS::Instance::InstanceType dan asosiasikan ${VSwitchZoneId} untuk menyaring tipe instans ECS yang tersedia di zona yang dipilih:
ECSInstanceType:
Type: String
Label:
zh-cn: ECS 实例规格
en: ECS Instance Type
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}Tipe instans yang tersedia berbeda-beda tergantung zonanya. Tanpa penyaringan, pengguna mungkin memilih tipe yang stoknya habis di zona yang dipilih, sehingga menyebabkan kegagalan pembuatan.
3. ECSDiskCategory — Kategori disk sistem
Atur AssociationProperty ke ALIYUN::ECS::Disk::SystemDiskCategory dan asosiasikan ${VSwitchZoneId} dan ${ECSInstanceType} untuk menyaring kategori disk yang didukung oleh zona dan tipe instans yang dipilih:
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}Ketersediaan kategori disk bergantung pada zona (beberapa zona tidak mendukung ESSD) dan tipe instans (beberapa tipe hanya mendukung kategori disk tertentu).
4. DBInstanceClass — Tipe instans RDS
Atur AssociationProperty ke ALIYUN::RDS::Instance::InstanceType dan asosiasikan ${VSwitchZoneId} dan Engine: MySQL tetap untuk menyaring tipe instans RDS yang mendukung MySQL di zona yang dipilih:
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: PostpaidKarena skenario ini menggunakan MySQL, mesinnya bersifat tetap. Jika Anda ingin memilih mesin lain, tambahkan parameter Engine dengan AssociationProperty: ALIYUN::RDS::Engine::EngineId dan referensikan ${Engine} di sini.
Templat penyaringan parameter dinamis
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}Cara kerja penyaringan kaskade AssociationProperty
Saat Anda membuat stack di konsol ROS, pemilihan parameter memicu kaskade:
Memilih zona (
VSwitchZoneId).Daftar drop-down tipe instans ECS diperbarui untuk hanya menampilkan tipe yang tersedia di zona tersebut.
Daftar drop-down tipe instans RDS diperbarui untuk hanya menampilkan tipe yang mendukung MySQL di zona tersebut.
Setelah tipe instans ECS dipilih, daftar drop-down kategori disk sistem diperbarui untuk hanya menampilkan kategori yang didukung oleh kombinasi zona dan tipe instans tersebut.
Hal ini memastikan setiap pilihan hanya menampilkan opsi yang valid dan menghilangkan kegagalan penerapan yang disebabkan oleh kombinasi parameter yang tidak valid.
Pengelompokan parameter Metadata
Gunakan ALIYUN::ROS::Interface dalam Metadata untuk mengorganisir parameter ke dalam kelompok logis dengan label. Konsol menampilkan parameter dalam kelompok, yang meningkatkan pengalaman konfigurasi.
Sintaks Metadata
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups: # Daftar kelompok parameter (wajib)
- Parameters: # Parameter dalam kelompok ini (wajib)
- ParameterName1
- ParameterName2
Label: # Label kelompok (wajib)
default:
en: English label textAturan Metadata:
ParameterGroups,Parameters, danLabelsemuanya wajib.Nama parameter yang tercantum di bawah
Metadata.ALIYUN::ROS::Interface.ParameterGroups.Parametersharus persis sama dengan nama yang didefinisikan di bagianParameters.Parameter yang tidak ditugaskan ke kelompok mana pun akan muncul di area yang tidak dikelompokkan di konsol.
Templat 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 ConfigurationDesain pengelompokan untuk skenario ini
Templat ini membagi 12 parameter menjadi 3 kelompok:
Kelompok | Parameter yang termasuk |
Network Configuration | VSwitch Availability Zone |
ECS Instance Configuration | ECS Instance Type |
Database Configuration | RDS Instance Class |
Templat advanced lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description: >-
Templat berparameter: buat ECS dan RDS MySQL dalam VPC, inisialisasi database melalui RunCommand.
Mendukung pemilihan dinamis zona, tipe instans, dan kategori disk.
Parameters:
# --- Parameter jaringan ---
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
# --- Parameter ECS ---
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
# --- Parameter database ---
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:
# === Lapisan jaringan ===
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'
# === Lapisan database ===
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
# === Lapisan komputasi + inisialisasi database ===
EcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: aliyun_3_x64_20G_alibase
AllocatePublicIP: true # IP publik diperlukan untuk mengunduh file data dari OSS
InstanceType:
Ref: ECSInstanceType
SystemDiskSize:
Ref: ECSDiskSize
SystemDiskCategory:
Ref: ECSDiskCategory
Password:
Ref: EcsInstancePassword
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand
DependsOn:
- DBAccount # Tunggu hingga akun database siap sebelum terhubung
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: Titik akhir internal RDS
Label: Titik akhir internal RDS
Value:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
RDSPort:
Description: Port RDS
Label: Port RDS
Value:
Fn::GetAtt:
- DBInstance
- InnerPort
ECSPrivateIp:
Description: Alamat IP internal ECS
Label: Alamat IP internal ECS
Value:
Fn::GetAtt:
- EcsInstance
- PrivateIp
ECSPublicIp:
Description: Alamat IP publik ECS
Label: Alamat IP publik ECS
Value:
Fn::GetAtt:
- EcsInstance
- PublicIp
# === Metadata: konfigurasi kelompok parameter konsol ===
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 ConfigurationReferensi cepat fungsi bawaan ROS
Fungsi | Contoh sintaks | Penggunaan dalam templat ini | Deskripsi |
|
| Referensikan nilai parameter atau pengenal utama sumber daya | Mengembalikan nilai parameter saat mereferensikan Parameter; mengembalikan ID utama saat mereferensikan Resource |
|
| Ambil titik akhir internal RDS | Mengembalikan atribut output sumber daya setelah pembuatan (bukan pengenal utama) |
|
| Gabungkan informasi koneksi database dalam perintah shell | Gunakan |
Penerapan
Parameter penerapan
Parameter wajib (harus ditentukan saat penerapan)
Parameter | Tipe | Deskripsi | Batasan |
| String | Kata sandi pengguna ApsaraDB RDS | Mengikuti kebijakan kata sandi RDS |
Parameter opsional (memiliki nilai default, dapat dibiarkan tidak berubah)
Parameter | Nilai default | Deskripsi |
| 192.168.0.0/16 | Rentang alamat CIDR VPC |
| 192.168.0.0/24 | CIDR subnet |
| — | ID zona (dipilih secara dinamis di konsol) |
| — | Tipe instans ECS (disaring secara dinamis di konsol) |
|
| Kategori disk sistem ECS |
| 40 | Ukuran disk sistem ECS (GiB), rentang 40-500 |
| — | Kata sandi logon instance ECS. Panjang 8-30 karakter, harus mengandung minimal tiga dari huruf besar, huruf kecil, angka, dan karakter khusus. |
| — | Tipe instans RDS (disaring secara dinamis di konsol) |
| 200 | Ukuran penyimpanan RDS (GB), rentang 20-2000 |
| employees | Nama database awal |
| rdsuser | Nama akun database (2-16 huruf kecil) |
Metode penerapan
Metode 1: Terapkan melalui konsol ROS
Login ke konsol ROS.
Di panel navigasi kiri, pilih Stacks > Create Stack.
Pilih Select an Existing Template > Enter Template Content dan tempel templat lengkap ke editor.
Klik Next, lalu konfigurasikan parameter berdasarkan kelompok.
Setelah mengonfirmasi konfigurasi, klik Create dan tunggu hingga status stack berubah menjadi
CREATE_COMPLETE.
Metode 2: Terapkan melalui ROS IaC Code
IaC Code adalah asisten AI infrastructure-as-code untuk infrastruktur cloud. Alat ini membantu pengguna sumber daya cloud dan insinyur O&M menghasilkan, menerapkan, dan mengelola templat infrastruktur melalui alur kerja terminal.
# Prompt
Terapkan instance ECS dan instance ApsaraDB RDS MySQL. Gunakan Cloud Assistant untuk menginisialisasi database RDS. URL unduhan data inisialisasi adalah: https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
Persyaratan:
1. ECS menggunakan VPC dan vSwitch yang baru dibuat.
2. Security group ECS membuka port inbound 22 dan 3306.
3. Buat akun super RDS baru dan gunakan untuk menginisialisasi database RDS.
4. ECS harus memiliki alamat IP publik.
5. VpcCidrBlock, VSwitchZoneId, VSwitchCidrBlock, ECSInstanceType, dan ECSDiskCategory harus menggunakan AssociationProperty dan AssociationPropertyMetadata untuk penyaringan dinamis di konsol.FAQ
Pertanyaan 1: Penerapan gagal dengan pesan "The specified InstanceType is not available in the zone"
Penyebab: Tipe instans ECS yang dipilih tidak tersedia di zona yang ditentukan.
Solusi:
Dalam templat advanced,
AssociationPropertysecara otomatis menyaring tipe yang tersedia untuk mencegah masalah ini.Jika Anda menggunakan templat dasar, kunjungi tab Harga di halaman produk Elastic Compute Service untuk memastikan ketersediaan tipe instans di zona target, atau beralih ke zona lain.
Pertanyaan 2: Eksekusi perintah Cloud Assistant melebihi batas waktu (RunCommand timeout)
Penyebab: Unduhan file data lambat, atau impor SQL melebihi nilai Timeout yang dikonfigurasi.
Solusi:
Tingkatkan nilai
Timeoutdalam templat (misalnya, ubah menjadi'600'atau lebih tinggi).Pastikan instance ECS dapat mengakses internet untuk mengunduh file (
AllocatePublicIP: trueatau konfigurasikan Gateway NAT).Simpan file data di bucket OSS di wilayah yang sama dengan instance ECS, dan unduh melalui titik akhir internal.
Pertanyaan 3: ECS tidak dapat terhubung ke RDS, error "Can't connect to MySQL server"
Langkah pemecahan masalah:
Pastikan ECS dan RDS berada dalam VPC dan
vSwitchyang sama (dijamin oleh templat).Periksa apakah daftar putih RDS (
SecurityIPList) mencakup rentang IP internal ECS atau diatur ke0.0.0.0/0.Pastikan status instance RDS adalah Running (
DependsOn: DBAccountmemastikan RDS siap sebelum perintah dijalankan).Periksa apakah aturan security group mengizinkan lalu lintas keluar pada port 3306.
Pertanyaan 4: Bagaimana cara menggunakan VPC yang sudah ada alih-alih membuat yang baru?
Solusi: Hapus VPC dan vSwitch dari Resources dan teruskan sebagai Parameters sebagai gantinya:
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}Pertanyaan 5: Bagaimana cara memodifikasi templat ini untuk menggunakan PostgreSQL?
Perubahan yang diperlukan:
Ubah sumber daya RDS ke
Engine: PostgreSQLdanEngineVersion: '16.0'.Perbarui
DBInstanceClasske tipe instans PostgreSQL (misalnya,pg.n4.medium.2c).Ganti perintah
mysqldalamRunCommanddengan perintahpsql.Perbarui file SQL inisialisasi agar kompatibel dengan PostgreSQL.
Untuk masalah penerapan lainnya, lihat FAQ.