Ini adalah Panduan Referensi AWS CloudFormation Template baru. Harap perbarui bookmark dan tautan Anda. Untuk bantuan memulai CloudFormation, lihat Panduan AWS CloudFormation Pengguna.
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
atauFn::Equals
, untuk membuat dan mengkonfigurasi sumber daya tumpukan berdasarkan logika bersyarat. Kondisi ini mengevaluasi selama pembuatan tumpukan atau pembaruan. Setelah Anda menentukan semua kondisi Anda, Anda dapat mengaitkannya dengan sumber daya atau properti sumber daya di Resources
dan Outputs
bagian template.
Untuk skenario lanjutan, Anda dapat menggabungkan kondisi menggunakan Fn::And
atau Fn::Or
fungsi, atau gunakan Fn::Not
untuk meniadakan nilai kondisi. Anda juga dapat membuat kondisi sarang untuk membuat logika kondisional yang lebih kompleks.
Jika Anda baru menggunakan kondisi di template Anda, kami sarankan Anda terlebih dahulu meninjau topik sintaks Ketentuan CloudFormation template di Panduan AWS CloudFormation Pengguna.
catatan
Anda harus menentukan semua kondisi di Conditions
bagian templat, kecuali untuk Fn::If
kondisi. Anda dapat menggunakan Fn::If
kondisi dalam Metadata
atribut, UpdatePolicy
atribut, dan nilai properti di Outputs
bagian Resources
dan.
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
.
Fn::And
contoh penggunaan
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 string yang ingin Anda bandingkan.
Fn::Equals
contoh penggunaan
Syarat IsProduction
berikut bernilai true jika nilai untuk parameter EnvironmentType
adalah sama dengan prod
:
JSON
"IsProduction" : { "Fn::Equals": [ {"Ref": "EnvironmentType"}, "prod" ] }
YAML
IsProduction: !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 Metadata
atribut, UpdatePolicy
atribut, dan nilai properti di Resources
bagian dan Outputs
bagian 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
.
Fn::If
contoh penggunaan
Topik
Memilih sumber daya secara kondisional
Contoh berikut menggunakan Fn::If
fungsi dalam definisi EC2 sumber daya Amazon untuk menentukan sumber daya grup keamanan mana yang akan dikaitkan dengan instance. Jika CreateNewSecurityGroup
kondisi dievaluasi ke true, CloudFormation gunakan nilai referensi NewSecurityGroup
(grup keamanan yang dibuat di tempat lain dalam template) untuk menentukan properti. SecurityGroupIds
Jika CreateNewSecurityGroup
salah, CloudFormation gunakan nilai referensi ExistingSecurityGroupId
(parameter yang mereferensikan grup keamanan yang ada).
JSON
"Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0abcdef1234567890", "InstanceType": "t3.micro", "SecurityGroupIds": { "Fn::If": [ "CreateNewSecurityGroup", [{"Ref": "NewSecurityGroup"}], [{"Ref": "ExistingSecurityGroupId"}] ] }] } } }
YAML
Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0abcdef1234567890 InstanceType: t3.micro SecurityGroupIds: !If - CreateNewSecurityGroup - [!Ref NewSecurityGroup] - [!Ref ExistingSecurityGroupId]
Output bersyarat
Di Output
bagian templat, Anda dapat menggunakan Fn::If
fungsi untuk mengeluarkan informasi secara kondisional. 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" : "ExistingSecurityGroupId"} ] } } }
YAML
Outputs: SecurityGroupId: Description: Group ID of the security group used. Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroupId]
Nilai array bersyarat
Contoh berikut menggunakan Fn::If
untuk memberikan nilai array yang berbeda secara kondisional berdasarkan kondisi. Jika MoreThan2AZs
kondisi dievaluasi menjadi benar, ia menggunakan tiga subnet publik. Jika tidak, ia hanya menggunakan dua subnet publik.
JSON
"Subnets": { "Fn::If": [ "MoreThan2AZs", [ {"Fn::ImportValue": "PublicSubnet01"}, {"Fn::ImportValue": "PublicSubnet02"}, {"Fn::ImportValue": "PublicSubnet03"} ], [ {"Fn::ImportValue": "PublicSubnet01"}, {"Fn::ImportValue": "PublicSubnet02"} ] ] }
YAML
Subnets: Fn::If: - MoreThan2AZs - - Fn::ImportValue: PublicSubnet01 - Fn::ImportValue: PublicSubnet02 - Fn::ImportValue: PublicSubnet03 - - Fn::ImportValue: PublicSubnet01 - Fn::ImportValue: PublicSubnet02
Properti bersyarat dan nilai properti
Contoh berikut menggunakan parameter AWS::NoValue
pseudo dalam suatu Fn::If
fungsi. Kondisi ini menggunakan snapshot untuk instans Amazon RDS DB hanya jika ID snapshot disediakan. Jika UseDBSnapshot
kondisi dievaluasi ke true, CloudFormation menggunakan nilai DBSnapshotName
parameter untuk DBSnapshotIdentifier
properti. Jika syarat bernilai salah, CloudFormation menghapus properti DBSnapshotIdentifier
.
Ini juga menggunakan Fn::If
fungsi di AllocatedStorage
properti instans Amazon RDS DB. Jika IsProduction
kondisi dievaluasi ke true, ukuran penyimpanan diatur ke100
. Jika tidak, itu diatur ke20
.
JSON
"MyDatabase" : { "Type" : "AWS::RDS::DBInstance", "Properties": { "DBInstanceClass": "db.t3.micro", "AllocatedStorage": { "Fn::If": [ "IsProduction", 100, 20 ] }, "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDatabase: Type: AWS::RDS::DBInstance Properties: DBInstanceClass: db.t3.micro AllocatedStorage: !If [IsProduction, 100, 20] Engine: MySQL EngineVersion: 5.5 MasterUsername: !Ref DBUser MasterUserPassword: !Ref DBPassword DBParameterGroupName: !Ref MyRDSParamGroup DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]
Kebijakan pembaruan bersyarat
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": { "Fn::If": [ "RollingUpdates", { "AutoScalingRollingUpdate": { "MaxBatchSize": 2, "MinInstancesInService": 2, "PauseTime": "PT0M30S" } }, { "Ref": "AWS::NoValue" } ] }
YAML
UpdatePolicy: !If - RollingUpdates - AutoScalingRollingUpdate: 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
.
Fn::Not
contoh penggunaan
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
.
Fn::Or
contoh penggunaan
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
Templat sampel
Membuat sumber daya secara kondisional untuk tumpukan produksi, pengembangan, atau tes
Dalam beberapa kasus, Anda mungkin ingin membuat tumpukan yang mirip tetapi dengan tweak kecil. Misalnya, Anda mungkin memiliki templat yang Anda gunakan untuk aplikasi produksi. Anda ingin membuat tumpukan produksi yang sama agar Anda dapat menggunakannya untuk pengembangan atau pengujian. Namun, untuk pengembangan dan pengujian, Anda mungkin tidak memerlukan semua kapasitas tambahan yang disertakan dalam tumpukan tingkat produksi. Sebaliknya, Anda dapat menggunakan parameter input jenis lingkungan guna membuat sumber daya tumpukan secara kondisional yang khusus untuk produksi, pengembangan, atau pengujian, seperti yang ditunjukkan dalam contoh berikut:
Anda dapat menentukan prod
, dev
, atau test
untuk parameter EnvType
. Untuk setiap jenis lingkungan, templat menentukan jenis instans yang berbeda. Jenis instans dapat berkisar dari instans besar yang dioptimalkan dengan komputasi hingga instans kecil untuk tujuan umum. Untuk menentukan jenis instance secara kondisional, template mendefinisikan dua kondisi di Conditions
bagian template:CreateProdResources
, yang mengevaluasi ke true jika nilai EnvType
parameter sama dengan prod
danCreateDevResources
, yang mengevaluasi ke true jika nilai parameter sama dengan. dev
Di properti InstanceType
, templat menyimpan dua fungsi intrinsik Fn::If
untuk menentukan jenis instans yang akan digunakan. Jika syarat CreateProdResources
true, jenis instans adalah c5.xlarge
. Jika syarat salah, syarat CreateDevResources
dievaluasi. Jika syarat CreateDevResources
true, jenis instans adalah t3.medium
atau t3.small
.
Selain jenis instans, lingkungan produksi membuat dan melampirkan EC2 volume Amazon ke instance. Sumber daya MountPoint
dan NewVolume
yang terkait dengan syarat CreateProdResources
sehingga sumber daya dibuat hanya jika syarat bernilai true.
contoh JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "EnvType" : { "Description" : "Environment type.", "Default" : "test", "Type" : "String", "AllowedValues" : ["prod", "dev", "test"], "ConstraintDescription" : "must specify prod, dev, or test." } }, "Conditions" : { "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "prod"]}, "CreateDevResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "dev"]} }, "Resources" : { "EC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-1234567890abcdef0", "InstanceType" : { "Fn::If" : [ "CreateProdResources", "c5.xlarge", {"Fn::If" : [ "CreateDevResources", "t3.medium", "t3.small" ]} ]} } }, "MountPoint" : { "Type" : "AWS::EC2::VolumeAttachment", "Condition" : "CreateProdResources", "Properties" : { "InstanceId" : { "Ref" : "EC2Instance" }, "VolumeId" : { "Ref" : "NewVolume" }, "Device" : "/dev/sdh" } }, "NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} } } } }
contoh YAML
AWSTemplateFormatVersion: "2010-09-09" Parameters: EnvType: Description: Environment type. Default: test Type: String AllowedValues: [prod, dev, test] ConstraintDescription: must specify prod, dev, or test. Conditions: CreateProdResources: !Equals [!Ref EnvType, prod] CreateDevResources: !Equals [!Ref EnvType, "dev"] Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-1234567890abcdef0 InstanceType: !If [CreateProdResources, c5.xlarge, !If [CreateDevResources, t3.medium, t3.small]] MountPoint: Type: AWS::EC2::VolumeAttachment Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: AWS::EC2::Volume Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
catatan
Untuk contoh penggunaan kondisi yang lebih kompleks untuk membuat sumber daya, lihat Conditionatribut topiknya.