Typescript “专有网络”;fromLookup“;结果是所有私有子网,没有公共子网

Typescript “专有网络”;fromLookup“;结果是所有私有子网,没有公共子网,typescript,amazon-web-services,aws-cdk,Typescript,Amazon Web Services,Aws Cdk,使用CDKv1.1.0,我试图创建一个面向internet的应用程序负载平衡器 当我使用我的vpcId从lookup调用ec2.vpc.时,我得到了我的所有子网,但所有子网都被标记为PRIVATE子网。因此,我得到一个错误,即没有可用的公共子网 如果我尝试使用我的vpcId、availabilityZones和SubnetIDs从vpcattributes使用ec2.vpc.,我会得到错误“无法读取未定义的属性'selectSubnets' 我的子网路由表: 在子网中,我的RouteTable有

使用CDKv1.1.0,我试图创建一个面向internet的应用程序负载平衡器

当我使用我的
vpcId
从lookup调用
ec2.vpc.时,我得到了我的所有子网,但所有子网都被标记为
PRIVATE
子网。因此,我得到一个错误,即没有可用的公共子网

如果我尝试使用我的
vpcId
availabilityZones
SubnetIDs
从vpcattributes
使用
ec2.vpc.,我会得到错误“无法读取未定义的属性'selectSubnets'

我的子网路由表: 在子网中,我的RouteTable有两条路由:

  • 目标:10.140.0.0/16,目标:本地,激活状态
  • 目标:0.0.0.0/0,目标:internet网关,状态为活动
我不确定我的子网/VPC配置是否不正确,或者aws cdk是否存在错误


我已经手动尝试使用公共子网创建应用程序负载平衡器,并且能够成功创建is。所以我不能说我的子网配置不正确

导入和控制子网分类方式的最简单方法是使用
ec2.Vpc.fromVpcAttributes

//导入现有VPC
const vpc=ec2.vpc.fromVpcAttributes(这是“vpc”{
vpcId:'vpc-xxxxxx',
可用区:[“eu-west-1a”、“eu-west-1b”、“eu-west-1c”],
PublicSubnetID:['subnet-xxxxxx','subnet-xxxxxx','subnet-xxxxxx'],
私有子网:['subnet-xxxxxx','subnet-xxxxxx','subnet-xxxxxx'],
});

子网顺序和长度很重要,而且必须与可用区域相匹配。

花了我一段时间,但我找到了答案。 对于我的公用子网,需要启用属性:
Auto assign Public IPv4 address
(设置为YES)。
但这导致了一个奇怪的要求,我必须在所有受支持的AZ中拥有相同数量的公共和私有子网。我不明白为什么。否则我会得到错误:
并非VPC中的所有子网都具有相同的AZ:
ap-South-2a、ap-South-2b vs ap-South-2a、ap-South-2a、ap-South-2a、ap-South-2a、ap-South-2b、ap-South-2b、ap-South-2b、ap-South-2c、ap-South-2c、ap-South-2c

如果您也能提供VPC的子网描述,这将很有帮助(
aws ec2描述子网——过滤器“Name=vpcId,Values=${VPC_ID}”
-在粘贴到此处之前,您需要从结果中删除
subnetran
SubnetId
vpcId
OwnerId
)。我在描述中提到,使用FromVpCatributes时出现错误“无法读取未定义的属性'selectSubnets'。如果您的所有私有子网都在'eu-west-1a'中,而所有公共子网都在'eu-west-1b'中,代码会是什么样子?