amazon-web-services - 使用 AWS CDK 将自定义弹性 IP 关联到 NAT 网关

标签 amazon-web-services amazon-ec2 amazon-vpc aws-cdk elastic-ip

经过几个小时的努力,这是我的问题。我正在使用 CDK 以目前最简单的形式创建 VPC:

let vpc = new Vpc(this, "myVpc", {maxAzs: 1});

这为我提供了一个公共(public)子网和一个具有所有网关(互联网和 NAT)的私有(private)子网。我的 NAT 网关从 AWS 池中获得了一个公共(public) EIP。当然,当我销毁堆栈并重新创建它时,我将从 AWS 获得一个新的 EIP,但这个我不想要。

我想要的是: 在我的 CDK 项目之外创建弹性 IP(通过 CLI 或 AWS 控制台手动)并将其附加到我的 NAT GW,这样即使在破坏堆栈之后,我也可以将我的(外部)EIP 重新附加到"new"NAT GW .

因此,必须有一种方法让 AWS::EC2::NatGateway 由 VPC 自动创建,但使用适当的 EIP 关联手动创建,然后将其附加到 VPC/公共(public)子网。几乎与我可以显式定义子网并将它们与 VPC 相关联而不是 CDK 构造魔术的方式相同。

最佳答案

对于 Java CDK,您可以使用 natGatewayProvider(NatProvider.gateway(NatGatewayProps.builder().eipAllocationIds(Collections.singletonList("eipalloc-id")).build()))

使用手动配置的 EIP 为 NAT 创建 VPC 的完整示例:

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

关于amazon-web-services - 使用 AWS CDK 将自定义弹性 IP 关联到 NAT 网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63739237/

相关文章:

amazon-web-services - 设置 AWS EKS - 不知道配置的用户名和密码

amazon-web-services - 使用 AWS CloudFormation 更新 SNS 订阅的替代方案

amazon-web-services - 如何确定给定的 AWS 安全组与什么相关联?

linux - 为什么 AWS 实例没有显示正确的外部附加存储?

amazon-web-services - 在VPC中可以在AWS上创建的最小子网是多少?

amazon-web-services - 通过 AWS CDK 列出账户的所有现有 VPC

amazon-web-services - 无法删除包含错误字符的 Amazon S3 key

python - django 多个站点 wsgi 就足够了吗?

amazon-web-services - 仅在 VPC 内通过函数 URL 调用的 AWS Lambda 函数