2015-04-22 87 views
0

我正在尝试编写一个为负载平衡器设置安全组的云阵列模板。我有以下选择用于SecurityGroup一个VPC:Cloud Formation AWS :: EC2 :: SecurityGroup VpcId需要一个字符串?

"Parameters" : { 
    "VpcId" : { 
    "Description" : "VPC associated with the provided subnets", 
    "Type" : "List<AWS::EC2::VPC::Id>" 
    }, 
}, 

然后创建负载均衡器的安全组,我有:

"LbSecurityGroup" : { 
    "Type" : "AWS::EC2::SecurityGroup", 
    "Properties" : { 
    "GroupDescription" : "Stack LBs", 
    "VpcId" : { "Ref" : "VpcId" } 
    } 
}, 

当我启动堆栈它失败:

CREATE_FAILED AWS::EC2::SecurityGroup LbSecurityGroup 
Value of property VpcId must be of type String 

首先,为什么heck不是AWS :: EC2 :: SecurityGroup.VpcId类型的AWS :: EC2 :: VPC :: Id?其次,我如何将它按摩成一个字符串?

提前致谢!

回答

2

其他更具体的类型(如AWS::EC2::SecurityGroup而不是String)是新的,仅用于参数 - 目的是在尝试创建堆栈之前验证资源是否存在。有关更多信息,请参阅Using the New CloudFormation Parameter Types

在你的情况,我相信问题是VpcId参数的类型是一个AWS::EC2::SecurityGroup值的列表,但不是一个AWS::EC2::SecurityGroup值? AWS::EC2::SecurityGroup资源的VpcId属性仅占用单个字符串,而不是字符串列表 - 请参阅VpcId

+0

是的,AWS :: EC2 :: VPC :: Id是我尝试用于参数选择的较新的特定类型。 AWS :: EC2 :: SecurityGroup中的VpcId参数是string类型的,但是当我通过“Ref”使用参数时,我没有得到一个字符串,而是得到一个错误。 –

+1

因为您已将您的参数定义为'List '而不是'AWS :: EC2 :: VPC :: Id'。 – bsvingen

+0

谢谢。那就是诀窍。 –

1

如果您希望用户从下拉列表中选择一个 VPC,然后使用AWS :: EC2 :: VPC :: Id。

如果你希望用户从一个CheckBoxList的选择一个或多个的VPC,然后用列表< AWS EC2 :: :: VPC ::编号>。

+0

AWS :: EC2 :: SecurityGroup的'VpcId'属性只接受一个字符串,而不是字符串列表,所以后者在这种情况下不起作用。 – bsvingen

+1

@bsvingen是的,他在他的Vpcid参数中使用了错误的类型,因为在这种情况下他需要一个VPC id。我认为我们说的是同样的事情,但我只是在更一般的情况下指出,适用于另一种类型。 – jarmod

相关问题