各条件項目は、Fn::And, Fn::Or, Fn::Not, Fn::Equals によって定義されます。スタックの作成または更新時に、指定された入力パラメータ値に基づいて計算されます。条件内の他の条件、パラメータ値、またはマッピングを参照することができます。条件をテンプレートのリソースおよび出力部分のリソースおよびリソース属性に関連付けることができます。条件は、次の方法でリソースに関連付けられます。ビルトイン関数 Fn :: If またはリソースの条件フィールドを使用します。
条件は、条件名と条件本体で構成されます。条件名は文字列であり、テンプレート内で一意である必要です。条件は組み込み関数 Fn :: And、Fn :: Or、Fn :: Not、Fn :: Equals で定義されます。ある条件で他の条件を参照することもできます。複数の条件はカンマで区切ります。
例
次の例は、条件を定義する方法を示しています。
"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"]}
}
次の例は、条件をリソースに関連付ける方法を示しています。この例では、ECS インスタンスのデータディスクと OSS バケットを作成するかどうかは、EnvType の値によって決まります。
{
"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-2zew9pxh2yirtzqxdboi1",
"SystemDiskCategory":"cloud_efficiency",
"SecurityGroupId":"sg-2zece6wcqriejf1v91sr",
"SystemDiskSize":40,
"ImageId":"centos_6_8_64_40G_base_20170222.vhd",
"IoOptimized":"optimized",
"VSwitchId":"vsw-2zed9txvy7h2srqo6jmgq",
"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"
]
}
}
}
}