我們正在調整我們的應用程序CloudFormation模板以利用VPC。在此模板中,我們需要以編程方式生成用於VPC子網的CIDR塊,以確保它們不會在CloudFormation堆棧之間發生衝突。以編程方式在CloudFormation模板中生成子網CIDR塊(或將整數加在一起)
我最初的計劃一直是產生通過連接字符串CIDRs在一起,例如:
"ProxyLoadBalancerSubnetA" : {
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"VpcId" : { "Ref" : "Vpc" },
"AvailabilityZone" : "eu-west-1a",
"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, "0.0/24" ] ] }
}
},
在進一步考慮然而,我們需要使用一個單一的VPC而不是一個VPC我們每個堆棧。
AWS限制VPC使用CIDR塊的最大數量爲/16
(我們已要求提高此限制,但顯然這是不可能的)。這意味着我們不再可能使用這種連接方法,因爲我們的每個堆棧都需要總共跨度超過255個地址的子網。
我想生成CIDR塊上即時而不是將其定義爲參數給CloudFormation模板,
我有一個想法是每個堆疊具有「基本整數」和加入到每個子網的CIDR塊。
例如:
"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, { "Fn::Sum", [ { "Ref" : "VpcCidrStart" }, 3 ] }, "0/24 ] ] }
哪裏VpcCidrStart
是設定第三八位位組CIDR應該從腳本內開始的值的整數,並且是3
子網號。
顯然Fn::Sum
內在函數並不存在,所以我想知道是否有人有解決方案在VPC中添加整數(這看起來應該是不可能的,因爲CloudFormation是面向字符串的),或者一般來說,這是更好的解決這個難題的方法。
我已經開始工作「堆棧管理器」應用程序可以處理臨時和生產環境需要稍微不同的設置的情況,以及在晚上自動化非生產環境的「熄燈」 - 所以我認爲這個解決方案對我們來說是有意義的。令人遺憾的是CloudFormation本身雖然缺乏這些功能。 – roberthl
如果你還沒有,那麼在官方[AWS CloudFormation論壇](https://forums.aws.amazon.com/forum)上描述你的用例並提出你的特性請求可能是個好主意。 JSPA?forumID = 92)。我知道開發團隊在那裏處理支持。 –
我知道這已經有一段時間了,但我確實實現了這一點,並且最近[在GitHub上發佈了它](https://github.com/royaloperahouse/stack-manager)。 AWS最近爲CloudFormation添加了基本的邏輯和數學,但它相當麻煩。 – roberthl