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 EC2 instans Amazon 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 CloudFormation template Conditions sintaksis.
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
Mengembalikan true
jika semua kondisi yang ditentukan mengevaluasi ke true, atau kembali false
jika salah satu kondisi mengevaluasi ke false. Fn::And
bertindak sebagai AND operator. 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 intrinsik Fn::If
dalam atribut metadata, atribut kebijakan pembaruan, dan nilai properti di bagian Sumber daya dan Output pada templat. 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 AmazonEC2. 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 syarat bernilai salah, CloudFormation menghapus properti DBSnapshotIdentifier
.
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
pembaruan.
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
Pengembalian true
untuk kondisi yang mengevaluasi false
atau mengembalikan false
kondisi yang mengevaluasi. true
Fn::Not
bertindak sebagai NOT operator.
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