[英]AWS CloudFormation: How to get subnet list from VPC?
在CloudFormation中,我正在創建一個VPC,兩個EC2實例和一個Elasticache。 在模板中,我正在嘗試將彈性緩存添加到vpc中。 在創建AWS :: Elasticache :: SubnetGroup時發生了問題
"CacheSubnetGroup" : {
"Type" : "AWS::ElastiCache::SubnetGroup",
"Properties" : {
"Description" : "Subnets available for the ElastiCache Cluster",
"SubnetIds" : [ ... ]
}
},
我不想要求用戶輸入作為建議的子網列表在這里 ,因為我假設用戶不知道子網是什么。 有沒有類似於{“Fn :: GetAtt”的函數:[“myVpc”,“SubnetList”]}?
編輯在jarmod的響應之后,我正在創建子網,vpc和其他所有內容。 但仍有一個問題。 我可以在創建的VPC中啟動EC2,但是實例會被創建,並且在初始化實例時會關閉實例並且新實例會被啟動。 這個循環繼續,直到我刪除cf堆棧。 這是我認為問題的起源部分:
"WebServerGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"VPCZoneIdentifier" : [{ "Ref" : "InstanceSubnet1" }, { "Ref" : "InstanceSubnet2" }, { "Ref" : "InstanceSubnet3" }, { "Ref" : "InstanceSubnet4" }],
"LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
"MinSize" : "1",
"MaxSize" : "4",
...
}
}
處理這種情況有三種典型方式(按我的首選順序):
如果子網僅由此堆棧使用,則將它們創建為堆棧的一部分並使用ref。
如果子網將由多個堆棧使用,則在單獨的堆棧中創建它們,將它們定義為輸出,在定義堆棧上執行describe-stack以獲取值,然后將它們作為參數傳遞給此堆棧。
如果子網是在其他地方創建的(在CloudFormation之外),只需將它們作為參數傳遞。
如果你真的想要使用來自VPC的所有子網,我不建議將來為了其他目的創建新的子網,那么你總是可以做描述子網並在VpcId上過濾得到你的列表。
如果您的模板創建了VPC,那么可能您的模板也為該VPC創建了子網。 你不能只為你創建的每個子網的各子網ID填充SubnetIds嗎?
像這樣的東西:
"SubnetIds" : [ {"Ref":"mysubnet1"}, {"Ref":"mysubnet2"} ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.