我们正在调整应用程序的CloudFormation模板以利用VPC。在此模板中,我们需要以编程方式生成用于VPC子网的CIDR块,以确保它们在CloudFormation堆栈之间不冲突。
我的最初计划是通过将字符串连接在一起来生成CIDR,例如:
"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限制为最大使用/16
CIDR块(我们已要求提高此限制,但显然不可能)。这意味着我们不能再使用此连接方法,因为我们的每个堆栈都需要跨越超过255个地址的子网。
我想动态生成CIDR块,而不必将它们定义为CloudFormation模板的参数,
我想到的一个想法是每个堆栈都有一个“基础整数”,并针对每个子网的CIDR块进行加法计算。
例如:
"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, { "Fn::Sum", [ { "Ref" : "VpcCidrStart" }, 3 ] }, "0/24 ] ] }
其中VpcCidrStart
是一个整数,用于在脚本中设置第三个CIDR八位组应从哪里开始,而3
是子网号。
显然Fn::Sum
内置函数并不存在,因此我想知道是否有人有解决VPC中整数相加的方案(似乎这不应该是可能的,因为CloudFormation是基于字符串的),或者一般情况下更好的解决方案。