Topik ini membantu Anda memahami proses pembuatan Template Layanan Orkestrasi Sumber Daya (ROS). Dalam topik ini, sebuah template yang mendeklarasikan sumber daya untuk mengelola beberapa Instance Elastic Compute Service (ECS) menggunakan grup penskalaan dibuat.
Prasyarat
Anda sudah familiar dengan sintaksis dan struktur template ROS. Untuk informasi lebih lanjut, lihat Memulai dengan Template.
Skenario contoh
Dalam skenario ini, sebuah grup penskalaan dibuat dalam virtual private cloud (VPC), dan aturan penskalaan dikonfigurasi untuk grup tersebut. Sebuah Instance ECS dibuat dan ditambahkan ke dalam grup penskalaan. Dengan cara ini, sistem akan menskalakan Instance ECS di dalam grup penskalaan berdasarkan aturan penskalaan.
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 suatu sumber daya, seperti tipe, apakah wajib, dan apakah dapat diedit. Jika sebuah properti wajib, Anda harus mendeklarasikan properti tersebut di bagian Properties dari bagian Resources sebuah template. Jika sebuah properti opsional, Anda dapat meninggalkan properti tersebut kosong. Jika sebuah properti dapat diedit, Anda dapat memodifikasi properti tersebut di template baru setelah properti tersebut ditentukan untuk sumber daya cloud dalam template tumpukan. Kemudian, Anda dapat menggunakan template baru untuk memperbarui tumpukan dan sumber daya tersebut. Jika tidak, Anda tidak dapat memodifikasi properti tersebut.
Buat template
Anda dapat merujuk dokumentasi tipe sumber daya untuk menemukan tipe sumber daya yang paling sesuai dengan kebutuhan Anda. Untuk informasi lebih lanjut, lihat Daftar Tipe Sumber Daya Berdasarkan Layanan.
Dalam skenario contoh, Anda harus membuat sumber daya menggunakan tipe sumber daya berikut: ALIYUN::ECS::VPC (membuat VPC), ALIYUN::ECS::Instance (membuat Instance ECS), ALIYUN::ESS::ScalingGroup (membuat grup penskalaan), ALIYUN::ECS::VSwitch (membuat vSwitch untuk Instance ECS), dan ALIYUN::ECS::SecurityGroup (membuat grup keamanan untuk Instance ECS). Setelah Anda membuat sumber daya, Anda harus menentukan ALIYUN::ESS::ScalingConfiguration (menambahkan konfigurasi penskalaan ke grup penskalaan) dan ALIYUN::ESS::ScalingGroupEnable (mengaktifkan grup penskalaan).
Definisikan sumber daya dan asosiasikan sumber daya dalam template
Definisikan sumber daya jaringan dasar
Definisikan sumber daya jaringan dasar berikut dalam template: Vpc, VSwitch, dan EcsSecurityGroup.
Gunakan fungsi Ref bersama dengan pseudo parameter ALIYUN::StackName untuk mendapatkan nama stack. Kemudian, atur properti ke Ref: ALIYUN::StackName untuk mengaitkan nilai properti dengan nama stack. Dalam potongan kode berikut, nilai dari
VpcNamediVpcdan nilai dariVSwitchNamediVSwitchdikaitkan 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 tumpukan berada. Dalam potongan kode berikut, nilai
ZoneIddalamVSwitchdiperoleh. 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: intranetDefinisikan sumber daya ECS
Definisikan sumber daya EcsInstanceGroup dalam template.
Gunakan fungsi Ref untuk mereferensikan nama logis sumber daya dalam template. Dalam potongan kode berikut, Vpc dalam VpcId, EcsSecurityGroup dalam SecurityGroupId, dan VSwitch dalam VSwitchId direferensikan. Untuk informasi lebih lanjut, lihat Ref.
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: EcsInstancePasswordDefinisikan sumber daya grup penskalaan
Definisikan sumber daya grup penskalaan berikut dalam template: EssInstanceScalingGroup, EssInstanceScalingGroupEnable, dan EssInstanceScalingConfiguration.
Gunakan fungsi Fn::GetAtt untuk mengembalikan nilai properti suatu sumber daya. Dalam potongan kode berikut, nilai
InstanceIdsdalamEssInstanceScalingGroupEnabledikembalikan. Untuk informasi lebih lanjut, lihat Fn::GetAtt.Gunakan fungsi Fn::Sub untuk mengganti variabel dalam string input dengan nilai yang Anda tentukan. Dalam potongan kode berikut, nilai
ScalingConfigurationNamedalamEssInstanceScalingConfigurationdiganti. Untuk informasi lebih lanjut, lihat Fn::Sub.
Resources:
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize: 3
MaxSize: 50
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName}
InstanceType: ecs.c5.large
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroupTemplate contoh 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
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
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
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize: 3
MaxSize: 50
VSwitchId:
Ref: VSwitchId
DefaultCooldown: 300
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName}
InstanceType: ecs.c5.large
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIdsTambahkan kelompok parameter ke template dan tampilkan nilai opsional parameter berdasarkan kondisi filter
Template contoh di atas mendeklarasikan beberapa sumber daya dan asosiasi mereka. Nilai InstanceType dan SystemDiskCategory dalam EcsInstance adalah nilai literal. Setiap kali Anda membuat tumpukan di wilayah yang berbeda, Anda harus memodifikasi struktur template dan mengubah nilai properti.
Dalam kasus ini, Anda dapat menambahkan bagian Parameters untuk meningkatkan fleksibilitas dan kemampuan guna ulang template.
Tambahkan kelompok parameter ke template
Anda dapat menambahkan bagian Metadata ke template untuk mengelompokkan parameter yang didefinisikan dalam bagian Parameters dan mendefinisikan label untuk setiap kelompok.
Setelah Anda mendefinisikan sumber daya dan parameter dalam template, Anda dapat mengelompokkan parameter berdasarkan sumber daya atau berdasarkan parameter sumber daya. Tabel berikut mencantumkan kelompok parameter yang ditambahkan berdasarkan template contoh 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 ECS |
|
|
Konfigurasi grup penskalaan |
|
|
Tampilkan nilai opsional parameter berdasarkan kondisi filter
Jika Anda ingin menentukan kondisi filter untuk parameter dan mengasosiasikan nilai parameter dengan kondisi filter yang dipilih di konsol ROS, Anda dapat menentukan AssociationProperty dan AssociationPropertyMetadata dalam template Anda. Dalam contoh ini, nilai opsional parameter ECSInstanceType ditampilkan berdasarkan nilai ZoneId. Untuk menentukan AssociationProperty dan AssociationPropertyMetadata dalam ECSInstanceType, gunakan ALIYUN::ECS::Instance untuk menanyakan nilai AssociationProperty yang didukung oleh ECSInstanceType dalam dokumentasi resmi ROS. Nilai berikut ditemukan: ALIYUN::ECS::Instance::InstanceType. Kemudian, tanyakan nilai AssociationPropertyMetadata ketika AssociationProperty disetel ke ALIYUN::ECS::Instance::InstanceType dan ZoneId digunakan sebagai kondisi filter. Untuk informasi lebih lanjut tentang dokumentasi resmi, lihat AssociationProperty dan AssociationPropertyMetadata.
Template contoh lengkap
ROSTemplateFormatVersion: '2015-09-01'
Deskripsi:
en: scaling-ecs.
Parameter:
VSwitchZoneId:
Tipe: String
PropertiAsosiasi: ALIYUN::ECS::Instance::ZoneId
Deskripsi:
en: ID Ketersediaan untuk switch yang ada.
Label:
en: VSwitch Zone ID
VpcCidrBlock:
Default: 192.168.0.0/16
Label:
en: VPC CIDR Block
Tipe: String
Deskripsi:
en: Rentang segmen IP jaringan pribadi baru, disarankan 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
Tipe: String
Deskripsi:
en: Harus menjadi sub-segmen dari jaringan pribadi dan tidak digunakan oleh VSwitch lainnya.
Label:
en: VSwitch CIDR Block
ECSInstanceType:
Tipe: String
Label:
en: Instance Type
PropertiAsosiasi: ALIYUN::ECS::Instance::InstanceType
MetadataPropertiAsosiasi:
ZoneId: ${VSwitchZoneId}
InstanceChargeType: ${InstanceChargeType}
ECSDiskCategory:
Tipe: String
Deskripsi:
en: '<font color=''blue''><b>Nilai opsional:</font>[cloud_efficiency: <font color=''green''>Efficient Cloud Disk</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>]'.
PropertiAsosiasi: ALIYUN::ECS::Disk::SystemDiskCategory
MetadataPropertiAsosiasi:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
Label:
en: System Disk Type
ECSImageId:
PropertiAsosiasi: ALIYUN::ECS::Image::ImageId
Label:
en: Image ID
Deskripsi:
en: Image ID, mewakili sumber daya image untuk memulai satu instance ECS, <font><a href='https://www.alibabacloud.com/help/doc-detail/112977.html' target='_blank'><b>Lihat sumber daya image</font color='blue'></a>.
Tipe: String
EcsInstancePassword:
NoEcho: true
Tipe: String
Deskripsi:
en: Password login server, Panjang 8~30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam).
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
Label:
en: Instance Password
ConstraintDescription:
en: Panjang 8~30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam).
MinLength: 8
MaxLength: 30
PropertiAsosiasi: ALIYUN::ECS::Instance::Password
ECSInstanceGroupCount:
Tipe: Number
Deskripsi:
en: Jumlah Instance ECS
Label:
en: Instance Count
Default: 3
ESSGroupMaxSize:
Tipe: Number
Label:
en: Jumlah maksimum instance ECS dalam ESS.
Default: 50
SumberDaya:
Vpc:
Tipe: ALIYUN::ECS::VPC
Properti:
CidrBlock:
Ref: VpcCidrBlock
VpcName:
Ref: ALIYUN::StackName
VSwitch:
Tipe: ALIYUN::ECS::VSwitch
Properti:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
ZoneId:
Ref: VSwitchZoneId
CidrBlock:
Ref: VSwitchCidrBlock
EcsSecurityGroup:
Tipe: ALIYUN::ECS::SecurityGroup
Properti:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: 8080/8080
Prioritas: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
NicType: internet
SecurityGroupEgress:
- PortRange: '-1/-1'
Prioritas: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: internet
- PortRange: '-1/-1'
Prioritas: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
EcsInstanceGroup:
Tipe: ALIYUN::ECS::InstanceGroup
Properti:
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
SecurityGroupId:
Ref: EcsSecurityGroup
SystemDiskCategory:
Ref: ECSDiskCategory
SystemDiskSize: 200
MaxAmount:
Ref: ECSInstanceGroupCount
ImageId:
Ref: ECSImageId
InstanceType:
Ref: ECSInstanceType
Password:
Ref: EcsInstancePassword
AllocatePublicIP: false
EssInstanceScalingGroupEnable:
Tipe: ALIYUN::ESS::ScalingGroupEnable
Properti:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroup
EssInstanceScalingConfiguration:
Tipe: ALIYUN::ESS::ScalingConfiguration
Properti:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName}
InstanceType:
Ref: ECSInstanceType
SystemDiskCategory:
Ref: ECSDiskCategory
SystemDiskSize: 200
ImageId:
Ref: ECSImageId
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
EssInstanceScalingGroup:
Tipe: ALIYUN::ESS::ScalingGroup
Properti:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize:
Ref: ECSInstanceGroupCount
MaxSize: 50
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
Metadata:
ALIYUN::ROS::Interface:
GrupParameter:
- Parameter:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
en: Konfigurasi Jaringan Dasar
- Parameter:
- ECSInstanceType
- ECSDiskCategory
- ECSImageId
- EcsInstancePassword
- ECSInstanceGroupCount
Label:
default:
en: Instance
- Parameter:
- ESSGroupMaxSize
Label:
default:
en: Konfigurasi ESS