java - CDK:部署私有组后,此 VPC 中没有“私有”子网组
问题描述
我已经在默认 vpc (java) 中部署了 rivate 子网:
var stack = new Stack(app, "system-resource", StackProps.builder().env(env).build());
final IVpc vpc = Vpc.fromLookup(stack, "default-vpc", VpcLookupOptions.builder().isDefault(true).build());
final AtomicInteger index = new AtomicInteger();
var zones = stack.getAvailabilityZones();
var subnets = zones.stream().map(z -> {
var subnet = new PrivateSubnet(stack, "priavte-subnet-" + index.getAndIncrement(), PrivateSubnetProps.builder()
.vpcId(vpc.getVpcId())
.cidrBlock(String.format(cidrTemplate, start.get()))
.availabilityZone(z)
.build());
start.addAndGet(increment);
return subnet;
}).collect(Collectors.toList());
然后我尝试使用 SubnetSelection:
final IVpc vpc = Vpc.fromLookup(this, "default-vpc", VpcLookupOptions.builder().isDefault(true).build());
final SubnetSelection vpcSubnets = SubnetSelection.builder().subnetType(SubnetType.PRIVATE).build();
并得到了例外:
An exception occured while executing the Java class. There are no 'Private' subnet groups in this VPC. Available types: Public
[错误] 错误:此 VPC 中没有“私有”子网组。可用类型:公共
它如何确定可供选择的 VPC?
为什么我之前创建的所有 PrivateSubnets 都被“营销”为公共并且无法选择?
解决方案
fromLookup 方法用于在您的账户中查找现有(已部署)VPC,当您在 CDK 代码中定义 VPC 时,您需要使用刚刚创建的对象。
见文档:
static fromLookup(scope, id, options)通过查询此堆栈部署到的 AWS 环境来导入现有 VPC。
此功能仅需要用于使用未在您的 CDK 应用程序中定义的 VPC。如果您希望在堆栈之间共享 VPC,则可以在堆栈之间传递 Vpc 对象并正常使用它。
推荐阅读
- tensorflow - Tensorflow - 如何训练模型以返回平面/地面上对象的(x,y)坐标
- user-interface - 如何将我的数据库从 pgadmin4 显示到 Eclipse 作为 GUI
- rust - 可能来自条件的未初始化变量
- jquery-countdown - jquery 倒计时显示以前设置的脚本
- quarkus - 如何在 panache 查询中生成/传递默认排序显式?
- angular - 如何使用 IntelliJ IDE 查看/查找应用程序中的角度组件数量?
- php - 从 blob“二进制”列下载非常大文件的内存有效方法
- django - 我如何在主页视图 www.mywebsite.com 中获得 pk
- gcc - Raspberry PI4 分段错误
- c++ - 为什么更新现有密钥的优先级会产生不一致的结果?