Как добавить интернет-шлюз в VPC с помощью AWS CDK?

Я пытаюсь создать правильные сценарии CDK (TypeScript) для создания среды с Lambda (доступ через API-шлюз), которая может вызывать RDS (экземпляр Sql Server).

Я считаю, что у меня это в основном работает, но я хотел подключиться к экземпляру RDS со своей машины разработки, чтобы выполнить несколько запросов и проверить несколько вещей.

Мой экземпляр RDS находится в частной подсети и поэтому я считаю, что для подключения к нему мне нужно добавить интернет-шлюз и группу безопасности, чтобы разрешить доступ к соответствующим портам.

На всю жизнь я могу придумать последний кусок, как добавить интернет-шлюз с помощью 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?

Не могли бы вы помочь с синтаксисом?


person shenku    schedule 12.11.2019    source источник


Ответы (1)


Во-первых, вы не можете напрямую получить доступ к базе данных в частной подсети. Вам необходимо развернуть экземпляр прокси в своей общедоступной подсети и перенаправить необходимые порты для доступа к вашей базе данных.

При использовании конструкции CDK VPC интернет-шлюз создается по умолчанию всякий раз, когда вы создаете общедоступную подсеть. Маршрут по умолчанию также настроен для общедоступной подсети. Поэтому вам следует удалить addGatewayEndpoint() из своего кода, который добавляет конечную точку шлюза VPC., которые вам не нужны.

Вы также можете рассмотреть возможность использования SubnetType.ISOLATED для создания частной подсети без NAT GW, что в вашем случае может быть избыточным. SubnetType.PRIVATE по умолчанию создает шлюз NAT.

person Vikyol    schedule 12.11.2019
comment
что вы подразумеваете под экземпляром прокси? Я думал, открыв группу безопасности, я смогу получить к ней доступ? - person shenku; 12.11.2019
comment
Ресурс недоступен из своего VPC, если он запущен в частной подсети. Таким образом, вы можете либо запустить свой экземпляр БД RDS в общедоступной подсети, либо проксировать запросы через экземпляр в общедоступной подсети (аналогично использованию хоста-бастиона для доступа к экземпляру в частной подсети). - person Vikyol; 12.11.2019