从最新快照自动重启 EC2 实例

从最新快照自动重启 EC2 实例

我们有基于 EBS 的 EC2 实例,它们包含状态(不是关键状态,但它们有 ElasticSearch 索引、Redis 等)。

因此,我们的愿望是,如果它失败了,就有一个尽可能相似的新实例来替换它(这意味着使用该 EBS 根卷的最新快照备份)。

如果我们要手动执行此操作,则必须执行这个不太简单的过程:

  1. 根据 EBS 根卷的最新快照创建新卷;

  2. 启动一个新实例;

  3. 分离新的实例根卷;

  4. 将步骤 1 中创建的卷附加为新实例的根卷;

或者,我们认为可以基于最新快照创建一个映像 (AMI),然后直接使用该 AMI 启动 EC2 实例,在这种情况下,这将是一个两步解决方案。这个假设正确吗?

但是,即使我们这样做,据我们所知它也无法实现自动化,因为即使我们将负载均衡器与自动缩放组一起使用,也不能将启动模板设置为自动为新实例根卷选择“最新”快照。

考虑到以下要求,这种情况的最佳做法是什么自动启动一个与当前正在运行的实例尽可能相似的新实例如果失败了?

答案1

我有一个CloudFormation 模板以及一些 Lambda 表达式做你真正需要的事。当您创建 CloudFormation (CFN) 堆栈时,它会执行以下操作:

  1. 从基础 AMI(例如 Amazon Linux 2)创建 AutoScaling Group 堆栈。ASG 具有 min=1 / max=1,即单实例 ASG。
  2. 每天晚上,Lambda 都会将该实例快照放入新的 AMI 中。
  3. 相同的 Lambda 将 CloudFormation 堆栈 AMI ID 参数更新为最新快照。
  4. CFN 反过来使用最新的 AMI ID 更新 ASG 启动配置。
  5. 如果第二天 EC2 实例死机,它将从昨晚的快照重新启动,并且所有最后几天的更改都会保留。
  6. 另外,晚上还会运行另一个 Lambda 来清理旧的 AMI(例如 14 天后)。

查看standard-autohealing.yml来自我的 CloudFormation 模板GitHub 存储库

希望有帮助 :)

相关内容