Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
CloudFormation Conditionssintaks template
Bagian Conditions
opsional berisi pernyataan yang menentukan keadaan di mana entitas dibuat atau dikonfigurasi. Misalnya, Anda dapat membuat kondisi dan mengaitkannya dengan sumber daya atau output sehingga CloudFormation menciptakan sumber daya atau output hanya jika kondisi benar. Demikian pula, Anda dapat mengaitkan kondisi dengan properti sehingga CloudFormation menetapkan properti ke nilai tertentu hanya jika kondisi benar. Jika kondisinya salah, CloudFormation tetapkan properti ke nilai alternatif yang Anda tentukan.
Anda dapat menggunakan kondisi saat ingin menggunakan kembali template untuk membuat sumber daya dalam konteks yang berbeda, seperti lingkungan pengujian versus produksi. Misalnya, dalam template Anda, Anda dapat menambahkan parameter EnvironmentType
input yang menerima salah satu prod
atau test
sebagai input. Untuk prod
lingkungan, Anda mungkin menyertakan EC2 contoh dengan kemampuan tertentu, sedangkan untuk test
lingkungan, Anda mungkin menggunakan kemampuan yang lebih rendah untuk menghemat uang. Definisi kondisi ini memungkinkan Anda untuk menentukan sumber daya yang dibuat dan bagaimana mereka dikonfigurasi untuk setiap jenis lingkungan.
Sintaksis
Bagian Conditions
terdiri dari nama kunci Conditions
. Setiap deklarasi kondisi mencakup ID logis dan satu atau lebih fungsi intrinsik.
JSON
"Conditions": { "
LogicalConditionName1
": { "Intrinsic function
":...
[ }, "LogicalConditionName2
": { "Intrinsic function
":...
} }
YAML
Conditions:
LogicalConditionName1
:Intrinsic function
:...
LogicalConditionName2
:Intrinsic function
:...
Bagaimana kondisi bekerja
Untuk menggunakan kondisi, ikuti langkah-langkah ini:
-
Tambahkan definisi parameter - Tentukan input yang akan dievaluasi kondisi Anda di
Parameters
bagian template Anda. Kondisi mengevaluasi benar atau salah berdasarkan nilai parameter masukan ini. Perhatikan bahwa parameter semu tersedia secara otomatis dan tidak memerlukan definisi eksplisit di bagian tersebut.Parameters
Untuk informasi selengkapnya tentang parameter semu, lihatDapatkan AWS nilai menggunakan parameter semu. -
Tambahkan definisi kondisi - Tentukan kondisi di
Conditions
bagian menggunakan fungsi intrinsik sepertiFn::If
atau.Fn::Equals
Kondisi ini menentukan kapan CloudFormation menciptakan sumber daya terkait. Kondisi dapat didasarkan pada:-
Nilai parameter masukan atau semu
-
Syarat lainnya
-
Nilai pemetaan
Namun, Anda tidak dapat mereferensikan sumber daya logis IDs atau atributnya dalam kondisi.
-
-
Mengaitkan kondisi dengan sumber daya atau output — Kondisi referensi dalam sumber daya atau output menggunakan
Condition
kunci dan ID logis kondisi. Secara opsional, gunakanFn::If
di bagian lain dari template (seperti nilai properti) untuk menetapkan nilai berdasarkan kondisi. Untuk informasi selengkapnya, lihat Menggunakan Condition kunci.
CloudFormation mengevaluasi kondisi saat membuat atau memperbarui tumpukan. CloudFormation menciptakan entitas yang terkait dengan kondisi sebenarnya dan mengabaikan entitas yang terkait dengan kondisi palsu. CloudFormation juga mengevaluasi kembali kondisi ini selama setiap pembaruan tumpukan sebelum memodifikasi sumber daya apa pun. Entitas yang tetap terkait dengan kondisi sebenarnya diperbarui, sedangkan entitas yang terkait dengan kondisi palsu dihapus.
penting
Selama pembaruan tumpukan, Anda tidak dapat memperbarui syarat dengan sendirinya. Anda hanya dapat memperbarui syarat jika menyertakan perubahan yang menambahkan, mengubah, atau menghapus sumber daya.
Fungsi intrinsik syarat
Anda dapat menggunakan fungsi intrinsik berikut untuk menentukan syarat:
catatan
Fn::If
hanya didukung dalam atribut metadata, atribut kebijakan pembaruan, dan nilai properti di bagian Resources
dan bagian Outputs
dari templat.
Menggunakan Condition
kunci
Setelah kondisi ditentukan, Anda dapat menerapkannya di beberapa tempat di template, seperti Resources
danOutputs
, menggunakan Condition
kunci. Condition
Kunci referensi nama logis kondisi dan mengembalikan hasil evaluasi dari kondisi yang ditentukan.
Topik
Mengaitkan kondisi dengan sumber daya
Untuk membuat sumber daya secara kondisional, tambahkan Condition
kunci dan ID logis dari kondisi sebagai atribut ke sumber daya. CloudFormation menciptakan sumber daya hanya ketika kondisi dievaluasi ke true.
JSON
"NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "IsProduction", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} } }
YAML
NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
Kaitkan kondisi dengan output
Anda juga dapat mengaitkan kondisi dengan output. CloudFormation menciptakan output hanya ketika kondisi terkait mengevaluasi ke true.
JSON
"Outputs" : { "VolumeId" : { "Condition" : "IsProduction", "Value" : { "Ref" : "NewVolume" } } }
YAML
Outputs: VolumeId: Condition: IsProduction Value: !Ref NewVolume
Kondisi referensi dalam kondisi lain
Saat menentukan kondisi di Conditions
bagian ini, Anda dapat mereferensikan kondisi lain menggunakan Condition
kunci. Ini memungkinkan Anda untuk membuat logika kondisional yang lebih kompleks dengan menggabungkan beberapa kondisi.
Dalam contoh berikut, IsProdAndFeatureEnabled
kondisi mengevaluasi menjadi benar hanya jika IsProduction
dan IsFeatureEnabled
kondisi dievaluasi menjadi benar.
JSON
"Conditions": { "IsProduction" : {"Fn::Equals" : [{"Ref" : "Environment"}, "prod"]}, "IsFeatureEnabled" : { "Fn::Equals" : [{"Ref" : "FeatureFlag"}, "enabled"]}, "IsProdAndFeatureEnabled" : { "Fn::And" : [ {"Condition" : "IsProduction"}, {"Condition" : "IsFeatureEnabled"} ] } }
YAML
Conditions: IsProduction: !Equals [!Ref Environment, "prod"] IsFeatureEnabled: !Equals [!Ref FeatureFlag, "enabled"] IsProdAndFeatureEnabled: !And - !Condition IsProduction - !Condition IsFeatureEnabled
Mengembalikan nilai properti secara kondisional menggunakan Fn::If
Untuk kontrol yang lebih terperinci, Anda dapat menggunakan fungsi Fn::If
intrinsik untuk mengembalikan salah satu dari dua nilai properti secara kondisional dalam sumber daya atau output. Fungsi ini mengevaluasi kondisi dan mengembalikan satu nilai jika kondisi benar dan nilai lain jika kondisi palsu.
Nilai properti bersyarat
Contoh berikut menunjukkan pengaturan jenis EC2 instance berdasarkan kondisi lingkungan. Jika IsProduction
kondisi dievaluasi ke true, tipe instance disetel kec5.xlarge
. Jika tidak, itu diatur ket3.small
.
JSON
"Properties" : { "InstanceType" : { "Fn::If" : [ "IsProduction", "c5.xlarge", "t3.small" ] } }
YAML
Properties: InstanceType: !If - IsProduction - c5.xlarge - t3.small
Penghapusan properti bersyarat
Anda juga dapat menggunakan parameter AWS::NoValue
semu sebagai nilai kembali untuk menghapus properti yang sesuai ketika kondisi salah.
JSON
"DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] }
YAML
DBSnapshotIdentifier: !If - UseDBSnapshot - !Ref DBSnapshotName - !Ref "AWS::NoValue"
Contoh
Pembuatan sumber daya berbasis lingkungan
Contoh berikut ini menyediakan EC2 instance, dan secara kondisional membuat dan melampirkan volume EBS baru hanya jika tipe lingkungannya. prod
Jika lingkungannyatest
, mereka hanya membuat EC2 instance tanpa volume tambahan.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-1234567890abcdef0", "InstanceType": "c5.xlarge" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "IsProduction", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "IsProduction", "Properties": { "Size": 100, "AvailabilityZone": { "Fn::GetAtt": [ "EC2Instance", "AvailabilityZone" ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Description: Environment type Default: test Type: String AllowedValues: - prod - test ConstraintDescription: must specify prod or test Conditions: IsProduction: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-1234567890abcdef0 InstanceType: c5.xlarge MountPoint: Type: AWS::EC2::VolumeAttachment Condition: IsProduction Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone
Penyediaan sumber daya multi-kondisi
Contoh berikut membuat bucket S3 secara kondisional jika nama bucket disediakan, dan lampirkan kebijakan bucket hanya jika lingkungan disetel ke. prod
Jika tidak ada nama bucket yang diberikan atau lingkungannyatest
, tidak ada sumber daya yang dibuat.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Type": "String", "AllowedValues": [ "prod", "test" ] }, "BucketName": { "Default": "", "Type": "String" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] }, "CreateBucket": { "Fn::Not": [ { "Fn::Equals": [ { "Ref": "BucketName" }, "" ] } ] }, "CreateBucketPolicy": { "Fn::And": [ { "Condition": "IsProduction" }, { "Condition": "CreateBucket" } ] } }, "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Condition": "CreateBucket", "Properties": { "BucketName": { "Ref": "BucketName" } } }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": { ... } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Type: String AllowedValues: - prod - test BucketName: Default: '' Type: String Conditions: IsProduction: !Equals - !Ref EnvType - prod CreateBucket: !Not - !Equals - !Ref BucketName - '' CreateBucketPolicy: !And - !Condition IsProduction - !Condition CreateBucket Resources: Bucket: Type: AWS::S3::Bucket Condition: CreateBucket Properties: BucketName: !Ref BucketName Policy: Type: AWS::S3::BucketPolicy Condition: CreateBucketPolicy Properties: Bucket: !Ref Bucket PolicyDocument: ...
Dalam contoh ini, CreateBucketPolicy
kondisi menunjukkan bagaimana mereferensikan kondisi lain menggunakan Condition
kunci. Kebijakan dibuat hanya ketika kedua IsProduction
dan CreateBucket
kondisi dievaluasi menjadi benar.
catatan
Untuk contoh penggunaan kondisi yang lebih kompleks, lihat topik Conditionatribut di Panduan Referensi AWS CloudFormation Template.