Pelajari cara mengedit templat Resource Orchestration Service (ROS) untuk mengelola beberapa instans Elastic Compute Service (ECS) menggunakan grup penskalaan, mulai dari konfigurasi sederhana hingga konfigurasi yang lebih kompleks.
Prasyarat
Pahami sintaks dan struktur templat. Untuk informasi selengkapnya, lihat Quick Start.
Skenario contoh
Buat grup penskalaan dengan aturan penskalaan di virtual private cloud (VPC) Alibaba Cloud, tambahkan instans ECS ke dalam grup tersebut, lalu lakukan penskalaan keluar atau masuk berdasarkan aturan yang telah dikonfigurasi.
Catatan penggunaan
Lihat detail properti untuk setiap tipe resource. Untuk informasi selengkapnya, lihat View resource types.
Setiap tipe resource menentukan tipe, persyaratan, dan kebijakan pembaruan untuk propertinya. Properti wajib harus dideklarasikan dalam bagian `Properties` pada blok `Resources`. Properti opsional tidak perlu dideklarasikan. Jika suatu properti memungkinkan pembaruan, Anda dapat mengubahnya dalam templat baru lalu memperbarui stack untuk menerapkan perubahan tersebut. Jika tidak, properti tersebut tidak dapat diperbarui.
Edit templat
Anda dapat menemukan tipe resource yang diperlukan dalam dokumen indeks tipe resource. Untuk informasi selengkapnya, lihat Resource type index.
Skenario ini mengharuskan Anda membuat VPC (ALIYUN::ECS::VPC), instans ECS (ALIYUN::ECS::Instance), dan grup penskalaan (ALIYUN::ESS::ScalingGroup). Anda juga memerlukan vSwitch (ALIYUN::ECS::VSwitch) dan security group (ALIYUN::ECS::SecurityGroup) untuk instans ECS, konfigurasi penskalaan (ALIYUN::ESS::ScalingConfiguration) untuk grup penskalaan, serta resource untuk mengaktifkan grup penskalaan (ALIYUN::ESS::ScalingGroupEnable).
Tentukan resource templat dan dependensinya
Tentukan resource jaringan dasar
Tentukan resource jaringan dasar `Vpc`, `vSwitch`, dan `EcsSecurityGroup` dalam templat.
-
Gunakan fungsi intrinsik `Ref` dan parameter pseudo `ALIYUN::StackName` untuk mengambil nama stack dan menggunakannya sebagai nilai properti resource, seperti `VpcName` pada `Vpc` dan `VSwitchName` pada `vSwitch`. Untuk informasi selengkapnya, lihat Ref dan ALIYUN::StackName.
-
Gunakan fungsi intrinsik `Fn::Select` dan `Fn::GetAZs` dengan parameter pseudo `ALIYUN::Region` untuk mengambil ID zona pertama di wilayah tempat stack dibuat, misalnya untuk properti `ZoneId` pada `vSwitch`. Untuk informasi selengkapnya, lihat Functions 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: intranet
Tentukan resource ECS
Tentukan resource ECS `EcsInstanceGroup` dalam templat.
Gunakan fungsi intrinsik `Ref` untuk mereferensikan nama logis resource lain dalam templat, seperti `VpcId` dari resource `Vpc`, `SecurityGroupId` dari resource `EcsSecurityGroup`, dan `VSwitchId` dari resource `vSwitch`. Untuk informasi selengkapnya, lihat Ref.
Resources:
EcsInstanceGroup:
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
Mendefinisikan sumber daya grup penskalaan
Tentukan resource grup penskalaan `EssInstanceScalingGroup`, `EssInstanceScalingGroupEnable`, dan `EssInstanceScalingConfiguration` dalam templat.
-
Gunakan fungsi intrinsik `Fn::GetAtt` untuk mengambil nilai atribut resource, seperti `InstanceIds` pada `EssInstanceScalingGroupEnable`. Untuk informasi selengkapnya, lihat Fn::GetAtt.
-
Gunakan fungsi intrinsik `Fn::Sub` untuk mengganti variabel dalam string input dengan nilai yang ditentukan. Misalnya, Anda dapat menggunakan fungsi ini untuk properti `ScalingConfigurationName` pada `EssInstanceScalingConfiguration`. Untuk informasi selengkapnya, 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: EssInstanceScalingGroup
Templat contoh lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description: { }
Parameters:
EcsInstancePassword:
NoEcho: true
Type: String
Description: The logon password for the server. It must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/.
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
Label: Instance Password
ConstraintDescription: The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters. Special characters include ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/.
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: 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:
- EcsInstance
- InstanceIds
Tambahkan grup parameter templat dan dapatkan konfigurasi parameter secara dinamis
Templat sebelumnya telah menentukan resource dan dependensinya, tetapi properti seperti `InstanceType` dan `SystemDiskCategory` untuk `EcsInstance` menggunakan nilai statis. Anda perlu mengubah templat setiap kali membuat stack di wilayah yang berbeda.
Untuk membuat templat lebih fleksibel dan dapat digunakan kembali, tambahkan bagian `Parameters`.
Tambahkan grup parameter templat
Gunakan bagian `Metadata` dalam templat untuk mengelompokkan parameter dan menentukan label grup.
Setelah Anda menentukan resource dan parameter templat, kelompokkan parameter berdasarkan resource terkait sebagai berikut:
|
Kategorisasi parameter resource |
Nama resource |
Nama parameter |
|
Konfigurasi jaringan dasar |
|
|
|
Konfigurasi ECS |
|
|
|
Konfigurasi resource grup penskalaan |
|
|
Dapatkan pengaturan parameter secara dinamis
Ambil `EcsInstanceType` sebagai contoh. Untuk menetapkan kondisi filter dan memilih nilai parameter secara dinamis di Konsol, cari nilai `AssociationProperty` yang didukung untuk parameter tersebut. Nilai `ALIYUN::ECS::Instance::InstanceType` didokumentasikan di bawah bagian `AssociationProperty` dan `AssociationPropertyMetadata` untuk tipe resource `ALIYUN::ECS::Instance`, dengan `ZoneId` sebagai kondisi filter. Untuk informasi selengkapnya, lihat AssociationProperty and AssociationPropertyMetadata.
Templat contoh lengkap
ROSTemplateFormatVersion: '2015-09-01'
Description:
en: Penerapan ECS yang mendukung penskalaan otomatis.
Parameters:
VSwitchZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Description:
en: ID zona vSwitch.
Label:
en: ID Zona VSwitch
VpcCidrBlock:
Default: 192.168.0.0/16
Label:
en: Blok CIDR VPC
Type: String
Description:
en: Blok CIDR untuk VPC baru. Kami menyarankan Anda menggunakan salah satu blok CIDR berikut:<br/><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: Blok CIDR harus berupa subnet dari VPC dan tidak boleh sedang digunakan oleh vSwitch lain.
Label:
en: Blok CIDR VSwitch
ECSInstanceType:
Type: String
Label:
en: Tipe Instance
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceChargeType: ${InstanceChargeType}
ECSDiskCategory:
Type: String
Description:
en: '<font color=''blue''><b>Nilai yang valid:</font><br/>[cloud_efficiency: <font color=''green''>disk ultra</font>]<br>[cloud_ssd: <font color=''green''>SSD standar</font>]<br>[cloud_essd: <font color=''green''>SSD Perusahaan (ESSD)</font>]<br>[cloud: <font color=''green''>disk dasar</font>]<br>[ephemeral_ssd: <font color=''green''>SSD lokal</font>]'
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
Label:
en: Tipe Disk Sistem
ECSImageId:
AssociationProperty: ALIYUN::ECS::Image::ImageId
Label:
en: ID Image
Description:
en: ID image yang digunakan untuk membuat 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>
Type: String
EcsInstancePassword:
NoEcho: true
Type: String
Description:
en: Kata sandi logon untuk server. Kata sandi harus memiliki panjang 8 hingga 30 karakter dan berisi karakter dari setidaknya tiga kategori berikut: huruf besar, huruf kecil, angka, dan karakter khusus: ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/.
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
Label:
en: Kata Sandi Instance
ConstraintDescription:
en: Kata sandi harus memiliki panjang 8 hingga 30 karakter dan berisi karakter dari setidaknya tiga kategori berikut: huruf besar, huruf kecil, angka, dan karakter khusus: ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/.
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
ECSInstanceGroupCount:
Type: Number
Description:
en: Jumlah instance ECS.
Label:
en: Jumlah Instance
Default: 3
ESSGroupMaxSize:
Type: Number
Label:
en: Jumlah maksimum instance ECS dalam grup penskalaan.
Default: 50
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: 8080/8080
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
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
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:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroup
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
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:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize:
Ref: ECSInstanceGroupCount
MaxSize: 50
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
en: Konfigurasi Jaringan Dasar
- Parameters:
- ECSInstanceType
- ECSDiskCategory
- ECSImageId
- EcsInstancePassword
- ECSInstanceGroupCount
Label:
default:
en: Konfigurasi Instance ECS
- Parameters:
- ESSGroupMaxSize
Label:
default:
en: Konfigurasi Grup Penskalaan<br/><br/><br/><br/><br/>