AWS EC2 实例原生不支持“静态 IP"(即固定公网 IP),因为 EC2 的默认公网 IP 是动态分配的,实例停止(Stop)再启动后通常会改变。
但是,AWS 提供了 Elastic IP (弹性公网 IP) 来解决这个问题。Elastic IP 是一个固定的公网 IPv4 地址,可以永久绑定到你的实例、NAT 网关或网络接口上,即使实例停止和重新启动,该 IP 也不会改变。
以下是设置 Elastic IP 的具体步骤:
核心概念
- Elastic IP (EIP):一个独立的、固定的公网 IP 资源。
- 关联 (Associate):将 EIP 绑定到运行中的 EC2 实例。
- 解绑与重新分配:如果实例被释放,EIP 不会自动释放,需要手动操作以避免产生费用。
方法一:通过 AWS 控制台设置(图形化界面)
这是最常用的方式,适合单次配置。
1. 创建/分配一个新的 Elastic IP
如果你还没有可用的 EIP,需要先创建一个:
- 登录 AWS 管理控制台。
- 搜索并进入 EC2 服务。
- 在左侧导航栏中,找到 网络与安全 (Network & Security) -> 弹性 IP (Elastic IPs)。
- 点击顶部的 分配弹性 IP (Allocate Elastic IP address) 按钮。
- 保持默认设置(通常选择"Amazon 池”),点击 分配弹性 IP (Allocate Elastic IP address)。
- 此时你会看到一个新的 IP 地址,状态为 "Available"(可用)。
2. 将 Elastic IP 绑定到 EC2 实例
- 选中刚才创建的 Elastic IP(勾选复选框)。
- 点击顶部工具栏的 关联弹性 IP (Associate Elastic IP address)。
- 在弹出的窗口中:
- 资源类型 (Resource type):选择
EC2 实例。 - 实例 (Instance ID):从下拉菜单中选择你想要绑定固定 IP 的那台 EC2 实例。
- 私有 IP (Private IP):通常保持默认(实例的默认私有 IP)。
- 资源类型 (Resource type):选择
- 点击 关联 (Associate)。
完成! 现在该 EC2 实例的公网访问地址就是刚才设置的 Elastic IP 了。即使你执行 Stop 然后 Start 操作,这个 IP 依然保持不变。
方法二:通过 AWS CLI 设置(命令行)
如果你习惯使用命令行或需要自动化脚本,可以使用以下命令:
# 1. 分配一个新的 Elastic IP
aws ec2 allocate-address --domain vpc
# 输出示例:{ "AllocationId": "eipalloc-xxxxxxxx", "PublicIp": "xx.xx.xx.xx" }
# 记下 AllocationId 和 PublicIp
# 2. 将 EIP 关联到实例 (假设实例 ID 为 i-0123456789abcdef0)
aws ec2 associate-address
--allocation-id eipalloc-xxxxxxxx
--instance-id i-0123456789abcdef0
⚠️ 重要注意事项(关于计费与维护)
-
免费策略:
- 每个 AWS 账户在每个区域最多允许拥有 5 个 Elastic IP。
- 如果 EIP 已经关联到一个正在运行的 EC2 实例,则不收取费用。
- 如果 EIP 未关联(闲置)或者关联到了一个非 EC2 的资源(如 NAT Gateway),则会按小时收费。
- 如果 EIP 关联到了 EC2 实例,但该实例处于 Stopped(已停止) 状态,且没有绑定到任何实例,也会开始收费。
-
最佳实践:
- 不要随意创建大量未使用的 EIP,否则会产生不必要的账单。
- 当你不再需要某个 EIP 时,记得先解除关联 (Dissociate),然后再释放 (Release) 它。
- 如果实例被删除(Terminate),请务必检查是否还有残留的 EIP 未被释放。
总结
EC2 本身没有静态 IP,但通过申请 Elastic IP 并手动绑定,你可以实现完全相同的“静态公网 IP"效果。这是生产环境中确保服务器可访问性的标准做法。
云小栈