Fungsi syarat - AWS CloudFormation

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fungsi syarat

Anda dapat menggunakan fungsi intrinsik, seperti Fn::If, Fn::Equals, dan Fn::Not, untuk membuat sumber daya tumpukan secara kondisional. Syarat ini dievaluasi berdasarkan parameter input yang Anda nyatakan ketika Anda membuat atau memperbarui tumpukan. Setelah menetapkan semua syarat Anda, Anda dapat mengaitkan semuanya dengan sumber daya atau sumber daya properti di bagian Sumber Daya dan Output pada templat.

Anda menetapkan semua kondisi di bagian Syarat templat kecuali untuk kondisi Fn::If. Anda dapat menggunakan syarat Fn::If dalam atribut metadata, atribut kebijakan pembaruan, dan nilai properti di bagian Sumber daya dan Output pada templat.

Anda dapat menggunakan syarat ketika Anda ingin menggunakan kembali templat yang dapat membuat sumber daya dalam konteks yang berbeda-beda, seperti lingkungan pengujian versus lingkungan produksi. Dalam templat, Anda dapat menambahkan parameter input EnvironmentType, yang menerima prod atau test sebagai input. Untuk lingkungan produksi, Anda mungkin menyertakan instans Amazon EC2 dengan kemampuan tertentu; namun, untuk lingkungan pengujian, Anda ingin menggunakan lebih sedikit kemampuan untuk menghemat biaya. Dengan syarat, Anda dapat menetapkan sumber daya mana yang dibuat dan bagaimana sumber daya itu dikonfigurasi untuk setiap jenis lingkungan.

Untuk informasi lebih lanjut tentang bagian syarat, lihat Ketentuan.

catatan

Anda hanya dapat mereferensikan syarat dan nilai lain dari bagian Parameter dan Pemetaan pada templat. Misalnya, Anda dapat mereferensikan nilai dari parameter input, tetapi Anda tidak dapat mereferensikan ID logis suatu sumber daya dalam suatu syarat.

Mengaitkan suatu kondisi

Untuk membuat sumber daya secara kondisional, properti sumber daya, atau output, Anda harus mengasosiasikan suatu syarat dengan hal-hal tersebut. Tambahkan Condition: kunci dan ID logis dari kondisi sebagai atribut untuk mengaitkan kondisi, seperti yang ditunjukkan pada cuplikan berikut. AWS CloudFormation menciptakan NewVolume sumber daya hanya ketika CreateProdResources kondisi dievaluasi ke true.

JSON

"NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} }

YAML

NewVolume: Type: "AWS::EC2::Volume" Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone

Fn::If

Untuk fungsi Fn::If, Anda hanya perlu menentukan nama syarat. Potongan berikut menunjukkan cara menggunakan Fn::If untuk secara kondisional menentukan properti sumber daya. Jika CreateLargeSize kondisinya benar, CloudFormation atur ukuran volume ke100. Jika kondisinya salah, CloudFormation atur ukuran volume ke10.

JSON

{ "NewVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": { "Fn::If": [ "CreateLargeSize", "100", "10" ] }, "AvailabilityZone": { "Fn::GetAtt": [ "Ec2Instance", "AvailabilityZone" ] } }, "DeletionPolicy": "Snapshot" } }

YAML

NewVolume: Type: 'AWS::EC2::Volume' Properties: Size: 'Fn::If': - CreateLargeSize - '100' - '10' AvailabilityZone: 'Fn::GetAtt': - Ec2Instance - AvailabilityZone DeletionPolicy: Snapshot

Kondisi bersarang

Anda juga dapat menggunakan syarat di dalam syarat lainnya. Potongan berikut adalah dari bagian Conditions pada templat. Syarat MyAndCondition termasuk syarat SomeOtherCondition:

JSON
"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }
YAML
MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref "ASecurityGroup"] - !Condition SomeOtherCondition

Fn::And

