Bagian Sumber Daya menjelaskan properti setiap sumber daya dalam sebuah stack serta ketergantungannya satu sama lain. Anda dapat mereferensikan sumber daya tersebut dari sumber daya lain atau di bagian Outputs.
Jenis entitas sumber daya
Entitas sumber daya diklasifikasikan menjadi sumber daya reguler dan sumber daya sumber data. Sumber daya reguler selanjutnya dibagi menjadi sumber daya Alibaba Cloud dan Resource kustom. Tabel berikut menjelaskan jenis-jenis entitas sumber daya tersebut.
Jenis entitas sumber daya | Deskripsi |
Sumber daya reguler (Resource) |
|
Sumber daya sumber data (DataSource) | Menanyakan data sumber daya layanan Alibaba Cloud. Untuk informasi lebih lanjut, lihat Sumber daya sumber data. |
Sintaks
Deklarasi sumber daya terdiri atas nama sumber daya dan deskripsi sumber daya. Deskripsi sumber daya diapit tanda kurung kurawal ({}). Jika Anda mendeklarasikan beberapa sumber daya, pisahkan dengan koma (,). Segmen kode berikut menunjukkan sintaks untuk bagian Resources:
Resources:
Nama Sumber Daya 1:
Type: Jenis sumber daya
Condition: Kondisi untuk membuat sumber daya ini
Properties: Deskripsi properti sumber daya
Nama Sumber Daya 2:
Type: Jenis sumber daya
Condition: Kondisi untuk membuat sumber daya ini
Properties: Deskripsi properti sumber dayaDaftar berikut menjelaskan parameter-parameter tersebut:
Nama sumber daya harus unik dalam satu templat. Anda dapat mereferensikan sumber daya tersebut dengan namanya di bagian lain templat.
Jenis sumber daya (Type): Jenis sumber daya yang Anda deklarasikan. Misalnya, ALIYUN::ECS::Instance menunjukkan instance ECS Alibaba Cloud. Untuk informasi selengkapnya mengenai semua jenis sumber daya yang didukung ROS, lihat Indeks jenis sumber daya.
Properti sumber daya (Properties): Opsi tambahan yang ditentukan untuk sumber daya tersebut. Misalnya, Anda harus menentukan ID Image untuk setiap instance ECS Alibaba Cloud.
Contoh
Sumber Daya:
ECSInstance:
Tipe: ALIYUN::ECS::Instance
Properti:
ImageId: m-25l0r****Jika suatu sumber daya tidak memerlukan properti apa pun, Anda dapat menghilangkan bagian Properties.
Nilai properti dapat berupa string teks, daftar string, Nilai Boolean, parameter yang direferensikan, atau nilai kembali fungsi. Saat menulis templat JSON, ikuti aturan berikut:
Jika nilai properti berupa string teks, apit nilai tersebut dengan tanda kutip ganda ("").
Jika nilai properti berupa daftar string, apit dengan tanda kurung siku ([]).
Jika nilai properti berupa fungsi intrinsik atau parameter yang direferensikan, apit dengan tanda kurung kurawal ({}).
Aturan ini juga berlaku saat Anda menggabungkan teks, daftar, parameter yang direferensikan, dan nilai kembali fungsi. Contoh berikut menunjukkan cara mendeklarasikan berbagai jenis nilai properti:
{
"Properties": {
"String": "string",
"LiteralList": [
"value1",
"value2"
],
"Boolean": true,
"ReferenceForOneValue": {
"Ref": "ResourceID"
},
"FunctionResultWithFunctionParams": {
"Fn::Join": [
"%",
[
"Key=",
{
"Ref": "SomeParameter"
}
]
]
}
}
}DeletionPolicy
Saat Anda menghapus sumber daya, dua situasi dapat terjadi:
Jika DeletionPolicy diatur ke Delete, sumber daya tersebut akan dihapus ketika dihapus dari stack.
Jika DeletionPolicy diatur ke Retain, sumber daya tersebut akan dipertahankan ketika dihapus dari stack.
Sebagai contoh, untuk mempertahankan instance ECS saat stack-nya dihapus, deklarasikan kebijakan seperti pada segmen kode berikut:
Sumber Daya:
ECSInstance:
Tipe: ALIYUN::ECS::Instance
Properti:
ImageId: m-25l0r****
DeletionPolicy: RetainPada contoh ini, jika stack yang dibuat dari templat dihapus, sumber daya ECSInstance akan dipertahankan.
Saat Anda memanggil operasi DeleteStack, jika suatu sumber daya memiliki DeletionPolicy yang dikonfigurasi dalam templat dan juga termasuk dalam parameter RetainResources, prinsip-prinsip berikut berlaku:
Jika Resource A memiliki DeletionPolicy=Delete yang ditetapkan dalam templat, apakah sumber daya tersebut dipertahankan bergantung pada apakah sumber daya tersebut termasuk dalam parameter RetainResources.
Jika Resource A memiliki DeletionPolicy=Retain yang ditetapkan dalam templat, sumber daya tersebut selalu dipertahankan, terlepas dari apakah sumber daya tersebut termasuk dalam parameter RetainResources.
DependsOn
Gunakan properti DependsOn untuk menentukan ketergantungan antar sumber daya. Sumber daya yang memiliki properti DependsOn hanya akan dibuat setelah sumber daya yang ditentukan dalam properti DependsOn berhasil dibuat.
Anda dapat mengatur properti Condition dari dependensi yang ditentukan dalam properti DependsOn menjadi False. Nilai False menentukan bahwa sumber daya tersebut dibuat meskipun dependensinya tidak dibuat.
Contoh:
Untuk bergantung pada satu sumber daya:
DependsOn: ResourceNameUntuk bergantung pada beberapa sumber daya:
DependsOn: - ResourceName1 - ResourceName2
Pada contoh berikut, sumber daya WebServer hanya akan dibuat setelah sumber daya DatabaseServer berhasil dibuat:
ROSTemplateFormatVersion: '2015-09-01'
Resources:
WebServer:
Type: ALIYUN::ECS::Instance
DependsOn: DatabseServer
DatabseServer:
Type: ALIYUN::ECS::Instance
Properties:
ImageId: m-25l0r****
InstanceType: ecs.t1.smallCondition
Dalam templat, Anda dapat menggunakan properti Condition untuk menentukan apakah suatu sumber daya dibuat. Sumber daya tersebut hanya akan dibuat jika Condition bernilai True.
Pada contoh berikut, pembuatan sumber daya WebServer ditentukan oleh nilai parameter MaxAmount:
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
MaxAmount:
Type: Number
Default: 1
Conditions:
CreateWebServer:
Fn::Not:
Fn::Equals:
- 0
- Ref: MaxAmount
Resources:
WebServer:
Type: ALIYUN::ECS::InstanceGroup
Condition: CreateWebServer
Properties:
ImageId: m-25l0rc****
InstanceType: ecs.t1.small
MaxAmount:
Ref: MaxAmount
DatabseServer:
Type: ALIYUN::ECS::Instance
Properties:
ImageId: m-25l0r****
InstanceType: ecs.t1.smallCount
Jika Anda menentukan properti Count untuk suatu sumber daya dalam templat, ROS akan melakukan pra-pemrosesan terhadap templat tersebut dan memperluas sumber daya menjadi beberapa sumber daya. Operasi stack menggunakan templat yang telah diproses.
Sebagai contoh, suatu sumber daya bernama
Adan nilaiCount-nya adalah 3. Dalam templat yang telah diproses, sumber dayaAdiganti dengan tiga sumber daya:A[0],A[1], danA[2].Sumber Daya: A: Count: 3 ...Setelah diproses:
Sumber Daya: A[0]: ... A[1]: ... A[2]: ...PentingJika nama sumber daya hasil perluasan, seperti
A[1], sudah ada dalam templat asli, pra-pemrosesan gagal dan validasi templat gagal.Hindari menambahkan properti
Countke sumber daya yang sudah ada. Tindakan ini mengubah nama sumber daya dan menyebabkan operasi penghapusan.Nilai properti
Countharus berupa bilangan bulat non-negatif. Hanya fungsi-fungsi berikut yang didukung:Jumlah total sumber daya dalam templat yang telah diproses tidak boleh melebihi batas. Batas saat ini adalah 300 sumber daya.
Dalam bagian
Propertiessumber daya yang memiliki propertiCount, Anda dapat menggunakan parameter pseudoALIYUN::Index. Selama pra-pemrosesan, parameter ini diganti dengan indeks replika sumber daya (dimulai dari 0). Sebagai contoh,ALIYUN::IndexuntukA[0]diganti dengan 0, danALIYUN::IndexuntukA[1]diganti dengan 1. Anda tidak dapat menggunakanALIYUN::Indexdi tempat lain dalam templat.Jika sumber daya yang memiliki properti
Countdireferensikan dalam propertiDependsOn, referensi tersebut diperluas.DependsOn: ASetelah diproses:
DependsOn: - A[0] - A[1] - A[2]Jika sumber daya yang memiliki properti
Countdireferensikan oleh fungsiRefatauFn::GetAtt, referensi tersebut diperluas.Ref: A Fn::GetAtt: - A - PropertyNameSetelah diproses:
- Ref: A[0] - Ref: A[1] - Ref: A[2] - Fn::GetAtt: - A[0] - PropertyName - Fn::GetAtt: - A[1] - PropertyName - Fn::GetAtt: - A[2] - PropertyNameJika beberapa sumber daya menggunakan properti Count dan saling mereferensikan, gunakan
CountbersamaFn::SelectdanALIYUN::Index.Fn::Select: - Ref: ALIYUN::Index - Ref: AAmbil
Asebagai contoh. AsumsikanBmereferensikanAdanCountdariBadalah 2. Setelah transformasi, sebagian ekspresi untukB[0]danB[1]adalah sebagai berikut:- Ref: A[0] - Ref: A[1]Jika suatu sumber daya menentukan properti
Count, propertiDependsOn-nya juga mendukung ekspresi. Fungsi yang dapat digunakan dalam ekspresiDependsOnsama dengan fungsi untuk propertiCount. Anda juga dapat menggunakan parameter pseudoALIYUN::Index. Tabel berikut menjelaskan format ekspresi dan hasil yang diizinkan.Format
Contoh
Hasil yang diizinkan
Kamus.
Fn::Split: - ',' - Server1,Server2Null.
Jika hasilnya null, properti DependsOn dihapus.
Sebuah string.
Jika hasilnya string kosong, properti DependsOn dihapus.
Jika hasilnya string tidak kosong, harus berupa nama sumber daya yang valid.
Sebuah daftar.
Jika item daftar bernilai null atau string kosong, item tersebut dibuang.
Jika daftar menjadi kosong setelah item-item dibuang, properti DependsOn dihapus.
Jika daftar tidak kosong, setiap item harus berupa string dan nama sumber daya yang valid.
Daftar.
- Server0 - Fn::Split: - ',' - Server1,Server2Item daftar dapat berupa kamus atau string. Hasil yang diizinkan bervariasi berdasarkan jenis item:
Jika item daftar berupa kamus, ekspresi dievaluasi. Hasil yang diizinkan adalah:
Jika hasilnya null atau string kosong, item tersebut dibuang.
Jika tidak, hasilnya harus berupa string dan nama sumber daya yang valid.
Jika item daftar berupa string, harus berupa nama sumber daya yang valid.
CatatanJika daftar menjadi kosong setelah item-item dibuang, properti DependsOn dihapus.
String.
Server0Sebuah string.
Tidak ada pemrosesan tambahan yang dilakukan.
Templat contoh berikut menunjukkan cara mengontrol konkurensi pembuatan sumber daya saat menggunakan Count. Parameter Count menentukan jumlah sumber daya yang akan dibuat, dan parameter ParallelCount menentukan jumlah maksimum operasi pembuatan konkuren.
ROSTemplateFormatVersion: '2015-09-01' Parameters: Count: Type: Number ParallelCount: Type: Number Resources: WaitConditionHandle: Type: ALIYUN::ROS::WaitConditionHandle Count: Ref: Count DependsOn: Fn::Select: - Fn::Calculate: - 1-{0}//{1} - 0 - - Fn::Min: - Ref: ALIYUN::Index - Ref: ParallelCount - Ref: ParallelCount - - Fn::Replace: - index: Fn::Calculate: - '{0}-{1}' - 0 - - Ref: ALIYUN::Index - Ref: ParallelCount - WaitConditionHandle[index]Templat yang telah diproses bervariasi berdasarkan nilai Count dan ParallelCount:
Jika Anda mengatur Count ke 3 dan ParallelCount ke 1, templat yang telah diproses adalah sebagai berikut:
ROSTemplateFormatVersion: '2015-09-01' Resources: WaitConditionHandle[0]: Type: ALIYUN::ROS::WaitConditionHandle WaitConditionHandle[1]: Type: ALIYUN::ROS::WaitConditionHandle DependsOn: WaitConditionHandle[0] WaitConditionHandle[2]: Type: ALIYUN::ROS::WaitConditionHandle DependsOn: WaitConditionHandle[1] Parameters: Count: Type: Number ParallelCount: Type: NumberJika Anda mengatur Count ke 5 dan ParallelCount ke 2, templat yang telah diproses adalah sebagai berikut:
ROSTemplateFormatVersion: '2015-09-01' Resources: WaitConditionHandle[0]: Type: ALIYUN::ROS::WaitConditionHandle WaitConditionHandle[1]: Type: ALIYUN::ROS::WaitConditionHandle WaitConditionHandle[2]: Type: ALIYUN::ROS::WaitConditionHandle DependsOn: WaitConditionHandle[0] WaitConditionHandle[3]: Type: ALIYUN::ROS::WaitConditionHandle DependsOn: WaitConditionHandle[1] WaitConditionHandle[4]: Type: ALIYUN::ROS::WaitConditionHandle DependsOn: WaitConditionHandle[2] Parameters: Count: Type: Number ParallelCount: Type: NumberJika Anda mengatur Count ke 5 dan ParallelCount ke 3, templat yang telah diproses adalah sebagai berikut:
ROSTemplateFormatVersion: '2015-09-01' Resources: WaitConditionHandle[0]: Type: ALIYUN::ROS::WaitConditionHandle WaitConditionHandle[1]: Type: ALIYUN::ROS::WaitConditionHandle WaitConditionHandle[2]: Type: ALIYUN::ROS::WaitConditionHandle WaitConditionHandle[3]: Type: ALIYUN::ROS::WaitConditionHandle DependsOn: WaitConditionHandle[0] WaitConditionHandle[4]: Type: ALIYUN::ROS::WaitConditionHandle DependsOn: WaitConditionHandle[1] Parameters: Count: Type: Number ParallelCount: Type: Number
Berikut ini adalah contoh templat yang menggunakan Count. Templat ini membuat sekelompok EIP dan jumlah instance ECS yang sama, lalu menyambungkan setiap EIP ke instance ECS.
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
Count:
Type: Number
Resources:
Eip:
Type: ALIYUN::VPC::EIP
Count:
Ref: Count
Properties:
Bandwidth: 5
Servers:
Type: ALIYUN::ECS::InstanceGroup
Properties:
MinAmount:
Ref: Count
MaxAmount:
Ref: Count
AllocatePublicIP: false
...: Null
EipBind:
Type: ALIYUN::VPC::EIPAssociation
Count:
Ref: Count
Properties:
InstanceId:
Fn::Select:
- Ref: ALIYUN::Index
- Fn::GetAtt:
- Servers
- InstanceIds
AllocationId:
Fn::Select:
- Ref: ALIYUN::Index
- Ref: Eip
Outputs:
InstanceIds:
Value:
Fn::GetAtt:
- Servers
- InstanceIds
AllocationIds:
Value:
Ref: Eip
EipAddresses:
Value:
Fn::GetAtt:
- Eip
- EipAddressSetelah diproses:
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
Count:
Type: Number
Resources:
Eip[0]:
Type: ALIYUN::VPC::EIP
Properties:
Bandwidth: 5
Eip[1]:
Type: ALIYUN::VPC::EIP
Properties:
Bandwidth: 5
Servers:
Type: ALIYUN::ECS::InstanceGroup
Properties:
MinAmount:
Ref: Count
MaxAmount:
Ref: Count
AllocatePublicIP: false
...: Null
EipBind[0]:
Type: ALIYUN::VPC::EIPAssociation
Properties:
InstanceId:
Fn::Select:
- 0
- Fn::GetAtt:
- Servers
- InstanceIds
AllocationId:
Ref: Eip[0]
EipBind[1]:
Type: ALIYUN::VPC::EIPAssociation
Properties:
InstanceId:
Fn::Select:
- 1
- Fn::GetAtt:
- Servers
- InstanceIds
AllocationId:
Ref: Eip[1]
Outputs:
InstanceIds:
Value:
Fn::GetAtt:
- Servers
- InstanceIds
AllocationIds:
Value:
- Ref: Eip[0]
- Ref: Eip[1]
EipAddresses:
Value:
- Fn::GetAtt:
- Eip[0]
- EipAddress
- Fn::GetAtt:
- Eip[1]
- EipAddressContoh deklarasi sumber daya
Berikut ini adalah contoh khas deklarasi sumber daya:
Sumber Daya:
WebServer:
Tipe: ALIYUN::ECS::Instance
Properti:
ImageId: m-25l0r****
InstanceType: ecs.t1.small
SecurityGroupId: sg-25zwc****
ZoneId: cn-beijing-b
Tags:
- Key: Department1
Value: HumanResource
- Key: Department2
Value: Finance
ScalingConfiguration:
Tipe: ALIYUN::ESS::ScalingConfiguration
Properti:
ImageId: ubuntu_14_04_64_20G_aliaegis_2015****.vhd
InstanceType: ecs.t1.small
InstanceId: i-25xhh****
InternetChargeType: PayByTraffic
InternetMaxBandwidthIn: 1
InternetMaxBandwidthOut: 20
SystemDisk_Category: cloud
ScalingGroupId: bwhtvpcBcKYac9fe3vd0****
SecurityGroupId: sg-25zwc****
DiskMappings:
- Size: 10
- Category: cloud
Size: 10