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

时间:2019-11-12 05:20:03

标签: amazon-web-services amazon-cloudformation aws-cdk

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

我相信我基本上可以使用它,但是我想从我的开发机器连接到RDS实例,以运行一些查询并检查一些事情。

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

在我生命中,我可以弄清楚最后一部分,如何使用CDK添加Internet网关。

我尝试过的最新脚本如下:

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上附加新的?

您能帮忙语法吗?

1 个答案:

答案 0 :(得分:1)

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

在使用CDK VPC构造时,默认情况下,无论何时创建公共子网,都会创建Internet网关。还为公共子网设置了默认路由。 因此,您应该从代码中删除addGatewayEndpoint(),这将添加您不需要的Gateway VPC Endpoint

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