我正在尝试使用 Auto Scaling Group 和用户数据启动脚本设置自动修复 EC2 实例。如果当前服务器出现无法访问的问题,则应终止该实例并由新实例代替。这很容易,但有一个要求却很难。
我需要替换服务器具有与之前的服务器相同的私有 IP。我的想法是为原始服务器分配一个辅助私有 IP(在 VPC 内),然后将其重新分配给新服务器。
我假设我可以使用在用户数据启动脚本期间安装的 aws-cli 来重新分配私有 IP,但我如何知道哪个服务器被替换并从中重新分配 IP(例如,如果将来服务器池更大并且有 2 个服务器恰好同时关闭)。
如果原始服务器被终止,我是否能够重新分配私有 IP?
答案1
经过大量的研究和反复试验后,我们最终做了以下事情:
- 我们将每种服务器类型放入其自己的自动缩放组中,并使用用户数据 shell 脚本来完全设置服务器。
- 我们利用标签来跟踪我们想要传输的服务器上的资源(私有 IP、弹性 IP、EBS 等)。
- 在启动替换实例时,我们的用户数据脚本会查询 AWS CLI 以获取具有可用资源标签的同类型终止实例。
- 我们使用这些标签中的数据和 AWS CLI 将这些资源重新分配给替换服务器,然后从旧服务器中删除标签。
- 由于这一切都在 VPC 中,私有 IP 仍然可供我们使用,因为它在实例终止时被释放回 VPC。
我们已经运行了几天了,它似乎运行得很好(尽管还有待观察,当一个实例实际上因为其他原因而失败,而不是我们直接终止它进行测试)。
答案2
AWS最近宣布“EC2 实例自动恢复”功能。据我所知,它的工作方式与自动扩展组基本相同,但会保留实例 IP 和卷等。
目前此功能仅适用于较新的实例,且仅适用于美国东部地区。