Topik ini menjelaskan proses pembuatan template Resource Orchestration Service (ROS). Template ini mendeklarasikan sumber daya yang digunakan untuk membuat grup instance Elastic Compute Service (ECS) dan melampirkannya ke instance Classic Load Balancer (CLB).
Prasyarat
Anda harus sudah memahami sintaksis dan struktur template ROS. Untuk informasi lebih lanjut, lihat Memulai dengan Template.
Contoh skenario
Dalam skenario ini, sebuah grup instance ECS dibuat dalam virtual private cloud (VPC), layanan Nginx diterapkan di grup instance tersebut, lalu grup instance dilampirkan ke instance CLB.

Catatan penggunaan
Anda dapat melihat tipe sumber daya dari sumber daya sebelumnya untuk mendapatkan detail setiap properti sumber daya. Untuk informasi lebih lanjut, lihat Lihat Tipe Sumber Daya.
Tipe sumber daya mendeklarasikan properti sumber daya, seperti tipe, apakah wajib, dan apakah dapat diedit. Jika suatu properti wajib, Anda harus mendeklarasikannya di bagian Properties dari bagian Resources template. Jika properti opsional, Anda bisa meninggalkannya kosong. Jika properti dapat diedit, Anda dapat mengubahnya di template baru setelah properti ditentukan untuk sumber daya cloud dalam template stack. Kemudian, Anda dapat menggunakan template baru untuk memperbarui stack dan sumber daya. Jika tidak, Anda tidak dapat mengubah properti tersebut.
Buat template
Referensi dokumentasi tipe sumber daya untuk menemukan tipe sumber daya yang sesuai untuk skenario Anda. Untuk informasi lebih lanjut, lihat Daftar Tipe Sumber Daya Berdasarkan Layanan.
Dalam contoh skenario, Anda harus membuat sumber daya menggunakan tipe sumber daya berikut: ALIYUN::ECS::VPC (membuat VPC), ALIYUN::ECS::InstanceGroup (membuat grup instance ECS), ALIYUN::SLB::LoadBalancer (membuat instance CLB), ALIYUN::SLB::Listener (menambahkan listener ke instance CLB), ALIYUN::VPC::EIP (membuat EIP, singkatan dari elastic IP address), ALIYUN::ECS::VSwitch (membuat vSwitch tempat grup instance ECS terhubung), dan ALIYUN::ECS::InstanceGroup (membuat security group). Saat menggunakan tipe sumber daya ALIYUN::ECS::InstanceGroup untuk membuat grup instance ECS, Anda harus menggunakan properti UserData dari tipe sumber daya tersebut untuk menjalankan skrip inisialisasi data. Anda juga harus menggunakan ALIYUN::ROS::WaitCondition (menunggu sinyal) dan ALIYUN::ROS::WaitConditionHandle (menerima sinyal) untuk mengontrol proses eksekusi dalam grup instance ECS.
Anda dapat menentukan tipe sumber daya sebelumnya di bagian Resources template.
Definisikan dan asosiasikan sumber daya dalam template
Definisikan Vpc, VSwitch, dan EcsSecurityGroup
Definisikan sumber daya jaringan dasar berikut dalam template: Vpc, VSwitch, dan EcsSecurityGroup.
Gunakan fungsi Ref bersama dengan parameter pseudo ALIYUN::StackName untuk mendapatkan nama stack. Lalu, atur properti ke Ref: ALIYUN::StackName untuk mengaitkan nilai properti dengan nama stack. Dalam potongan kode berikut, nilai
VpcNamediVpcdan nilaiVSwitchNamediVSwitchdikaitkan dengan nama stack. Untuk informasi lebih lanjut, lihat Fungsi dan ALIYUN::StackName.Gunakan fungsi Ref untuk mengembalikan nilai parameter tertentu. Dalam potongan kode berikut, Ref: Vpc ditentukan di
VSwitchuntuk mengembalikan ID VPC yang diurai dariVpcsebagai nilaiVpcId. Pada sebagian besar kasus, Ref mengembalikan ID sumber daya. Untuk informasi lebih lanjut, lihat Fungsi.
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:
Ref: ZoneId
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: intranetDefinisikan Slb, SlbListener, dan EipSlbAddress
Definisikan sumber daya berikut dalam template: Slb (menentukan instance CLB), SlbListener (menentukan listener), dan EipSlbAddress (menentukan EIP).
Gunakan fungsi Fn::Sub dan parameter pseudo ALIYUN::StackName untuk mengganti variabel dalam string input dengan nama stack yang Anda peroleh. Lalu, gunakan string baru sebagai nilai properti. Untuk informasi lebih lanjut, lihat ALIYUN::StackName.
Resources:
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
SlbListener:
DependsOn:
- Slb
Type: ALIYUN::SLB::Listener
Properties:
Persistence:
CookieTimeout: 60
StickySession: 'on'
PersistenceTimeout: 180
XForwardedFor: 'off'
StickySessionType: insert
ListenerPort: 80
Bandwidth: -1
HealthCheck:
HttpCode: http_2xx,http_3xx,http_4xx,http_5xx
HealthCheckType: tcp
UnhealthyThreshold: 3
Timeout: 5
HealthyThreshold: 3
Port: 80
URI: /
Interval: 2
LoadBalancerId:
Ref: Slb
BackendServerPort: 80
Protocol: tcp
EipSlbAddress:
Type: ALIYUN::VPC::EIP
Properties:
Name:
Ref: ALIYUN::StackName
InternetChargeType: PayByTraffic
Bandwidth:
Ref: BandwidthDefinisikan EcsInstanceGroup, WaitCondition, dan WaitConditionHandle
Definisikan sumber daya berikut dalam template: EcsInstanceGroup (menentukan grup instance ECS), WaitCondition (menunggu sinyal), dan WaitConditionHandle (menerima sinyal).
Gunakan fungsi Fn::GetAtt untuk mengembalikan nilai properti sumber daya. Dalam potongan kode berikut, nilai
CurlClidiWaitConditionHandledikembalikan. Untuk informasi lebih lanjut, lihat Fungsi.Gunakan fungsi Fn::Sub untuk mengganti variabel dalam string input dengan nilai yang Anda tentukan. Dalam potongan kode berikut, ${CurlCli} di UserData dari
EcsInstanceGroupdiganti dengan CurlCli. Untuk informasi lebih lanjut, lihat Fungsi.Gunakan ALIYUN::ROS::WaitCondition dan ALIYUN::ROS::WaitConditionHandle untuk mengontrol inisialisasi data di EcsInstanceGroup.
Buat sumber daya ALIYUN::ROS::WaitCondition yang digunakan untuk menunggu sinyal.
Buat sumber daya ALIYUN::ROS::WaitConditionHandle yang digunakan untuk menerima sinyal.
Jalankan skrip yang Anda tentukan di UserData dari EcsInstanceGroup dan kirimkan sinyal dari proses eksekusi. Dalam potongan kode berikut, skrip untuk inisialisasi data ditentukan di UserData dari
EcsInstanceGroupdan dieksekusi. Saat eksekusi skrip berhasil, ROS memanggil balikWaitConditionHandledan gagalWaitCondition.
Resources:
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 300
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
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
UserData:
Fn::Sub:
- |
#!/bin/bash
# Lampirkan disk ke direktori /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
rm -f 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
# Konfigurasikan skrip instalasi.
yum install -y nginx
# Konfigurasikan skrip startup.
systemctl start nginx.service
# Saat eksekusi skrip berhasil, ROS memanggil balik WaitConditionHandle dan gagal WaitCondition.
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
Definisikan EcsInstanceGroup, Slb, dan SlbBackendServerAttachment
Definisikan sumber daya berikut dalam template: EcsInstanceGroup, Slb, dan SlbBackendServerAttachment.
Gunakan
SlbBackendServerAttachmentuntuk melampirkan grup instance ECS ke instance CLB. Untuk informasi lebih lanjut, lihat ALIYUN::SLB::BackendServerAttachment.Tipe sumber daya ALIYUN::SLB::BackendServerAttachment tunduk pada aturan berikut: Jika Anda meninggalkan
BackendServerWeightListkosong, nilai bobot setiap instance ECS yang terkandung dalam instance (backend server) yang ditentukan olehBackendServerListadalah 100. Jika jumlah nilai bobot yang ditentukan olehBackendServerWeightListkurang dari jumlah instance yang ditentukan olehBackendServerList, instance ECS yang berlebih diberi nilai bobot terakhir.Gunakan properti DependsOn untuk menentukan bahwa sumber daya hanya dibuat setelah sumber daya dependen dibuat. Saat Anda menambahkan properti DependsOn ke sumber daya, sumber daya hanya dibuat setelah sumber daya yang ditentukan dalam properti DependsOn dibuat. Untuk informasi lebih lanjut, lihat DependsOn.
Gunakan fungsi Fn::GetAtt untuk mengembalikan nilai properti sumber daya. Dalam potongan kode berikut, nilai
InstanceIdsdiEcsInstanceGroupdikembalikan. Untuk informasi lebih lanjut, lihat Fungsi.
Resources:
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
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
SlbBackendServerAttachment:
DependsOn:
- EcsInstanceGroup
- Slb
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServerList:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
LoadBalancerId:
Ref: Slb
BackendServerWeightList:
- 100
- 50Template sampel lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description:
en: Buat VPC dan vSWitch baru, buat satu CLB, dua instance ECS, dan ikat semua instance ECS ke CLB.
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Label:
en: Zona Ketersediaan vSwitch
VpcCidrBlock:
Default: 192.168.0.0/16
Label:
en: Blok CIDR VPC
Type: String
Description:
en: Rentang segmen alamat IP jaringan eksklusif baru, disarankan menggunakan segmen IP berikut<font color='green'>[10.0.0.0/8]</font><br><font color='green'>[172.16.0.0/12]</font><br><font color='green'>[192.168.0.0/16]</font>
VSwitchCidrBlock:
Default: 192.168.0.0/24
Type: String
Description:
en: Harus merupakan segmen sub-jaringan dari jaringan eksklusif dan tidak ditempati oleh vSwitch lain.
Label:
en: Blok CIDR vSwitch
EcsInstanceType:
Type: String
Label:
en: Tipe Instance
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
SystemDiskCategory:
Type: String
Description:
en: '<font color=''blue''><b>Nilai opsional:</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: ${ZoneId}
InstanceType: ${EcsInstanceType}
Label:
en: Tipe Disk Sistem
SystemDiskSize:
Default: 40
Type: Number
Label:
en: Ruang Disk Sistem
DataDiskCategory:
AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
Type: String
Description:
en: '<font color=''blue''><b>Nilai opsional:</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>]'
Label:
en: Tipe Disk Data
DataDiskSize:
Default: 100
MaxValue: 32768
MinValue: 20
Label:
en: Ruang Disk Data
Type: Number
InstancePassword:
NoEcho: true
Type: String
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).
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
PayType:
Type: String
Label:
en: Jenis Pembayaran Instance ECS
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Description:
en: Siklus panjang pembelian sumber daya. <br>Week adalah Minggu dan Month adalah Bulan. <br> Nilai default adalah bulan.<br><b><font color='red'> Saat jenis instance ECS adalah PrePaid valid.</font>
</b></font>
Label:
en: Unit Periode Pembayaran
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
en: Periode
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
LoadBalancerSpec:
Type: String
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
Label:
en: Spesifikasi LoadBalancer
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Bandwidth:
Description:
en: 'Rentang nilai: [0, 1000], Satuan: Mbps.'
Default: 10
MaxValue: 1000
Label:
en: Bandwidth Elastic IP CLB
MinValue: 1
Type: Number
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/0
NicType: internet
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 300
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
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
UserData:
Fn::Sub:
- |
#!/bin/bash
# Lampirkan disk ke direktori /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
rm -f 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
# Konfigurasikan skrip instalasi.
yum install -y nginx
# Konfigurasikan skrip startup.
systemctl start nginx.service
# Saat eksekusi skrip berhasil, ROS memanggil balik WaitConditionHandle dan gagal WaitCondition.
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
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:
Persistence:
CookieTimeout: 60
StickySession: 'on'
PersistenceTimeout: 180
XForwardedFor: 'off'
StickySessionType: insert
ListenerPort: 80
Bandwidth: -1
HealthCheck:
HttpCode: http_2xx,http_3xx,http_4xx,http_5xx
HealthCheckType: tcp
UnhealthyThreshold: 3
Timeout: 5
HealthyThreshold: 3
Port: 80
URI: /
Interval: 2
LoadBalancerId:
Ref: Slb
BackendServerPort: 80
Protocol: tcp
Outputs:
Endpoint:
Description:
en: Alamat IP Publik.
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::GetAtt:
- EipSlbAddress
- EipAddressTambahkan grup parameter ke template dan tampilkan nilai valid dari parameter berdasarkan kondisi filter
Pada template sebelumnya, beberapa sumber daya didefinisikan dan dihubungkan. Nilai properti LoadBalancerSpec dari sumber daya Slb serta nilai-nilai properti InstanceType dan SystemDiskCategory dari sumber daya EcsInstanceGroup merujuk pada nilai parameter tertentu. Setiap kali Anda membuat stack di wilayah yang berbeda, Anda harus memodifikasi struktur template dan mengubah nilai propertinya.
Dalam hal ini, Anda dapat menambahkan bagian Parameters untuk meningkatkan fleksibilitas dan kemampuan penggunaan ulang template.
Tambahkan grup parameter ke template
Anda dapat menambahkan bagian Metadata ke template untuk mengelompokkan parameter yang didefinisikan di bagian Parameters dan mendefinisikan label untuk setiap grup.
Setelah Anda mendefinisikan sumber daya dan parameter dalam sebuah template, Anda dapat mengelompokkan parameter berdasarkan sumber daya atau berdasarkan parameter sumber daya.
Tabel berikut mencantumkan kelompok parameter yang ditambahkan berdasarkan template sampel lengkap. Dalam contoh ini, parameter dikelompokkan berdasarkan nama sumber daya atau nama parameter sumber daya.
Kelompok parameter | Nama sumber daya | Nama parameter sumber daya |
Konfigurasi jaringan dasar |
|
|
Konfigurasi CLB |
|
|
Konfigurasi ECS |
|
|
Tampilkan nilai-nilai valid dari sebuah parameter berdasarkan kondisi filter
Jika Anda ingin menentukan kondisi filter untuk sebuah parameter dan mengaitkan nilai parameter dengan kondisi filter yang dipilih di konsol ROS, Anda dapat menentukan AssociationProperty dan AssociationPropertyMetadata di dalam template Anda. Dalam contoh ini, nilai-nilai valid dari parameter ECSInstanceType ditampilkan berdasarkan nilai dari ZoneId dan InstanceChargeType. Untuk menentukan AssociationProperty dan AssociationPropertyMetadata di ECSInstanceType, gunakan ALIYUN::ECS::InstanceGroup untuk memeriksa nilai AssociationProperty yang didukung oleh ECSInstanceType di dalam dokumentasi ROS. Nilai berikut ditemukan: ALIYUN::ECS::Instance::InstanceType. Kemudian, periksa nilai AssociationPropertyMetadata ketika AssociationProperty disetel ke ALIYUN::ECS::Instance::InstanceType dan ketika ZoneId dan InstanceChargeType digunakan sebagai kondisi filter. Untuk informasi lebih lanjut tentang dokumentasi, lihat AssociationProperty dan AssociationPropertyMetadata.
Template sampel lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description:
en: Buat VPC dan vSWitch baru, buat satu CLB, dua instance ECS, dan ikat semua instance ECS ke CLB.
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Label:
en: Zona Ketersediaan vSwitch
VpcCidrBlock:
Default: 192.168.0.0/16
Label:
en: Blok CIDR VPC
Type: String
Description:
en: Rentang segmen alamat IP jaringan eksklusif baru, disarankan menggunakan segmen IP berikut<font color='green'>[10.0.0.0/8]</font><br><font color='green'>[172.16.0.0/12]</font><br><font color='green'>[192.168.0.0/16]</font>
VSwitchCidrBlock:
Default: 192.168.0.0/24
Type: String
Description:
en: Harus merupakan segmen sub-jaringan dari jaringan eksklusif dan tidak ditempati oleh vSwitch lain.
Label:
en: Blok CIDR vSwitch
EcsInstanceType:
Type: String
Label:
en: Tipe Instance
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
SystemDiskCategory:
Type: String
Description:
en: '<font color=''blue''><b>Nilai opsional:</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: ${ZoneId}
InstanceType: ${EcsInstanceType}
Label:
en: Tipe Disk Sistem
SystemDiskSize:
Default: 40
Type: Number
Description:
en: 'Ukuran disk sistem, rentang nilai: 40-500, satuan: GB.'
Label:
en: Ruang Disk Sistem
DataDiskCategory:
AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceType: ${EcsInstanceType}
Type: String
Description:
en: '<font color=''blue''><b>Nilai opsional:</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>]'
Label:
en: Tipe Disk Data
DataDiskSize:
Description:
en: 'Ukuran disk instance ECS, rentang nilai: 20-32768, satuan: GB.'
Default: 100
MaxValue: 32768
MinValue: 20
Label:
en: Ruang Disk Data
Type: Number
InstancePassword:
NoEcho: true
Type: String
Description:
en: Kata sandi login server, Panjang 8~30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus).
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).
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
PayType:
Type: String
Label:
en: Jenis Pembayaran Instance ECS
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Description:
en: Siklus panjang pembelian sumber daya. <br>Week adalah Minggu dan Month adalah Bulan. <br> Nilai default adalah bulan.<br><b><font color='red'> Saat jenis instance ECS adalah PrePaid valid.</font>
</b></font>
Label:
en: Unit Periode Pembayaran
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
en: Periode
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
LoadBalancerSpec:
Type: String
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
Label:
en: Spesifikasi LoadBalancer
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Bandwidth:
Description:
en: 'Rentang nilai: [0, 1000], Satuan: Mbps.'
Default: 10
MaxValue: 1000
Label:
en: Bandwidth Elastic IP CLB
MinValue: 1
Type: Number
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
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 300
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
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
UserData:
Fn::Sub:
- |
#!/bin/bash
# Lampirkan disk ke direktori /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
rm -f 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
# Konfigurasikan skrip instalasi.
yum install -y nginx
# Konfigurasikan skrip startup.
systemctl start nginx.service
# Saat eksekusi skrip berhasil, ROS memanggil balik WaitConditionHandle dan gagal WaitCondition.
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
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
- 50
SlbListener:
DependsOn:
- Slb
Type: ALIYUN::SLB::Listener
Properties:
Persistence:
CookieTimeout: 60
StickySession: 'on'
PersistenceTimeout: 180
XForwardedFor: 'off'
StickySessionType: insert
ListenerPort: 80
Bandwidth: -1
HealthCheck:
HttpCode: http_2xx,http_3xx,http_4xx,http_5xx
HealthCheckType: tcp
UnhealthyThreshold: 3
Timeout: 5
HealthyThreshold: 3
Port: 80
URI: /
Interval: 2
LoadBalancerId:
Ref: Slb
BackendServerPort: 80
Protocol: tcp
Outputs:
Endpoint:
Description:
en: Alamat IP Publik
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::GetAtt:
- EipSlbAddress
- EipAddress
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
en: Konfigurasi Jaringan Dasar
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: Konfigurasi Jenis Pembayaran
- Parameters:
- EcsInstanceType
- SystemDiskCategory
- SystemDiskSize
- DataDiskCategory
- DataDiskSize
- InstancePassword
Label:
default:
en: Konfigurasi Instance
- Parameters:
- LoadBalancerSpec
- Bandwidth
Label:
default:
en: Konfigurasi CLB