簡體   English   中英

AWS CloudFormation:如何從VPC獲取子網列表?

[英]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",
    ...
  }
}

處理這種情況有三種典型方式(按我的首選順序):

  1. 如果子網僅由此堆棧使用,則將它們創建為堆棧的一部分並使用ref。

  2. 如果子網將由多個堆棧使用,則在單獨的堆棧中創建它們,將它們定義為輸出,在定義堆棧上執行describe-stack以獲取值,然后將它們作為參數傳遞給此堆棧。

  3. 如果子網是在其他地方創建的(在CloudFormation之外),只需將它們作為參數傳遞。

如果你真的想要使用來自VPC的所有子網,我不建議將來為了其他目的創建新的子網,那么你總是可以做描述子網並在VpcId上過濾得到你的列表。

如果您的模板創建了VPC,那么可能您的模板也為該VPC創建了子網。 你不能只為你創建的每個子網的各子網ID填充SubnetIds嗎?

像這樣的東西:

"SubnetIds" : [ {"Ref":"mysubnet1"}, {"Ref":"mysubnet2"} ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM