【发布时间】:2019-08-17 01:15:03
【问题描述】:
我正在尝试在我的 cloudformation 脚本中创建有条件的 VPC。例如,如果参数中提供了一个VPC id,那么我想创建这个VPC中的所有资源,否则创建一个新的。
当我想重用现有 VPC 时,问题就开始了,但我无法推断子网,这是我的一种资源所需要的。所以我想,我必须将它们作为参数提供。但是,如果我将它们作为参数提供,在我想创建一个新的 VPC 的情况下,它会报错,因为子网 ID 列表是空的,并且它必须是有效的。
错误是Parameter validation failed: parameter value for parameter name VpcPrivateSubnetIds does not exist. Rollback requested by user. 不可能给出任何虚拟值。任何想法如何实现这一目标?
这是我的 CF 脚本:
VpcId:
Type: String
Description: Give the VPC id if you want to use an existing one. Leave empty for creating a new one.
VpcPublicSubnetIds:
Type: List<AWS::EC2::Subnet::Id>
Description: List of 3 public SubnetIds for the given VPC.
VpcPrivateSubnetIds:
Type: List<AWS::EC2::Subnet::Id>
Description: List of 3 private SubnetIds for the given VPC.
Conditions:
CreateVPC: !Equals [ !Ref VpcId, ""]
Resources:
(...)
Properties:
PrivateSubnetIds: !If
- CreateVPC
- !GetAtt VPCStack.Outputs.PrivateSubnets
- !Join [',', [!Select [0, !Ref VpcPrivateSubnetIds], !Select [1, !Ref VpcPrivateSubnetIds], !Select [2, !Ref VpcPrivateSubnetIds]]]
PublicSubnetIds: !If
- CreateVPC
- !GetAtt VPCStack.Outputs.PublicSubnets
- !Join [',', [!Select [0, !Ref VpcPublicSubnetIds], !Select [1, !Ref VpcPublicSubnetIds], !Select [2, !Ref VpcPublicSubnetIds]]]
【问题讨论】:
-
到目前为止我发现的唯一“解决方案”是在执行时提供一些虚拟的现有子网,之后会被忽略,只是为了不让字段为空
标签: amazon-web-services amazon-cloudformation amazon-vpc