使用CDK v1.1.0,我正在尝试创建一个面向Internet的应用程序负载平衡器。
当我使用ec2.vpc.fromLookup
呼叫vpcId
时,我得到了所有子网,但所有子网都标记为PRIVATE
子网。因此,我收到一个错误,指出没有可用的公共子网。
如果我尝试通过ec2.vpc.fromVpcAttributes
,vpcId
和availabilityZones
使用SubnetIDs
,则会收到错误消息“无法读取未定义的属性'selectSubnets'”。
我的子网的路由表: 在子网中,我的RouteTable有两个路由:
我不确定我的子网/ VPC配置不正确还是aws-cdk有错误。
我手动尝试使用公共子网创建应用程序负载平衡器,并且能够成功创建。所以我不能说我的子网配置不正确。
答案 0 :(得分:0)
导入和控制子网分类的最简单方法是使用ec2.Vpc.fromVpcAttributes
:
// Import existing VPC
const vpc = ec2.Vpc.fromVpcAttributes(this, 'Vpc', {
vpcId: 'vpc-xxxxxx',
availabilityZones: ['eu-west-1a', 'eu-west-1b', 'eu-west-1c'],
publicSubnetIds: ['subnet-xxxxxx', 'subnet-xxxxxx', 'subnet-xxxxxx'],
privateSubnetIds: ['subnet-xxxxxx', 'subnet-xxxxxx', 'subnet-xxxxxx'],
});
子网顺序和长度很重要,并且必须与可用区匹配。
答案 1 :(得分:0)
花了我一段时间,但我发现了。
对于我的公共子网,需要启用属性Auto-assign public IPv4 address
(设置为YES)。
但这导致了一个奇怪的要求,即在所有受支持的可用区中,我必须拥有相同数量的公共和私有子网。我不明白为什么。否则我得到错误:
Not all subnets in VPC have the same AZs:
ap-southeast-2a,ap-southeast-2b vs ap-southeast-2a,ap-southeast-2a,ap-southeast-2a,ap-southeast-2a,ap-southeast-2b,ap-southeast-2b,ap-southeast-2b,ap-southeast-2b,ap-southeast-2c,ap-southeast-2c,ap-southeast-2c