如何使用 AWS CDK 将 Internet 网关添加到 VPC?

How to add an Internet Gateway to a VPC using AWS CDK?

我正在尝试生成正确的 CDK 脚本 (TypeScript) 以创建一个具有 Lambda 的环境(通过 API 网关访问),该环境可以调用 RDS(Sql 服务器实例)。

我相信我大部分时间都在工作,但我想从我的开发机器连接到 RDS 实例以运行一些查询并检查一些事情。

我的 RDS 实例位于私有子网中,so I believe in order to connect to我需要添加一个互联网网关和安全组以允许在适当的端口上进行访问。

为了我的生活,我可以弄清楚最后一块,如何使用 CDK 添加互联网网关。

我试过的最新脚本如下:

const privateSubnectConfiguration = {
  cidrMask: 26,
  name: 'private-subnet',
  subnetType: SubnetType.PRIVATE,
};

const publicSubnectConfiguration = {
  cidrMask: 26,
  name: 'public-subnet',
  subnetType: SubnetType.PUBLIC,
};

const vpc = new Vpc(this, props.generateId('vpc'), {
  maxAzs: 2,
  subnetConfiguration: [privateSubnectConfiguration, publicSubnectConfiguration],
  natGateways: 1,
});

vpc.addGatewayEndpoint(props.generateId('internet-gateway'), {
  service: { name: "ig-service" }
})

然后 The Vpc Endpoint Service 'ig-service' does not exist (Service: AmazonEC2; Status Code: 400; Error Code: InvalidServiceName;

出错

我在文档中看到了对 CfnInternetGateway 的引用,但就是不知道如何将新的附加到我的 VPC?

你能帮忙修改一下语法吗?

首先,您不能直接访问私有子网中的数据库。您必须在 public 子网中部署代理实例,并转发访问数据库所需的端口。

使用 CDK VPC 构造时,每当您创建 public 子网时,默认情况下都会创建一个互联网网关。还为 public 子网设置了默认路由。 因此,您应该从代码中删除 addGatewayEndpoint(),这会添加您不需要的 Gateway VPC Endpoint

您也可以考虑使用 SubnetType.ISOLATED 创建一个没有 NAT GW 的私有子网,这在您的情况下可能是多余的。 SubnetType.PRIVATE 默认创建 NAT 网关。