【发布时间】:2021-09-10 21:05:38
【问题描述】:
我们有部署到 3 个区域的 CloudFromation 模板,我们使用 !GetAZs 内部函数如下:
PrivateSubnet2:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: !Ref 'PrivateSubnetCIDR2'
AvailabilityZone: !Select
- '1'
- !GetAZs ''
Tags:
- Key: Name
Value: Private-Subnet-2
VpcId: !Ref 'VPC'
我们设置了 2 个子网,首先将索引设置为 0,第二个将其设置为 1。我们这样做是因为工作区在特定的可用区域中可用。到目前为止,我们正在部署的 3 个区域在索引 0 和 1 的可用区中都有可用的工作区。
但现在我们要添加另一个可用区,工作区在 1 和 2 索引处可用。
我有一个 PoC,它将在该特定区域的条件下使用 !Equals,但随后它将为该可用区设置一个额外的子网、路由表等整个网络设置。这并不理想。顺便说一句,我的!Equals 条件如下:
WorkspaceSubnet: !Equals
- !Ref 'AWS::Region'
- 'us-east-1'
我想要的是可以在!Equals 条件为真/假的基础上设置索引的东西,如下所示:
PrivateSubnet1:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: !Ref 'PrivateSubnetCIDR1'
AvailabilityZone: !if
- WorkspaceSubnet
- !Select
- '2'
- !GetAZs ''
- !Select
- '0'
- !GetAZs ''
Tags:
- Key: Name
Value: Private-Subnet-1
VpcId: !Ref 'VPC'
但这给了我错误:[cfn-lint] E3002: Property Resources/PrivateSubnet1/Properties/AvailabilityZone has an illegal function Fn::if
【问题讨论】:
标签: amazon-web-services networking amazon-cloudformation amazon-vpc subnet