You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS CDK中获取关联到公有子网的Elastic IP?

在AWS CDK中获取关联到公有子网的Elastic IP的可行方案

情况1:获取VPC自动创建的NAT网关关联的EIP

若你通过CDK创建的VPC包含自动配置的NAT网关(通常绑定到公有子网所属可用区),可直接通过VPC实例的nat_gateways属性获取NAT网关,进而提取关联的EIP:

from aws_cdk import aws_ec2 as ec2
from aws_cdk import CfnOutput

# 假设vpc是已创建的VPC实例
for nat_gateway in vpc.nat_gateways:
    eip = nat_gateway.eip
    if eip:
        # 输出EIP的引用(部署后会显示实际IP)
        CfnOutput(self, f"NatGatewayEIP-{nat_gateway.node.id}", value=eip.ref)

情况2:获取子网内自定义绑定的EIP

如果你手动创建EIP并关联到子网内的资源(如EC2实例、网络接口),需在创建EIP时直接保存引用——CDK是声明式框架,无法从子网反向查询未主动跟踪的资源:

from aws_cdk import aws_ec2 as ec2
from aws_cdk import CfnOutput

# 创建EIP
custom_eip = ec2.CfnEIP(self, "PublicSubnetEIP")

# 绑定到公有子网内的实例
public_instance = ec2.Instance(self, "PublicInstance",
    vpc=vpc,
    instance_type=ec2.InstanceType("t2.micro"),
    vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC)
)

# 关联EIP与实例
ec2.CfnEIPAssociation(self, "EIPAssociation",
    eip=custom_eip.ref,
    instance_id=public_instance.instance_id
)

# 输出自定义EIP
CfnOutput(self, "CustomPublicEIP", value=custom_eip.ref)

关于旧方法失效的说明

之前依赖node.children查询的方法失效,是因为CDK版本更新后内部节点结构发生变化——这类依赖框架内部实现的方法本身就不稳定,CDK官方不保证其向后兼容性,因此不推荐使用。

另外需要明确:map_public_ip_on_launch=True仅会让子网内启动的实例自动获得动态公有IP(不属于弹性IP范畴,不会出现在控制台的Elastic IP页面)。你在控制台看到的关联到子网的EIP,几乎都是属于NAT网关的弹性IP,或是手动绑定到子网内资源的EIP。

内容的提问来源于stack exchange,提问作者astrosmash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:02:06