Anda dapat menggunakan Fn::And, Fn::Or, Fn::Not, atau Fn::Equals untuk mendefinisikan pernyataan kondisi. Setiap kondisi dapat merujuk ke kondisi lain, nilai parameter, atau pemetaan. Kondisi dapat dikaitkan dengan sumber daya di bagian Resources dan Outputs dari sebuah template. Untuk mengaitkan kondisi dengan sumber daya, gunakan fungsi Fn::If atau properti Condition dari sumber daya tersebut.
Sintaks
Deklarasi kondisi terdiri dari nama kondisi dan pernyataan kondisi. Nama kondisi bertipe String. Anda dapat menggunakan fungsi berikut untuk mendefinisikan pernyataan kondisi dan merujuk ke kondisi lain dalam suatu kondisi. Setiap nama kondisi harus unik.
Fungsi berikut dapat digunakan untuk mendefinisikan kondisi, tetapi tidak dapat digunakan sebagai fungsi terluar:
"Fn::Select", "Fn::Join", "Fn::Split", "Fn::Replace", "Fn::Base64Encode", "Fn::Base64Decode", "Fn::MemberListToMap", "Fn::If", "Fn::ListMerge", "Fn::GetJsonValue", "Fn::MergeMapToList", "Fn::SelectMapList", "Fn::Add", "Fn::Avg", "Fn::Str", "Fn::Calculate", "Ref"(hanya untuk referensi parameter), dan "Fn::FindInMap".
Contoh
Contoh berikut menunjukkan cara mendefinisikan kondisi:
Conditions: DevEnv: Fn::Equals: - Dev - Ref: EnvType UTEnv: Fn::Equals: - UT - Ref: EnvType PREEnv: Fn::Not: Fn::Or: - DevEnv - UTEnv ProdEnv: Fn::And: - Fn::Equals: - Prod - Ref: EnvType - PREEnvContoh berikut menunjukkan cara mengaitkan kondisi dengan sumber daya.
Pada contoh ini, nilai EnvType digunakan sebagai kondisi untuk menentukan apakah akan membuat disk data dan bucket Object Storage Service (OSS) untuk instance Elastic Compute Service (ECS).
ROSTemplateFormatVersion: '2015-09-01' Parameters: EnvType: Default: pre Type: String Conditions: CreateProdRes: Fn::Equals: - prod - Ref: EnvType Resources: WebServer: Type: ALIYUN::ECS::Instance Properties: DiskMappings: Fn::If: - CreateProdRes - - Category: cloud_efficiency DiskName: FirstDataDiskName Size: 40 - Category: cloud_ssd DiskName: SecondDataDiskName Size: 40 - Ref: ALIYUN::NoValue VpcId: vpc-2zew9pxh2yirtzqxd**** SystemDiskCategory: cloud_efficiency SecurityGroupId: sg-2zece6wcqriejf1v**** SystemDiskSize: 40 ImageId: centos_6_8_64_40G_base_2017****.vhd IoOptimized: optimized VSwitchId: vsw-2zed9txvy7h2srqo6**** InstanceType: ecs.n1.medium OssBucket: Type: ALIYUN::OSS::Bucket Condition: CreateProdRes Properties: AccessControl: private BucketName: myprodbucket Outputs: InstanceId: Value: Fn::GetAtt: - WebServer - InstanceId OssDomain: Condition: CreateProdRes Value: Fn::GetAtt: - OssBucket - DomainName