通过替换 Amazon EC2 实例的根卷快速恢复

作者: 希拉·布瑟 | 202

这篇博客文章由物联网专家解决方案架构师 Katja-Maja Krödel 和游戏技术高级解决方案架构师 Benjamin Meyer 撰写。

客户使用 亚马逊弹性计算云 (Amazon EC2) 实例来开发、部署和测试应用程序。为了最有效地使用这些实例,客户表示需要在几分钟甚至几秒钟内将其实例恢复到以前的状态。他们希望找到一种快速、自动化的方法来管理大规模设置实例。

替换 Amazon EC2 实例根卷的 功能 使客户能够将正在运行的 EC2 实例的根卷替换为特定的快照或其启动状态。这允许客户在不停止实例的情况下修复问题,同时保留实例存储数据、网络和 亚马逊云科技 身份和访问管理 (IAM) 配置。客户可以在实例存储数据完好无损的情况下恢复运营。这适用于当今所有的虚拟化 EC2 实例和裸机 EC2 Mac 实例。

在这篇文章中,我们将向您展示如何使用此 Amazon EC2 功能设计您的架构以实现自动根卷替换。我们从自动创建快照开始,继续自动替换根卷,最后介绍在替换任务成功后如何保持环境清洁。

什么是根卷置换?

Amazon EC2 使客户能够替换实例的 亚马逊弹性区块存储 (Amazon EBS) 根 卷,而无需停止该实例所连接的实例。Amazon EBS 根卷被替换为启动状态,或从 EBS 卷本身拍摄的任何快照。这允许修复问题,例如根卷损坏或客户机操作系统网络错误。更换实例的根卷包括以下步骤:

  • 新的 EBS 卷是根据先前拍摄的快照或启动状态创建的
  • 重启实例
  • 重新启动时,当前的根卷将被分离并连接新的根卷

之前的 EBS 根卷不会被删除,可以将其连接到实例,以便日后对该卷进行调查。如果替换为与启动状态不同的 EBS 状态,则使用当前根卷的快照。

示例用例是持续集成/持续部署 (CI/CD) 系统,该系统基于 EC2 实例构建以构建工件。在此系统中,您可以更改主机上安装的工具,并可能导致在同一台计算机上构建失败。为了防止任何不干净的构建,引入的架构用于通过将根卷替换为先前已知的良好状态来清理计算机。这对于 EC2 Mac 实例来说尤其有趣,因为它们的专用主机不会经过 清 理过程 ,而且与在同一主机上启动新的 EC2 Mac 实例相比,该实例的恢复速度更快。

概述

替换根卷的功能于 2021 年 4 月推出,并且刚刚 于 2023 年 2 月 3 日 扩展到适用于裸机 EC2 Mac 实例。这意味着包括 EC2 Mac 实例。如果您想将 EC2 实例重置为先前已知的良好状态,则可以 创建 EBS 卷 的快照 。要将根卷重置为其启动状态,无需快照。对于非根卷, 您可以使用这些快照创建新的 EBS 卷 ,然后将其连接到您的实例并分离它们。为了实现根卷更换过程的自动化,不仅要实现一次自动化,而且可以重复更换,我们向您介绍一种可以完全自动执行此过程的架构。

如果您使用快照创建新的根卷,则必须拍摄该卷的新快照才能稍后恢复到该状态。您不能使用其他卷的快照进行恢复,这就是该架构包括自动创建新根卷快照的原因。

架构分三个步骤构建:

  1. 自动为新 EBS 卷创建快照
  2. 自动更换根卷
  3. 为下一次根卷替换做好环境准备

下图说明了该解决方案的架构。

 Architecture of the automated creation of Root Volumes for Amazon EC2 Instances

在接下来的部分中,我们将介绍这些概念来设计自动根卷替换任务。

自动为新 EBS 卷创建快照

Architecture of the automated creation of Snapshots of new EBS Volumes.

上图说明了自动创建现有 EBS 卷快照的架构。在此架构中,我们专注于在创建新的 EBS 根卷时自动创建快照。

亚马逊 Event B ridge 用于在发出的 createV olume 事件上调用 AWS Lamb da 函数。 为了自动对事件做出反应,您可以向 EventBridge 添加规则,每当创建新的 E BS 卷时,该规则都会将事件转发到 亚马逊云科技 Lambda 函数。EventBridge 中的规则如下所示:

