связать пользовательский эластичный IP-адрес с NAT-шлюзом с помощью AWS CDK

#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