Menghasilkan true jika semua syarat yang ditentukan bernilai true, atau menghasilkan false jika salah satu syarat bernilai false. Fn::And bertindak sebagai operator AND. Jumlah minimum syarat yang dapat Anda sertakan adalah 2, dan maksimum adalah 10.

Pernyataan

JSON

"Fn::And": [{condition}, {...}]

YAML

Sintaks untuk nama fungsi penuh:

Fn::And: [condition]

Sintaks untuk bentuk pendek:

!And [condition]

Parameter

condition

Suatu syarat yang bernilai true atau false.

Contoh

MyAndCondition berikut ini bernilai true jika nama grup keamanan yang direferensikan sama dengan sg-mysggroup dan jika SomeOtherCondition bernilai true:

JSON

"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }

YAML

MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref ASecurityGroup] - !Condition SomeOtherCondition

Fn::Equals

Membandingkan apakah dua nilai sama. Menghasilkan true jika dua nilai tersebut sama atau false jika tidak.

Pernyataan

JSON

"Fn::Equals" : ["value_1", "value_2"]

YAML

Sintaks untuk nama fungsi penuh:

Fn::Equals: [value_1, value_2]

Sintaks untuk bentuk pendek:

!Equals [value_1, value_2]

Parameter

value

Nilai dari jenis apa pun yang ingin Anda bandingkan.

Contoh

Syarat UseProdCondition berikut bernilai true jika nilai untuk parameter EnvironmentType adalah sama dengan prod:

JSON

"UseProdCondition" : { "Fn::Equals": [ {"Ref": "EnvironmentType"}, "prod" ] }

YAML

UseProdCondition: !Equals [!Ref EnvironmentType, prod]

Fn::If

Mengembalikan satu nilai jika syarat yang ditentukan bernilai true dan nilai lain jika syarat yang ditentukan bernilai false. Saat ini, CloudFormation mendukung fungsi Fn::If intrinsik dalam atribut metadata, memperbarui atribut kebijakan, dan nilai properti di bagian Resources dan bagian Output dari template. Anda dapat menggunakan pseudo parameter AWS::NoValue sebagai nilai kembali untuk menghapus properti yang sesuai.

Pernyataan

YAML

Sintaks untuk nama fungsi penuh:

Fn::If: [condition_name, value_if_true, value_if_false]

Sintaks untuk bentuk pendek:

!If [condition_name, value_if_true, value_if_false]

Parameter

condition_name

Sebuah referensi untuk syarat di bagian Syarat. Gunakan nama syarat untuk mereferensikannya.

value_if_true

Nilai yang akan dikembalikan jika syarat yang ditentukan bernilai true.

value_if_false

Nilai yang akan dikembalikan jika syarat yang ditentukan bernilai false.

Contoh

Untuk melihat sampel tambahan, lihat Templat sampel.

Contoh 1

Cuplikan berikut menggunakan Fn::If fungsi di SecurityGroups properti untuk sumber daya Amazon EC2. Jika CreateNewSecurityGroup kondisi dievaluasi ke true, CloudFormation menggunakan nilai referensi NewSecurityGroup untuk menentukan SecurityGroups properti; jika tidak, CloudFormation menggunakan nilai referensi. ExistingSecurityGroup

