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.
Topik
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
ataufalse
.
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
JSON
"Fn::If": [
condition_name
,value_if_true
,value_if_false
]
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 bernilaitrue
ataufalse
.
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
ataufalse
.
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