每一个条件项由Fn::And、Fn::Or、Fn::Not或Fn::Equals定义。根据您在创建或更新资源栈时,指定的输入参数值进行计算。在每个条件中,都可以引用其他条件、参数值或映射。在模板的Resources和Outputs部分,将条件与资源关联起来。条件和资源的关联通过两种方式实现:Fn::If 函数或者资源的Condition字段。
语法
每个条件由条件名和条件本身组成,其中条件名是字符串类型。条件是由Fn::And、Fn::Or、Fn::Not或Fn::Equals定义,在条件中可以引用其他条件。多个条件用半角逗号(,)隔开,每个条件名不能重复。
允许使用如下函数,但不能是最外层的函数:
"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"(仅参数引用)、"Fn:: FindInMap"。
示例
- 设置Conditions
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 - PREEnv
- 关联Conditions和Resources
本示例中,根据EnvType参数值决定是否为ECS instance创建数据盘和OSS存储空间。
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