Fn::And、Fn::Or、Fn::Not、または Fn::Equals を使用して、条件文を定義できます。各条件では、別の条件、パラメーター値、またはマッピングを参照できます。テンプレートの Resources セクションと Outputs セクションで、リソースに条件を関連付けることができます。リソースに条件を関連付けるには、Fn::If 関数またはリソースの Condition プロパティを使用できます。
構文
条件の宣言は、条件名と条件文で構成されます。条件名は String 型です。次の関数を使用して、条件文を定義できます。条件内で他の条件を参照できます。各条件名は一意である必要があります。
次の関数を使用して条件を定義できますが、これらの関数を最外部関数として使用することはできません。
"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: DevEnv: # 開発環境 Fn::Equals: - Dev - Ref: EnvType UTEnv: # UT環境 Fn::Equals: - UT - Ref: EnvType PREEnv: # PRE環境 Fn::Not: Fn::Or: - DevEnv - UTEnv ProdEnv: #本番環境 Fn::And: - Fn::Equals: - Prod - Ref: EnvType - PREEnv次の例は、リソースに条件を関連付ける方法を示しています。
この例では、EnvType 値が条件として使用され、Elastic Compute Service(ECS)インスタンスのデータディスクと Object Storage Service(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