可以在不立即丢失 public ip 的情况下将弹性 IP 关联到实例吗?

Possible to associate Elastic IP to an instance without immediately losing public ip?

我有一个 windows EC2 实例 运行 一个生产网站,DNS 配置为让我的域名指向其 public IP。当前没有与该实例关联的弹性 IP (EIP)。我想开始使用弹性 IP 并让我的域名指向它而不是 public IP(如果我必须更改实例,它可以更改)。

阅读文档我发现这个说法令人不安:

When you associate an EIP with an instance, the instance's current public IP address is released to the EC2-Classic public IP address pool.

我担心的是:

如何在不通过 DNS 传播的情况下执行此操作?

您可以拥有两个相同的 EC2 实例。一个是 DNS 记录指向的旧 public IP。一个分配了 EIP。请求应该能够访问这两个实例中的任何一个而不会引起注意。您的应用程序必须能够水平扩展。然后更改 DNS 记录以指向 EIP。最终,当 DNS 更新时,对您域的所有请求最终都将转到具有 EIP 的 EC2 实例。那时您可以停止或终止旧的 EC2 实例。

其他可能性,如果您的应用程序不能水平扩展,如果它是一个网络应用程序,旧 EC2 实例中的网络服务器可以将请求重定向到 EIP。它会重定向到一个 IP 地址,但这是有可能的。

在预定切换时间之前 48 到 72 小时,将 DNS 条目的生存时间 (TTL) 减少到 300 秒(5 分钟)。

在您指定的切换时间:

  1. 附加弹性 IP 地址
  2. 更新您的 DNS 条目以指向您的弹性 IP 地址

这样做,您的有效 "downtime" 减少到 5 分钟。

如果您的 EC2 实例位于 VPC 中,您可以在 EC2 实例上添加第二个网络接口。您可以将您的弹性 IP 地址与第二个网络接口相关联。这样,您的 EC2 实例就可以响应两个 IP 地址。

说明

  1. 在与您的 EC2 实例相同的子网中创建一个新的网络接口。
  2. 为您的 VPC 分配一个新的弹性 IP(如果您还没有这样做的话)。
  3. 将弹性 IP 地址与您的新网络接口 (eni) 相关联。
  4. 将您的新网络接口附加到您的 EC2 实例。

暂时不要更改您的 DNS。

您可能需要 RDP/SSH 进入您的 EC2 实例以进行一些配置更改,以确保您的 EC2 实例正确响应新的 IP 地址。

修改本地计算机上的主机文件以测试通过新 IP 地址连接到您的网站。

如果可行,请执行 DNS 切换并恢复您的主机文件。

如果您不使用EC2-Classic实例,您可以自由地将Elastic IP移动到任何其他EC2实例而不会丢失EIP。

aws ec2 associate-address --region us-east-1 --allocation-id eipalloc-xxxxxxxxxxx --allow-reassociation --network-interface-id eni-xxxxxxxxxx

其中eipalloc-xxxxxxxxxxx是弹性IP的id,eni-xxxxx是目标EC2实例的id。

https://aws.amazon.com/premiumsupport/knowledge-center/ec2-recover-ip-address/

弹性 IP 地址

最好使用弹性 IP 地址。弹性 IP 地址分配给您的账户,而不是分配给实例。您可以根据需要将您的弹性 IP 地址与实例相关联。

如果您释放分配给您账户的弹性 IP 地址,您也许能够恢复它。有关详细信息,请参阅恢复弹性 IP 地址。

除 EC2-Classic 实例外的所有实例在停止时都保留其关联的弹性 IP 地址。 AWS 继续为与已停止实例关联的弹性 IP 地址计费。

注意:与 EC2-Classic 实例关联的弹性 IP 地址不可恢复。