我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
通过替换 Amazon EC2 实例的根卷快速恢复
这篇博客文章由物联网专家解决方案架构师 Katja-Maja Krödel 和游戏技术高级解决方案架构师 Benjamin Meyer 撰写。
客户使用
在这篇文章中,我们将向您展示如何使用此 Amazon EC2 功能设计您的架构以实现自动根卷替换。我们从自动创建快照开始,继续自动替换根卷,最后介绍在替换任务成功后如何保持环境清洁。
什么是根卷置换?
Amazon EC2 使客户能够替换实例的
- 新的 EBS 卷是根据先前拍摄的快照或启动状态创建的
- 重启实例
- 重新启动时,当前的根卷将被分离并连接新的根卷
之前的 EBS 根卷不会被删除,可以将其连接到实例,以便日后对该卷进行调查。如果替换为与启动状态不同的 EBS 状态,则使用当前根卷的快照。
示例用例是持续集成/持续部署 (CI/CD) 系统,该系统基于 EC2 实例构建以构建工件。在此系统中,您可以更改主机上安装的工具,并可能导致在同一台计算机上构建失败。为了防止任何不干净的构建,引入的架构用于通过将根卷替换为先前已知的良好状态来清理计算机。这对于 EC2 Mac 实例来说尤其有趣,因为它们的专用主机不会经过 清
概述
替换根卷的功能于 2021 年 4 月推出,并且刚刚
于 2023 年 2 月
3 日 扩展到适用于裸机 EC2 Mac 实例。这意味着包括 EC2 Mac 实例。如果您想将 EC2 实例重置为先前已知的良好状态,则可以
如果您使用快照创建新的根卷,则必须拍摄该卷的新快照才能稍后恢复到该状态。您不能使用其他卷的快照进行恢复,这就是该架构包括自动创建新根卷快照的原因。
架构分三个步骤构建:
- 自动为新 EBS 卷创建快照
- 自动更换根卷
- 为下一次根卷替换做好环境准备
下图说明了该解决方案的架构。
在接下来的部分中,我们将介绍这些概念来设计自动根卷替换任务。
自动为新 EBS 卷创建快照
上图说明了自动创建现有 EBS 卷快照的架构。在此架构中,我们专注于在创建新的 EBS 根卷时自动创建快照。
B ridge 用于在发出的 createV
为了自动对事件做出反应,您可以向 EventBridge 添加规则,每当创建新的 E
{
"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 中请求
以下是 Lambda 函数的任务摘要:
- 从 EventBridge 活动中提取 EBS ARN
- 确认它是 EC2 实例的根卷
-
调用 Amazon EC2 API创建快照 以创建根卷的快照并添加标签 replace-snapshot=true
然后,该标签用于清理环境并删除不需要的快照。
作为替代方案,你可以向 EventBridge 发送自己的赛事。这可用于自动创建快照,您可以将卷恢复到该快照。与其对
createVolume
事件做出反应,不如对该架构使用自定义方法。
自动更换根卷
上图说明了更换 EBS 根卷的过程。它从事件开始,该事件是通过
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=true 的快照 ,这些快照与现有 EBS 卷无关
结论
在这篇文章中,我们描述了一种通过根卷替换快速恢复 EC2 实例的架构。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。