CloudFormation Conditionssintaks template - AWS CloudFormation

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:

  1. 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.

  2. Tambahkan definisi kondisi - Tentukan kondisi di Conditions bagian menggunakan fungsi intrinsik seperti Fn::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.

  3. Mengaitkan kondisi dengan sumber daya atau output — Kondisi referensi dalam sumber daya atau output menggunakan Condition kunci dan ID logis kondisi. Secara opsional, gunakan Fn::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. ConditionKunci referensi nama logis kondisi dan mengembalikan hasil evaluasi dari kondisi yang ditentukan.

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.