JSON
"SecurityGroups" : [{ "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] }]
YAML
SecurityGroups: - !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]

Contoh 2

Di bagian Output templat, Anda dapat menggunakan fungsi Fn::If untuk secara kondisional menghasilkan output informasi. Dalam cuplikan berikut, jika CreateNewSecurityGroup kondisi dievaluasi ke true, CloudFormation output ID grup keamanan sumber daya. NewSecurityGroup Jika kondisinya salah, CloudFormation output ID grup keamanan ExistingSecurityGroup sumber daya.

JSON
"Outputs" : { "SecurityGroupId" : { "Description" : "Group ID of the security group used.", "Value" : { "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] } } }
YAML
Outputs: SecurityGroupId: Description: Group ID of the security group used. Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]

Contoh 3

Potongan berikut menggunakan pseudo parameter AWS::NoValue dalam fungsi Fn::If. Kondisi ini menggunakan snapshot untuk instans Amazon RDS DB hanya jika ID snapshot disediakan. Jika UseDBSnapshot kondisi mengevaluasi ke true, CloudFormation menggunakan nilai DBSnapshotName parameter untuk DBSnapshotIdentifier properti. Jika kondisi dievaluasi menjadi false, CloudFormation hapus DBSnapshotIdentifier properti.

JSON
"MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDB: Type: "AWS::RDS::DBInstance" Properties: AllocatedStorage: 5 DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: 5.5 MasterUsername: !Ref DBUser MasterUserPassword: !Ref DBPassword DBParameterGroupName: !Ref MyRDSParamGroup DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]

Contoh 4

Cuplikan berikut menyediakan kebijakan pembaruan Auto Scaling hanya jika kondisi dievaluasi RollingUpdates ke true. Jika kondisi dievaluasi menjadi false, CloudFormation hapus kebijakan AutoScalingRollingUpdate pemutakhiran.

JSON
"UpdatePolicy": { "AutoScalingRollingUpdate": { "Fn::If": [ "RollingUpdates", { "MaxBatchSize": "2", "MinInstancesInService": "2", "PauseTime": "PT0M30S" }, { "Ref" : "AWS::NoValue" } ] } }
YAML
UpdatePolicy: AutoScalingRollingUpdate: !If - RollingUpdates - MaxBatchSize: 2 MinInstancesInService: 2 PauseTime: PT0M30S - !Ref "AWS::NoValue"

Fn::Not

Menghasilkan true untuk syarat yang bernilai false atau menghasilkan false untuk syarat yang bernilai true. Fn::Not bertindak sebagai operator NOT.

Pernyataan

JSON

"Fn::Not": [{condition}]

YAML

Sintaks untuk nama fungsi penuh:

Fn::Not: [condition]

Sintaks untuk bentuk pendek:

!Not [condition]

Parameter

condition

Suatu syarat seperti Fn::Equals yang bernilai true atau false.

Contoh

Syarat EnvCondition berikut bernilai true jika nilai untuk parameter EnvironmentType tidak sama dengan prod:

JSON

"MyNotCondition" : { "Fn::Not" : [{ "Fn::Equals" : [ {"Ref" : "EnvironmentType"}, "prod" ] }] }

YAML

MyNotCondition: !Not [!Equals [!Ref EnvironmentType, prod]]

Fn::Or

Menghasilkan true jika semua syarat yang ditentukan bernilai true, atau menghasilkan false jika semua syarat bernilai false. Fn::Or bertindak sebagai operator OR. Jumlah minimum syarat yang dapat Anda sertakan adalah 2, dan maksimum adalah 10.

Pernyataan

JSON

"Fn::Or": [{condition}, {...}]

YAML

Sintaks untuk nama fungsi penuh:

Fn::Or: [condition, ...]

Sintaks untuk bentuk pendek:

!Or [condition, ...]

Parameter

condition

Suatu syarat yang bernilai true atau false.

Contoh

MyOrCondition berikut ini bernilai true jika nama grup keamanan yang direferensikan sama dengan sg-mysggroup atau jika SomeOtherCondition bernilai true:

JSON

"MyOrCondition" : { "Fn::Or" : [ {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]}, {"Condition" : "SomeOtherCondition"} ] }

YAML

MyOrCondition: !Or [!Equals [sg-mysggroup, !Ref ASecurityGroup], Condition: SomeOtherCondition]

Fungsi yang didukung

Anda dapat menggunakan fungsi berikut di syarat Fn::If:

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref

Anda dapat menggunakan fungsi-fungsi berikut di semua fungsi syarat lainnya, seperti Fn::Equals dan Fn::Or:

  • Fn::FindInMap

  • Ref

  • Fungsi syarat lainnya