【问题标题】:How to import existing private subnets in a VPC in AWS CDK using TypeScript?如何使用 TypeScript 在 AWS CDK 中导入 VPC 中的现有私有子网?
【发布时间】:2021-11-26 07:19:20
【问题描述】:

我的 VPC 中的私有子网很少,我正在尝试使用 typescript 导入它们,如下所示:

    vpc1 = ec2.Vpc.fromLookup(this, 'myVpc',{isDefault: false, vpcId:vpcId });
   
   // Iterate the private subnets
    const selection = vpc1.selectSubnets({
      subnetType: ec2.SubnetType.PRIVATE
    });
   
   for (const subnet of selection.subnets) {

   }

我设法导入了 VPC。但是,未列出私有子网。

如何做到这一点?

【问题讨论】:

  • 尝试查看cdk.context.json,它应该已经提取了给定vpc的所有子网以及它们所属的类型!
  • 你能举个例子吗? @Balu Vyamajala
  • 我添加了一些细节作为答案,可能有助于调试问题

标签: typescript amazon-vpc aws-cdk private-subnet


【解决方案1】:

将在 CDK 代码之外创建的 vpc 导入到 cdk 时,它将构建一个带有 vpc 和子网信息的 cdk.context.json 文件,而 selectSubnets 只是从该上下文文件中构建的 vpc 对象中提取信息。一些文档here

vpc = ec2.Vpc.fromLookup(this, 'myVpc',{isDefault: false, vpcId:vpcId });

子网类型由 CDK 根据多个条件确定

  1. 标签aws-cdk:subnet-type 的存在,如果vpc 是由CDK 自己创建的。
  2. 基于 Internet 网关 (IGW)、Nat 网关或无网关的存在。例如:如果有路由到 IGW,那么它将被视为 PUBLIC。

我们可以在cdk.context文件中观察cdk派生出什么类型。

如果我们不喜欢默认的子网类型或者我们需要特定的子网,在我们有太多私有子网并且需要导入特定子网的情况下,我们总是可以像这样导入它们:

const subnet1 = ec2.Subnet.fromSubnetId(this, 'private-subnet-1', 'subnet-1234345');
const subnet2 = ec2.Subnet.fromSubnetId(this, 'private-subnet-2', 'subnet-456789');

【讨论】:

  • 好的,谢谢您的信息。但是,如何在不指定子网 ID 的情况下导入所有私有子网?
  • 您在进行 cdk 合成时是否在 cdk.context.json 中看到了您的私有子网,如果您看到类型是什么?
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 2023-03-23
  • 2018-11-26
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多