Topik ini menjelaskan cara membuat Template Resource Orchestration Service (ROS). Contoh ini mencakup pembuatan template yang mendeklarasikan sumber daya untuk menghubungkan instance Elastic Compute Service (ECS) ke instance ApsaraDB RDS guna inisialisasi data.
Prasyarat
Anda harus memahami sintaks dan struktur template ROS. Untuk informasi lebih lanjut, lihat Memulai dengan Template.
Skenario Contoh
Anda ingin membuat instance ECS dan instance ApsaraDB RDS dalam virtual private cloud (VPC), serta mendapatkan informasi koneksi database ApsaraDB RDS dari instance ECS untuk inisialisasi data.
Catatan Penggunaan
Untuk detail setiap properti sumber daya, Anda dapat melihat tipe sumber daya dari sumber daya sebelumnya. Untuk informasi lebih lanjut, lihat Lihat Tipe Sumber Daya.
Tipe sumber daya mendeklarasikan properti suatu sumber daya, termasuk tipe, apakah wajib, dan apakah dapat diedit. Jika suatu properti wajib, Anda harus mendeklarasikannya di bagian Properties dari bagian Resources template. Jika opsional, Anda dapat meninggalkannya kosong. Jika suatu properti dapat diedit, Anda dapat memodifikasinya dalam template baru setelah ditentukan untuk sumber daya cloud dalam stack. Kemudian, gunakan template baru untuk memperbarui stack dan sumber daya. Jika tidak, properti tersebut tidak dapat dimodifikasi.
Buat Template
Referensi dokumentasi tipe sumber daya membantu Anda menemukan tipe yang paling sesuai dengan kebutuhan Anda. Untuk informasi lebih lanjut, lihat Daftar Tipe Sumber Daya Berdasarkan Layanan.
Contoh ini menggunakan tipe sumber daya berikut: ALIYUN::ECS::VPC (membuat VPC), ALIYUN::ECS::Instance (membuat instance ECS), ALIYUN::RDS::DBInstance (membuat instance ApsaraDB RDS), ALIYUN::ECS::VSwitch (membuat vSwitch tempat instance ECS terhubung), ALIYUN::ECS::SecurityGroup (membuat grup keamanan), dan ALIYUN::ECS::RunCommand (menjalankan perintah untuk inisialisasi data).
Tipe sumber daya ini dapat ditentukan di bagian Resources template yang ingin Anda buat.
Tentukan Sumber Daya dan Hubungkan Sumber Daya
Tentukan Sumber Daya Jaringan Dasar
Tentukan sumber daya jaringan dasar berikut dalam template: Vpc, VSwitch, dan EcsSecurityGroup. Lakukan operasi berikut:
Gunakan fungsi Ref pada parameter pseudo ALIYUN::StackName untuk mendapatkan nama stack. Atur properti ke Ref: ALIYUN::StackName agar nilai properti terkait dengan nama stack. Dalam contoh berikut, nilai
VpcNamediVpcdan nilaiVSwitchNamediVSwitchdikaitkan dengan nama stack. Untuk informasi lebih lanjut, lihat Ref dan ALIYUN::StackName.Gunakan fungsi Fn::Select dan Fn::GetAZs bersama dengan parameter pseudo ALIYUN::Region untuk mendapatkan ID zona pertama dari wilayah tempat stack berada. Dalam contoh berikut, nilai
ZoneIddiVSwitchdiperoleh. Untuk informasi lebih lanjut, lihat Fungsi dan ALIYUN::Region.
Resources:
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:
Fn::Select:
- '0'
- Fn::GetAZs:
Ref: ALIYUN::Region
CidrBlock: 192.168.0.0/24
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranetTentukan Sumber Daya Database
Tentukan sumber daya database berikut dalam template: DBInstance dan DBAccount. Lakukan operasi berikut:
Gunakan fungsi Fn::GetAtt untuk mengembalikan nilai properti suatu sumber daya. Dalam contoh berikut, nilai DBInstanceId di DBAccount dikembalikan. Untuk informasi lebih lanjut, lihat Fn::GetAtt.
Resources:
DBInstance:
Type: ALIYUN::RDS::DBInstance
Properties:
ZoneId:
Fn::Select:
- '0'
- Fn::GetAZs:
Ref: ALIYUN::Region
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
Engine: MySQL
EngineVersion: '8.0'
DBInstanceClass: mysql.n4.medium.2c
DBInstanceStorage: 10
MultiAZ: true
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:
Ref: DBPassword
AccountType: Super
AccountName: rdsuserTentukan Sumber Daya ECS
Tentukan sumber daya ECS berikut dalam template: EcsInstance dan InstanceRunCommand. Lakukan operasi berikut:
Gunakan fungsi Fn::Sub untuk mengganti variabel dalam string input dengan perintah yang ingin Anda jalankan. Dalam contoh berikut, perintah ditentukan dalam nilai CommandContent di InstanceRunCommand. Untuk informasi lebih lanjut, lihat Fn::Sub.
Data yang diinisialisasi dalam contoh adalah data uji yang disediakan oleh MySQL. Untuk memastikan stabilitas jaringan saat data uji diunduh, disarankan menyimpan data di bucket Object Storage Service (OSS) sebelum melakukan operasi.
Resources:
EcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7
AllocatePublicIP: false
InstanceType: ecs.c5.large
SystemDiskSize: 40
SystemDiskCategory: cloud_essd
Password:
Ref: EcsInstancePassword
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand
Properties:
CommandContent:
Fn::Sub:
- |
#!/bin/bash
yum -y install holland-mysqldump.noarch 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 -urdsuser -p${DBPassword} < /tmp/test_db-master/employees.sql
- DBConnectString:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
DBPassword:
Ref: DBPassword
Type: RunShellScript
InstanceIds:
- Fn::GetAtt:
- EcsInstance
- InstanceId
Timeout: '300'Template Sampel Lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description: { }
Parameters:
EcsInstancePassword:
NoEcho: true
Type: String
Description:
en: Kata sandi login server, Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam)
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
Label:
en: Kata Sandi Instance
ConstraintDescription:
en: Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam).
MinLength: 8
MaxLength: 30
DBPassword:
NoEcho: true
Type: String
Label:
en: Kata Sandi DB
Resources:
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:
Fn::Select:
- '0'
- Fn::GetAZs:
Ref: ALIYUN::Region
CidrBlock: 192.168.0.0/24
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
DBInstance:
Type: ALIYUN::RDS::DBInstance
Properties:
ZoneId:
Fn::Select:
- '0'
- Fn::GetAZs:
Ref: ALIYUN::Region
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
Engine: MySQL
EngineVersion: '8.0'
DBInstanceClass: mysql.n4.medium.2c
DBInstanceStorage: 10
MultiAZ: true
DBInstanceNetType: Intranet
DBMappings:
- CharacterSetName: utf8
DBName: employees
SecurityIPList: 0.0.0.0/0
EcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7
AllocatePublicIP: false
InstanceType: ecs.c5.large
SystemDiskSize: 40
SystemDiskCategory: cloud_essd
Password:
Ref: EcsInstancePassword
Account:
Type: ALIYUN::RDS::Account
DependsOn:
- DBInstance
Properties:
DBInstanceId:
Fn::GetAtt:
- DBInstance
- DBInstanceId
AccountPassword:
Ref: DBPassword
AccountType: Super
AccountName: rdsuser
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand
DependsOn:
- Account
Properties:
CommandContent:
Fn::Sub:
- |
#!/bin/bash
yum -y install holland-mysqldump.noarch 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 -urdsuser -p${DBPassword} < /tmp/test_db-master/employees.sql
- DBConnectString:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
DBPassword:
Ref: DBPassword
Type: RunShellScript
InstanceIds:
- Fn::GetAtt:
- EcsInstance
- InstanceId
Timeout: '300'Tambahkan Grup Parameter ke Template dan Tampilkan Nilai Opsi Parameter Berdasarkan Kondisi Filter
Template sampel sebelumnya mendeklarasikan beberapa sumber daya dan asosiasi mereka. Nilai-nilai InstanceType dan SystemDiskCategory di EcsInstance serta nilai DBInstanceClass di DBInstance adalah nilai literal. Setiap kali Anda membuat stack di wilayah yang berbeda, Anda harus memodifikasi struktur template dan mengubah nilai properti.
Untuk meningkatkan fleksibilitas dan kemampuan penggunaan ulang template, tambahkan bagian Parameters.
Tambahkan Grup Parameter ke Template
Tambahkan bagian Metadata ke template untuk mengelompokkan parameter yang didefinisikan di bagian Parameters dan tentukan label untuk setiap grup.
Parameter dapat diklasifikasikan berdasarkan sumber daya atau parameter sumber daya. Tabel berikut mencantumkan grup parameter yang ditambahkan berdasarkan template sampel sebelumnya. Dalam contoh ini, parameter diklasifikasikan berdasarkan nama sumber daya atau nama parameter sumber daya.
Grup Parameter | Nama Sumber Daya | Nama Parameter Sumber Daya |
Konfigurasi Jaringan Dasar |
|
|
Konfigurasi Database |
|
|
Konfigurasi ECS |
|
|
Tampilkan Nilai Opsi Parameter Berdasarkan Kondisi Filter
Jika Anda ingin menentukan kondisi filter untuk parameter dan mengaitkan nilai parameter dengan kondisi filter yang dipilih di konsol ROS, tentukan AssociationProperty dan AssociationPropertyMetadata di template Anda. Dalam contoh ini, nilai opsional dari parameter ECSInstanceType ditampilkan berdasarkan nilai ZoneId. Untuk menentukan AssociationProperty dan AssociationPropertyMetadata di ECSInstanceType, lakukan operasi berikut: Di dokumentasi resmi ROS, gunakan ALIYUN::ECS::Instance untuk menanyakan nilai AssociationProperty yang didukung oleh ECSInstanceType. Nilai berikut ditemukan: ALIYUN::ECS::Instance::InstanceType. Kemudian, tanyakan nilai AssociationPropertyMetadata ketika AssociationProperty diatur ke ALIYUN::ECS::Instance::InstanceType dan ZoneId digunakan sebagai kondisi filter. Untuk informasi lebih lanjut tentang dokumentasi resmi, lihat AssociationProperty dan AssociationPropertyMetadata.
Template Sampel Lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description: { }
Parameters:
VSwitchZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Description:
en: ID Ketersediaan untuk switch yang ada
Label:
en: ID Zona VSwitch
VpcCidrBlock:
Default: 192.168.0.0/16
Label:
en: Blok CIDR VPC
Type: String
Description:
en: Rentang segmen alamat IP jaringan eksklusif baru, direkomendasikan menggunakan segmen IP berikut<font color='green'>[10.0.XX.XX/8]</font><br><font color='green'>[172.16.XX.XX/12]</font><br><font color='green'>[192.168.XX.XX/16]</font>
VSwitchCidrBlock:
Default: 192.168.0.0/24
Type: String
Description:
en: Harus menjadi sub-segmen jaringan eksklusif dan tidak ditempati oleh VSwitch lain.
Label:
en: Blok CIDR VSwitch
ECSInstanceType:
Type: String
Description:
en: <font color='blue'><b>1.Sebelum memilih model, konfirmasikan bahwa model tersedia di zona saat ini, beberapa model perlu dilaporkan terlebih dahulu</font>]<font color='blue'><b>2.Daftar model opsional</font>]<br></font>[ecs.c5.large <font color='green'>2vCPU 4GiB Bandwidth intranet 1Gbps Mengirim dan menerima paket 30MillionPPS</font>][ecs.c5.xlarge <font color='green'>4vCPU 8GiB Bandwidth intranet 1.5Gbps Mengirim dan menerima paket 50MillionPPS</font>][ecs.c5.2xlarge <font color='green'>8vCPU 16GiB Bandwidth intranet 2.5Gbps Mengirim dan menerima paket 80MillionPPS</font>]
Label:
en: Jenis Instance
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
ECSDiskSize:
Type: Number
Description:
en: 'Ukuran disk sistem instance, dalam GiB. Rentang nilai: 40 hingga 500'
Label:
en: Ruang Disk Sistem
MinValue: 40
MaxValue: 500
Default: 40
ECSDiskCategory:
Type: String
Description:
en: '<font color=''blue''></font>[cloud_efficiency: <font color=''green''>Cloud Disk Efisien</font>]<br>[cloud_ssd: <font color=''green''>SSD Cloud Disk</font>]<br>[cloud_essd: <font color=''green''>ESSD Cloud Disk</font>]<br>[cloud: <font color=''green''>Cloud Disk</font>]<br>[ephemeral_ssd: <font color=''green''>Local SSD Cloud Disk</font>]'
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
Label:
en: Jenis Disk Sistem
EcsInstancePassword:
NoEcho: true
Type: String
Description:
en: Kata sandi login server, Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam)
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
Label:
en: Kata Sandi Instance
ConstraintDescription:
en: Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam).
MinLength: 8
MaxLength: 30
DBInstanceClass:
Label:
en: Kelas Instance DB
AssociationProperty: ALIYUN::RDS::Instance::InstanceType
AssociationPropertyMetadata:
Engine: MySQL
ZoneId: ${VSwitchZoneId}
Type: String
Description:
en: 'Pilih spesifikasi instance berdasarkan jenis mesin database dan dukungan area yang tersedia;<br>lihat detail: <a href=''https://www.alibabacloud.com/help/doc-detail/26312.html'' target=''_blank''><b><font color=''blue''>Lembar Spesifikasi Instance</font></a>'
DBInstanceStorage:
Label:
en: Penyimpanan
Type: Number
Description:
en: Rentang ukuran instance RDS adalah 20 - 2000, Bertambah setiap 5, unit GB
MinValue: 20
MaxValue: 2000
ConstraintDescription:
en: Rentang ukuran instance RDS adalah 20 - 2000, Bertambah setiap 5, unit GB
Default: 200
DBName:
Type: String
Label:
en: Nama DB
ConstraintDescription:
en: Harus dimulai dengan huruf dan hanya boleh berisi karakter alfanumerik.
MinLength: 1
MaxLength: 64
Default: employees
DBUsername:
Type: String
Description:
en: Nama akun utama instance database.
ConstraintDescription:
en: Terdiri dari 2 hingga 16 karakter huruf kecil, garis bawah. Harus dimulai dengan huruf dan diakhiri dengan karakter alfanumerik
Label:
en: Nama Pengguna DB
Default:rdsuser
MaxLength: 16
MinLength: 2
DBPassword:
NoEcho: true
Type: String
Label:
en: Kata Sandi DB
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: 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'
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
EcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7
AllocatePublicIP: true
InstanceType:
Ref: ECSInstanceType
SystemDiskSize:
Ref: ECSDiskSize
SystemDiskCategory:
Ref: ECSDiskCategory
Password:
Ref: EcsInstancePassword
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand
DependsOn:
- DBAccount
Properties:
CommandContent:
Fn::Sub:
- |
#!/bin/bash
yum -y install holland-mysqldump.noarch 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'
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
en: Konfigurasi Jaringan Dasar
- Parameters:
- ECSInstanceType
- ECSDiskSize
- ECSDiskCategory
- EcsInstancePassword
Label:
default:
en: Instance
- Parameters:
- DBInstanceClass
- DBInstanceStorage
- DBName
- DBUsername
- DBPassword
Label:
default:
en: Database