快速恢复 Amazon EC2 Mac 实例,通过更换根卷功能 计算博客
轻松恢复 Amazon EC2 Mac 实例的根卷
重点总结
Amazon EC2 提供了替换运行中的 Mac 实例根卷的新功能,使用户能够将根卷恢复到初始启动状态、特定快照或新的 Amazon 镜像AMI。这一功能的引入旨在快速重置实例,尤其是在持续集成和持续部署CI/CD环境中。此操作不需要停止或终止实例,同时保留本地数据、附加 EBS 卷和网络配置。Amazon Elastic Compute CloudAmazon EC2现在支持在运行中的 EC2 Mac 实例上替换根卷,使您能够将其根卷恢复到初始启动状态、特定快照,或新的 Amazon 镜像AMI。
自 2021 年以来,我们已提供按需和按使用付费的 EC2 Mac 实例访问,方式与 Intel、AMD 和 Graviton 基础实例相同。EC2 Mac 实例将您所熟知和喜好的 macOS 功能与 Amazon 虚拟私有云 (VPC) 网络安全、Amazon 按需块存储 (EBS) 可扩展存储、弹性负载均衡 (ELB) 建立构建队列、Amazon FSx 可扩展文件存储,以及 AWS 系统管理代理 (SSM Agent) 管理 macOS 环境等数十种 AWS 服务集成。
与每种 EC2 实例类型一样,AWS 负责保护所有提供的服务所运行的基础设施。为了确保 EC2 Mac 实例提供与其他 Nitro 基础 EC2 实例相同的安全性和数据隐私,Amazon EC2 会在您停止或终止实例后立即对底层专用主机执行净化工作流程。此净化过程会擦除内部 SSD、清除持久 NVRAM 变量,并将设备固件更新到最新版本,使您能够运行最新的 macOS AMIs。有关此过程的更多细节,请参见 文档。
pioneer加速器官方入口该净化过程确保每次 EC2 Mac 实例启动时都有一个经过净化的专用主机,并需要一些时间来完成。我们的客户分享了两个需要在更短时间内将实例恢复到先前状态的用例,或者无需启动净化工作流程。第一个用例是在对现有磁盘镜像进行修补,以便将操作系统或应用程序级更新带入您的设备,而不必手动修补每个实例。第二个用例是在持续集成与持续部署CI/CD期间,您需要在构建结束时将 Amazon EC2 Mac 实例恢复到定义的已知状态。
为了在不停止或终止实例的情况下重启 EC2 Mac 实例至初始状态,我们创建了将 Amazon EC2 Mac 实例的根卷替换为另一个 EBS 卷的功能。这个新的 EBS 卷可以根据新的 AMI、Amazon EBS 快照或启动期间的初始卷状态创建。
您只需将根卷与新卷交换,并在操作系统级别启动重启。本地数据、附加 EBS 卷、网络配置和 IAM 角色均会被保留。附加到实例的额外 EBS 卷、实例的 IP 地址、IAM 策略和安全组也会受到保护。
替换根卷的工作原理
要准备和启动 Amazon EBS 根卷的替换,您可以使用 AWS 管理控制台、AWS 命令行界面 (AWS CLI),或我们的 AWS SDK 之一。在这次演示中,我使用 AWS CLI 来展示您如何自动化整个过程。
首先,我分配一个专用主机,然后启动一个 EC2 Mac 实例,SSH 连接到该实例,安装最新版本的 Xcode。我使用开源的 xcodeinstall CLI 工具来下载和安装 Xcode。通常,您还会下载、安装并配置构建代理以及构建管道所需的其他构建工具或库。
准备好实例后,我 创建一个 Amazon 镜像 (AMI)。AMI 是磁盘映像,可用于启动其他相同的 EC2 Mac 实例。可以从任何具有对您的 AWS 账户进行 API 调用的凭证的机器上完成。下面,您可以看到我从笔记本的终端应用中输入的命令。
bash
根据实例名称标记查找实例 ID
aws ec2 describeinstances filters Name=tagNameValues=RRVDemo query Reservations[]Instances[]InstanceId output text
i0fb8ffd5dbfdd5384
bash
创建基于此实例的 AMI
aws ec2 createimage instanceid i0fb8ffd5dbfdd5384 name macOS133GoldAMI description macOS 132 with Xcode 1341{ ImageId ami0012e59ed047168e4}
AMI 创建过程需要几分钟的时间。
创建完 AMI 之后,我可以像往常一样使用我的实例。我可以在根卷上进行构建、测试和分发我的应用程序或进行其他任何更改。

当我想重置实例至我的 AMI 状态时,我启动替换根卷操作:
bash aws ec2 createreplacerootvolumetask instanceid i0fb8ffd5dbfdd5384 imageid ami0012e59ed047168e4{ReplaceRootVolumeTask {ReplaceRootVolumeTaskId replacevol07634c2a6cf2a1c61 InstanceId i0fb8ffd5dbfdd5384TaskState pending StartTime 20230526T124435Z Tags []ImageId ami0012e59ed047168e4 SnapshotId snap02be6b9c02d654c83 DeleteReplacedRootVolume false}}
根 Amazon EBS 卷被替换为从 AMI 创建的新卷并触发 OS 级别的重启。
我可以使用 DescribeReplaceRootVolumeTasks API 观察进度:
bash aws ec2 describereplacerootvolumetasks replacerootvolumetaskids replacevol07634c2a6cf2a1c61{ReplaceRootVolumeTasks [{ReplaceRootVolumeTaskId replacevol07634c2a6cf2a1c61 InstanceId i0fb8ffd5dbfdd5384TaskState succeeded StartTime 20230526T124435ZCompleteTime 20230526T124443Z Tags []ImageId ami0012e59ed047168e4 DeleteReplacedRootVolume false}]}
短时间后,实例再次可用,并且我可以通过 SSH 连接。
bash ssh ec2user@30086Warning Permanently added 30086 (ED25519) to the list of known hostsLast login Wed May 24 181342 2023 from 81000
) ( / Amazon EC2 macOS Ventura 1321
ec2user@ip1723158100
附加信息
在使用这个新功能之前,还有几点要注意:
默认情况下,旧的根卷会被保留。您可以传递 deletereplacedrootvolume 选项以自动删除它。在不再需要时,请务必删除旧卷及其相应的 Amazon EBS 快照,以避免产生额外费用。在替换过程中,实例将无法响应健康检查,因此如果放在自动扩展组中,可能会被标记为不健康。您可以编写 自定义健康检查 来更改此行为。在使用 AMI 替换根卷时,AMI 必须具有与实例相同的产品代码、计费信息、架构类型和虚拟化类型。在使用快照替换根卷时,必须使用与实例当前根卷相同血统的快照。新卷的大小是 AMI 的块设备映射和旧 Amazon EBS 根卷中较大的一个。任何非根 Amazon EBS 卷持续附着在实例上。最后,实例存储内部 SSD 驱动器的内容不受影响,所有其他元数据如实例的 IP 地址、ENI、IAM 策略等也不会被修改。价格与可用性
EC2 Mac 的替换根卷功能在所有支持 Amazon EC2 Mac 实例的 AWS 区域 中可用。使用此功能没有额外费用,您只需为所消耗的 Amazon EBS 快照和 AMI 的存储支付费用。
查看 API 或 AWS CLI 上的其他可用选项,今天就来 配置您的第一个根卷替换任务吧!