使用Auto Scaling组自动修复EC2实例?

我正在尝试使用Auto Scaling组和一个用户数据启动脚本来设置一个自动修复的EC2实例。 如果当前服务器存在无法访问的问题,那么该实例应该终止,并replace为新的服务器。 这很容易,但一个要求是困难的。

我需要更换服务器具有与以前的服务器相同的专用IP。 我的想法是分配给原始服务器的辅助私有IP(这是在一个VPC内),然后重新分配给新的服务器。

  1. 我假设我可以使用在用户数据启动脚本中安装的aws-cli重新分配私有IP,但是如何知道哪个服务器正在被replace,并从中重新分配IP(例如,如果在未来服务器池将会更大,同时还会发生两次下滑)。

  2. 如果原始服务器正在终止,我可以重新分配私有IP吗?

经过大量的研究和试验/错误,以下是我们最终做的事情:

  1. 我们使用用户数据shell脚本将每种服务器types放入其自己的Auto Scaling组中,以完全设置服务器。
  2. 我们利用标签来跟踪我们想要传输的服务器上的资源(私有IP,弹性IP,EBS等)。
  3. 启动替代实例时,我们的用户数据脚本将查询AWS CLI以获取具有可用资源标记的相同types的终止实例。
  4. 我们使用这些标签中的数据和AWS CLI将这些资源重新分配给replace服务器,然后从旧服务器中删除这些标签。
  5. 由于这些都属于VPC,所以私有IP仍然可用,因为在实例终止时它会被释放回VPC。

我们已经运行了几天,现在似乎工作得很好(但是,当一个实例实际上因为除了我们直接终止testing以外的其他事情而失败的时候,还有待观察)。

AWS 最近宣布 “EC2实例的自动恢复”function。 据我所知,这个工作基本上和自动扩展组一样,但保留了实例IP和卷等。

此时此function仅适用于较新的实例,且仅适用于美国东部地区。