{
  "source": ["aws.ec2"],
  "detail-type": ["EBS Volume Notification"],
  "detail": {
    "event": ["createVolume"]
  }
}

创建 EBS 根卷时会发出一个示例事件,然后它将调用 Lambda 函数,如下所示:

{
   "version": "0",
   "id": "01234567-0123-0123-0123-012345678901",
   "detail-type": "EBS Volume Notification",
   "source": "aws.ec2",
   "account": "012345678901",
   "time": "yyyy-mm-ddThh:mm:ssZ",
   "region": "us-east-1",
   "resources": [
      "arn:aws:ec2:us-east-1:012345678901:volume/vol-01234567"
   ],
   "detail": {
      "result": "available",
      "cause": "",
      "event": "createVolume",
      "request-id": "01234567-0123-0123-0123-0123456789ab"
   }
}

该函数的代码使用接收到的事件中的资源 ARN,并 从 Amazon EC2 API 中请求 有关 EBS 卷的资源 详细信息 。由于该事件不包含根卷的信息,因此您必须使用 Amazon EC2 API 进行验证。

以下是 Lambda 函数的任务摘要:

  1. 从 EventBridge 活动中提取 EBS ARN
  2. 确认它是 EC2 实例的根卷
  3. 调用 Amazon EC2 API 创建快照 以创建根卷的快照并添加标签 replace- snapshot=true

然后,该标签用于清理环境并删除不需要的快照。

作为替代方案,你可以向 EventBridge 发送自己的赛事。这可用于自动创建快照,您可以将卷恢复到该快照。与其对 createVolume 事件做出反应,不如对该架构使用自定义方法。

自动更换根卷

Architecture of the automated creation of Snapshots of new EBS Volumes.

上图说明了更换 EBS 根卷的过程。它从事件开始,该事件是通过 亚马逊云科技 命令行接口 (亚马逊云科技 CLI)、 控制台或使用 API 创建的。这会导致根据快照创建新卷或使用初始启动状态。EC2 实例被重启,在此期间,旧的根卷被分离,新的卷作为根卷被连接。

要调用 create-replace-root-volume-task ,您可以使用以下 AWS CL I 命令调用 Amazon EC2 API:

aws ec2 create-replace-root-volume-task --instance-id <value> --snapshot <value> --tag-specifications ResourceType=string,Tags=[{Key=replaced-volume,Value=true}]

如果你想恢复到启动状态,请省略 --snapsh ot 参数:

aws ec2 create-replace-root-volume-task --instance-id <value> --tag-specifications ResourceType=string,Tags=[{Key=delete-volume,Value=true}]

运行此命令后,亚马逊云科技 将创建一个新的 EBS 卷,将标签添加到旧的 EBS repl aced-volume=true ,重启您的实例,并将新卷作为根卷连接到该实例。稍后使用该标签来检测旧的根卷并清理环境。

如果将其与前面解释的自动化相结合,则自动化将立即从新的 EBS 卷中拍摄快照。只能对当前 EBS 根卷的快照执行还原操作。因此,如果没有从新恢复的 EBS 卷中拍摄快照,则除了恢复到启动状态外,无法进行还原操作。

为下一次根卷替换做好环境准备

任务完成后,旧的根卷不会被删除。此外,以前的根卷的快照不能用于恢复当前的根卷。要清理环境,您可以调度 Lambda 函数来执行以下步骤:

  • 使用标签 delete-volume=true 删除已分离的 EBS 卷
  • 删除标签为 repl ace-snapshot=tr ue 的快照 ,这些快照与现有 EBS 卷无关

结论

在这篇文章中,我们描述了一种通过根卷替换快速恢复 EC2 实例的架构。 替换 Amazon EC2 实例 (现在包括裸机 EC2 Mac 实例)的根卷 的功能使客户能够将正在运行的 EC2 实例的根卷替换为特定的快照或其启动状态。客户可以在实例存储数据完好无损的情况下恢复运营。我们以自动和快速的方式将执行此操作的过程分为三个步骤:创建快照、运行替换任务和重置环境,为后续替换任务做好准备。如果您想了解有关此功能的更多信息,请参阅 更换根卷 的 公告 以及 该功能的文档


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。