2015-04-22 90 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

相關問題