前面学习了Cloudformation 模板的内置函数。其中有一系列特殊的内置函数这里重点学习一下,叫做 Condition Functions。他的作用其实就是对布尔值的相关操作,类似if..else的条件语句的效果。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-conditions.html

这些条件函数是需要配合condition section来操作的。

基本使用方法是

  1. 在Parameters 的部分传入一些可选的参数
  2. 在Condition 的部分根据这些参数,通过我们的Condition Functions设置一些条件
  3. 在 Resource或者 Output 的部分,绑定在第二步的条件,根据不同的条件配置不同的结果

主要有下面5个函数

Fn::And 如果所有的条件成立,返回真,否则返回假

"Fn::And": [{condition}, {...}]

Fn::Equals 比较两个值是否相等,如果相等,返回真,否则假

"Fn::Equals" : ["value_1", "value_2"]

Fn::If 判断条件,如果为真,返回第一个值,否则返回第二个值

"Fn::If": [condition_name, value_if_true, value_if_false]

Fn::Not 如果条件不成立,那么返回真,否则返回假

Fn::Not: [condition]

Fn::Or 如果任何一个条件成立,那么为真;如果所有条件不成立,那么返回假

"Fn::Or": [{condition}, {...}]

最后给一个实际的例子,根据我传入的参数,创建对应的VPC


{
   "AWSTemplateFormatVersion" : "2010-09-09",

    "Parameters": {
        "Tenancy": {
        "Description": "Set up VPC Tenancy",
        "Type": "String",
        "Default": "default",
        "AllowedValues" : [ "default", "dedicated"]
        }
        },

    "Conditions" : {
        "VPCTenancy" : {"Fn::Equals" : [{"Ref" : "Tenancy"}, "dedicated"]}
    },

   "Resources" : {
      "myVPC" : {
         "Type" : "AWS::EC2::VPC",
         "Properties" : {
            "CidrBlock" : "10.0.0.0/16",
            "EnableDnsSupport" : "false",
            "InstanceTenancy" : {
                    "Fn::If" : [
                        "VPCTenancy",
                        "dedicated",
                        "default"
                    ]},
            "EnableDnsHostnames" : "false",
            "Tags" : [ {"Key" : "foo", "Value" : "bar"} ]
         }
      }

   }
}  

创建看看,传入参数选择 dedicated

AWS Cloudformation - Condition Functions_第1张图片

最后可以看见创建好的 VPC 为 dedicated

AWS Cloudformation - Condition Functions_第2张图片