2013-04-12 35 views
1

我有安全组参数:如果在cloudformation脚本的参数中未指定安全组,则如何创建安全组?

"Parameters" : { 
"SecurityGroup" : { 
    "Description" : "Name of an existing EC2 Security Group ", 
    "Type" : "String", 
    "Default" : "default", 
    "MinLength": "1", 
    "MaxLength": "64", 
    "AllowedPattern" : "[-_ a-zA-Z0-9]*", 
    "ConstraintDescription" : "can contain only alphanumeric characters, spaces, dashes and underscores." 
    }, 
}, 

但是,而不是使用默认的,如果没有指定参数,我想创建一个。这可能吗?

回答

1

这些问题很可能在问完这个问题之后被添加,但是对于现在碰到这个问题的任何人来说,这可以用CloudFormation中的Conditions完成。

因此,如果我们开始与您的参数声明

"Parameters" : { 
"SecurityGroup" : { 
    "Description" : "Name of an existing EC2 Security Group ", 
    "Type" : "String", 
    "Default" : "default", 
    "MinLength": "1", 
    "MaxLength": "64", 
    "AllowedPattern" : "[-_ a-zA-Z0-9]*", 
    "ConstraintDescription" : "can contain only alphanumeric characters, spaces, dashes and underscores." 
    }, 
}, 

我们可以添加一个Conditions声明,符合条件ShouldCreateSecurityGroup

"Conditions" : { 
    "ShouldCreateSecurityGroup" : {"Fn::Equals" : [{"Ref" : "SecurityGroup"}, "default"]} 
}, 

这种情况,现在可以用来告诉CloudFormation是否创建安全组:

"Resources": { 
    "NewSecurityGroup": { 
    "Type" : "AWS::EC2::SecurityGroup", 
    "Condition" : "ShouldCreateSecurityGroup" 
    "Properties" : { 
     "SecurityGroupEgress" : [ Security Group Rule, ... ], 
     "SecurityGroupIngress" : [ Security Group Rule, ... ], 
    } 
    } 
} 

然后,当您参考此处的值时,可以使用Fn::If条件函数来说明您是要使用SecurityGroup参数或NewSecurityGroup资源中的值。例如,传递值到EC2实例的SecurityGroups参数,我们可以使用{"Fn::If},如:

"Server": { 
    { 
    "Type" : "AWS::EC2::Instance", 
    "Properties" : { 
     ... 
     "SecurityGroups" : [ {"Fn::If": ["ShouldCreateSecurityGroup", {"Ref": "NewSecurityGroup"}, {"Ref": "SecurityGroup"}]} ], 
    } 
    } 
} 
0

不 - 云形成是一种声明性语言,所以不幸的是没有“if/else”。

甚至不能通过创建自己的一个,然后在参数中传递“Ref”作为参数部分在脚本执行之前进行分析和评估。

你可以用嵌套的云形成脚本来做些事情,但是我还没有玩过足够的东西来研究它是否可行。所以对我来说 - 你会有一个脚本,需要一个参数。如果提供了参数,则直接传递给第二个云阵列,但如果未提供该参数,则会执行第一个云阵列,并返回新创建的安全组的名称,并将其传递到第二个云中形成。

+1

BTW,如2013年11月的,CFN现在支持条件语句:HTTP://docs.aws.amazon。 COM/AWSCloudFormation /最新/ UserGuide /条件形部structure.html – chris

相关问题