Bagian Resources menjelaskan properti setiap resource dalam sebuah stack serta ketergantungan di antara resource tersebut. Anda dapat mereferensikan suatu resource dari resource lain atau di bagian Outputs.
Jenis entitas resource
Entitas resource dikategorikan menjadi resource reguler dan resource sumber data. Resource reguler terbagi lagi menjadi resource Alibaba Cloud dan resource kustom, sebagaimana ditunjukkan pada tabel berikut.
Jenis entitas resource | Deskripsi |
Resource reguler (Resource) |
|
Resource sumber data (DataSource) | Menanyakan data resource dari layanan Alibaba Cloud. Untuk informasi selengkapnya, lihat Data source resources. |
Sintaks
Bagian Resources terdiri atas ID resource dan deskripsi resource. Deskripsi resource diapit tanda kurung kurawal ({}). Jika Anda mendeklarasikan beberapa resource, pisahkan masing-masing dengan koma (,). Segmen kode berikut menunjukkan struktur sintaks bagian Resources:
Resources:
Resource1 Name:
Type: Resource type
Condition: Condition for creating this resource
Properties: Resource property description
Resource2 Name:
Type: Resource type
Condition: Condition for creating this resource
Properties: Resource property descriptionParameter-parameter tersebut dijelaskan sebagai berikut:
Nama resource harus unik dalam templat. Nama ini dapat digunakan untuk mereferensikan resource tersebut di bagian lain templat.
Jenis resource (Type) menunjukkan jenis resource yang dideklarasikan. Misalnya, ALIYUN::ECS::Instance merepresentasikan sebuah instance ECS Alibaba Cloud. Untuk daftar lengkap jenis resource yang didukung ROS, lihat Resource type index.
Properti resource (Properties) merupakan opsi tambahan yang ditentukan untuk suatu resource. Misalnya, Anda harus menentukan Image ID untuk setiap instance ECS Alibaba Cloud.
Contoh
Resources:
ECSInstance:
Type: ALIYUN::ECS::Instance
Properties:
ImageId: m-25l0r****Jika suatu resource tidak memerlukan properti apa pun, bagian Properties dapat dihilangkan.
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 daftar tersebut dengan tanda kurung siku ([]).
Jika nilai properti berupa fungsi intrinsik atau parameter yang direferensikan, apit dengan tanda kurung kurawal ({}).
Aturan ini juga berlaku saat 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 menghapus suatu resource, ada dua skenario yang mungkin terjadi:
Jika Anda mengatur DeletionPolicy ke Delete, resource tersebut akan dihapus saat dihapus dari stack.
Jika Anda mengatur DeletionPolicy ke Retain, resource tersebut tetap dipertahankan meskipun dihapus dari stack.
Misalnya, untuk mempertahankan sebuah instance ECS saat stack dihapus, deklarasikan kebijakan seperti pada segmen kode berikut:
Resources:
ECSInstance:
Type: ALIYUN::ECS::Instance
Properties:
ImageId: m-25l0r****
DeletionPolicy: RetainPada contoh ini, jika stack yang sesuai dengan templat ini dihapus, resource ECSInstance tetap dipertahankan.
Jika suatu resource memiliki DeletionPolicy yang dikonfigurasi dan Anda memanggil operasi DeleteStack serta menyertakan resource tersebut dalam parameter RetainResources, prinsip-prinsip berikut berlaku:
Jika Resource A memiliki DeletionPolicy=Delete dalam templat, apakah resource tersebut dipertahankan bergantung pada apakah resource tersebut termasuk dalam RetainResources saat Anda menghapus stack.
Jika Resource A memiliki DeletionPolicy=Retain dalam templat, resource tersebut selalu dipertahankan saat Anda menghapus stack, terlepas dari apakah resource tersebut termasuk dalam RetainResources.
DependsOn
Dalam sebuah templat, gunakan atribut DependsOn untuk memastikan bahwa suatu resource hanya dibuat setelah resource tertentu lainnya telah dibuat. Saat Anda menerapkan atribut DependsOn ke suatu resource, resource tersebut tidak akan dibuat hingga resource yang direferensikan oleh DependsOn telah sepenuhnya disediakan.
Resource yang diandalkan oleh DependsOn dapat memiliki Condition-nya dievaluasi ke False. Nilai False tidak memengaruhi pembuatan resource yang bergantung.
Contoh berikut menunjukkan dua cara menggunakan atribut ini:
Ketergantungan pada satu resource:
DependsOn: ResourceNameBergantung pada beberapa resource:
DependsOn: - ResourceName1 - ResourceName2
Seperti yang ditunjukkan pada segmen kode berikut, WebServer hanya dibuat setelah 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 sebuah templat, Anda dapat menggunakan atribut Condition untuk menentukan apakah suatu resource akan dibuat. Resource tersebut hanya dibuat jika nilai kondisi yang ditentukan oleh Condition bernilai True.
Seperti yang ditunjukkan pada segmen kode berikut, pembuatan WebServer bergantung pada nilai 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
Dalam sebuah templat, setelah Anda menentukan Count untuk suatu resource, ROS melakukan pra-pemrosesan terhadap templat dan memperluas resource tersebut menjadi beberapa resource. Templat yang telah diproses kemudian digunakan saat Anda melakukan operasi pada stack.
Misalnya, jika sebuah resource bernama
Adan nilaiCount-nya adalah 3, templat yang telah diproses tidak lagi berisi resourceA. Sebagai gantinya, templat tersebut akan berisi tiga resource:A[0],A[1], danA[2].Resources: A: Count: 3 ...Setelah diproses:
Resources: A[0]: ... A[1]: ... A[2]: ...PentingJika nama resource yang telah diperluas, seperti
A[1], sudah ada dalam templat asli, pra-pemrosesan gagal dan templat tidak lolos validasi.Hindari menambahkan atribut
Countke resource yang sudah ada. Hal ini mengubah nama resource dan memicu operasi penghapusan.Hasil akhir dari
Countharus berupa bilangan asli. Hanya fungsi-fungsi berikut yang didukung:Jumlah total resource dalam templat yang telah diproses tidak boleh melebihi batas, yaitu 300.
Dalam
Propertiessebuah resource yang memilikiCountditentukan, Anda dapat menggunakan parameter pseudoALIYUN::Index. Selama pra-pemrosesan, parameter ini diganti dengan angka yang sesuai. Misalnya,ALIYUN::Indexyang digunakan olehA[0]diganti dengan 0, danALIYUN::Indexyang digunakan olehA[1]diganti dengan 1. Anda tidak dapat menggunakanALIYUN::Indexdi tempat lain dalam templat.Jika sebuah resource dengan
Countditentukan muncul dalamDependsOn, resource tersebut diperluas.DependsOn: ASetelah diproses:
DependsOn: - A[0] - A[1] - A[2]Jika sebuah resource dengan
Countditentukan muncul dalam fungsiRefatauFn::GetAtt, resource 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 resource menggunakan
Countdan memiliki hubungan referensi, Anda dapat menggunakannya bersamaFn::SelectdanALIYUN::Index.Fn::Select: - Ref: ALIYUN::Index - Ref: AAmbil
Asebagai contoh.BmereferensikanA, danCountuntukBadalah 2. Setelah transformasi, sebagian ekspresi dalamB[0]danB[1]adalah sebagai berikut:- Ref: A[0] - Ref: A[1]Jika sebuah resource memiliki atribut
Count, atributDependsOnjuga mendukung ekspresi. Fungsi-fungsi yang dapat digunakan dalam ekspresiDependsOnsama dengan yang digunakan untuk atributCount, dan Anda dapat menggunakan parameter pseudoALIYUN::Index. Tabel berikut menjelaskan format ekspresi dan hasil perhitungan yang diizinkan.Format
Contoh
Hasil perhitungan yang diizinkan
Dictionary
Fn::Split: - ',' - Server1,Server2null
Jika nilainya null, atribut DependsOn dihapus.
String
Jika nilainya string kosong, atribut DependsOn dihapus.
Jika nilainya string tidak kosong, harus berupa nama resource yang valid.
List
Jika item daftar bernilai null atau string kosong, item tersebut diabaikan.
Jika daftar kosong, atribut DependsOn dihapus.
Jika daftar tidak kosong, setiap item harus berupa string dan nama resource yang valid.
List
- Server0 - Fn::Split: - ',' - Server1,Server2Item daftar dapat berupa dictionary atau string. Hasil perhitungan yang diizinkan bervariasi berdasarkan jenis item:
Jika item daftar berupa dictionary, ekspresi dihitung. Hasil perhitungan yang diizinkan adalah sebagai berikut:
Jika nilainya null atau string kosong, item tersebut diabaikan.
Jika tidak, harus berupa string dan nama resource yang valid.
Jika item daftar berupa string, harus berupa nama resource yang valid.
CatatanJika daftar kosong, atribut DependsOn dihapus.
String
Server0String
Tidak ada pemrosesan tambahan yang dilakukan.
Contoh templat berikut mengontrol konkurensi untuk resource yang dibuat dengan Count. Parameter Count menentukan jumlah resource yang akan dibuat, dan parameter ParallelCount menentukan jumlah maksimum pembuatan secara 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 adalah contoh templat untuk Count. Templat ini membuat sekelompok EIP dan jumlah instance ECS yang sama, lalu menyambungkan setiap EIP ke sebuah 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 resource
Berikut adalah contoh deklarasi resource yang khas:
Resources:
WebServer:
Type: ALIYUN::ECS::Instance
Properties:
ImageId: m-25l0r****
InstanceType: ecs.t1.small
SecurityGroupId: sg-25zwc****
ZoneId: cn-beijing-b
Tags:
- Key: Department1
Value: HumanResource
- Key: Department2
Value: Finance
ScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
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