#amazon-web-services #amazon-ec2 #amazon-vpc #aws-cdk #elastic-ip
#amazon-веб-сервисы #amazon-ec2 #amazon-vpc #aws-cdk #эластичный-ip
Вопрос:
После нескольких часов борьбы с этим, вот мой вопрос. Я использую CDK для создания VPC в самой простой форме на данный момент:
let vpc = new Vpc(this, "myVpc", {maxAzs: 1});
Это дает мне общедоступную подсеть и частную со всеми шлюзами (Интернет и NAT). Мой NAT-шлюз получил общедоступный EIP из пула AWS. Конечно, когда я уничтожу стек и создам его заново, я получу новый EIP от AWS, но ЭТОГО я не хочу.
Что я хочу: создать эластичный IP-адрес за пределами моего проекта CDK (вручную через CLI или консоль AWS) и прикрепить его к моему NAT GW, чтобы даже после уничтожения стека я мог повторно прикрепить свой (внешний) EIP для «нового» NAT GW.
Таким образом, должен быть способ не создавать AWS ::EC2::NatGateway автоматически с помощью VPC, а вручную с соответствующей ассоциацией EIP, а затем присоединять его к VPC / общедоступной подсети. Практически таким же образом я могу явно определять подсети и связывать их с VPC вместо магии построения CDK.
Ответ №1:
Вы можете обратиться сюдаhttps://github.com/aws/aws-cdk/issues/4067 в последнем сообщении.
Вы можете определить распределение EIP, а затем назначить его в Nat-шлюзе во время развертывания CDK.
Конечно, сначала вы должны вручную создать EIP.
Ответ №2:
Для Java CDK вы можете использовать natGatewayProvider(NatProvider.gateway(NatGatewayProps.builder().eipAllocationIds(Collections.singletonList("eipalloc-id")).build()))
Полный пример создания VPC с настроенным вручную EIP для NAT:
Vpc.Builder.create(this, "vpc")
.natGateways(1)
.natGatewayProvider(NatProvider.gateway(NatGatewayProps.builder().eipAllocationIds(Collections.singletonList("eipalloc-id")).build()))
.maxAzs(3)
.subnetConfiguration(
Arrays.asList(
SubnetConfiguration.builder()
.subnetType(SubnetType.PRIVATE)
.cidrMask(24)
.name("mc")
.build(),
SubnetConfiguration.builder()
.subnetType(SubnetType.PUBLIC)
.cidrMask(24)
.name("Ingress")
.build(),
SubnetConfiguration.builder()
.subnetType(SubnetType.ISOLATED)
.cidrMask(24)
.name("app")
.build()
)
)
.cidr("10.0.0.0/16").build();
Для других языков ознакомьтесь сhttps://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.Vpc.html#natgatewayprovider