CI 队列已空,但 Dedicated Host 还在账单里:只终止 Mac 实例,不代表主机已经释放。
最快处理方式:先留存产物与日志,再停止或终止实例;确认最低分配期和主机清理状态符合条件后,单独释放 Dedicated Host,最后核对主机状态与遗留存储。
准备关闭临时 AWS EC2 Mac 构建环境的 CI 工程师,可按场景逐项检查实例和主机。
负责构建产物、缓存与日志留存的开发团队成员,可先确认哪些数据必须带走。
评估后续 macOS CI 环境的运维负责人,可根据是否需要持续在线决定保留自管主机,还是改用按需环境。
先排空 CI 队列,确认没有任务仍依赖这台主机
先停调度,再动主机。确认队列里没有待运行任务,也没有正在构建、测试、签名或发布的作业。检查 Runner 或调度器是否仍把这台 Mac 标记为可接单;否则,清理过程中可能有新任务被分配进来。
我们建议把收尾分成 4 个动作,分别记录结果:
- 停止向目标主机派发新任务。
- 等待正在运行的流水线结束,确认队列和重试队列为空。
- 记录实例 ID、Host ID、CI 项目和当前负责人。
- 通知依赖构建产物或测试结果的团队,给出归档位置与最后一次构建标识。
这里有个容易混淆的地方:停止实例、终止实例、主机清理、释放 Dedicated Host 是不同状态变化。停止实例不是释放主机;实例终止也不自动等于 Dedicated Host 已释放。
终止前先划分要留存的数据与可重建缓存
不要先终止,再去找构建输出。终止是不可逆操作;实例存储上的数据会丢失,EBS 卷是否删除则取决于卷的 DeleteOnTermination 设置。我们会先把数据分成“必须保留”和“可重建”两类,再执行清理。关于实例终止后的资源变化,可参考 AWS 的 EC2 实例终止说明 和 终止后保留 EBS 卷的规则。
必须保留的内容通常包括构建包、测试报告、崩溃日志、诊断信息,以及后续复现或发布需要的签名相关资料。可重建内容可能包括依赖缓存、临时工作区和中间文件,但要先确认流水线能重新拉取依赖并成功生成。
清理前逐项看实际存储配置:
- 实例存储:AWS 文档说明,停止或终止实例都会使实例存储上的数据无法保留。需要保留的文件先复制到持久存储。
- EBS 根卷和数据卷:逐卷查看
DeleteOnTermination。设置为删除的卷会随实例终止被删除;保留的卷仍是独立资源,之后还要单独管理。 - 快照:如果使用 EBS 快照留档,确认快照进入可用状态再继续。快照创建是异步过程;对根卷创建快照时,AWS 建议先停止实例。流程细节见 EBS 快照创建说明。
⚠️ 停止实例不会替你完成数据归档。先核对构建目录、卷设置和备份结果,再决定停止还是终止;只看到实例状态变化,不等于数据已经安全留存。
按后续用途选择停止还是终止实例
还要在近期复用原环境,且需要保留实例配置:先停止。停止后实例仍保留,可在条件允许时重新启动;但对 EC2 Mac,停止操作会触发 Dedicated Host 的清理流程。清理期间主机可能处于 pending,Mac 实例暂时不能启动。
确定不再使用该实例:备份并核对卷后再终止。终止是不可逆的;根卷或数据卷是否被删除,依赖每个卷的终止设置。若团队还需要卷上的日志或构建环境,先复制、导出或创建快照。终止后也要检查是否留下仍在计费的 EBS 卷或快照。
AWS 说明,EC2 Mac 只能运行在 Dedicated Host 上,且 Mac 主机存在至少 24 小时的分配周期。停止或终止 Mac 实例会触发主机清理;清理期间主机状态与可用性会改变,具体完成时间取决于实例和主机流程。操作前核对 EC2 Mac 实例与 Dedicated Host 要求 及 停止或终止 EC2 Mac 的清理流程,不要用通用 EC2 的预期替代 Mac 专属流程。
清理完成后,再检查释放资格并释放主机
按这个顺序执行,可以避免把实例状态误当成主机状态:
- 确认 CI 已排空。队列无待运行作业,目标主机不再接收新任务。
- 归档数据。构建产物、测试结果、日志和签名相关资料已复制或按实际配置备份;需要的快照已确认完成。
- 停止或终止实例。根据是否复用环境决定操作,并确认该 Dedicated Host 上没有运行中的实例。
- 等待 Mac 主机清理流程结束。停止或终止后,主机可能暂时进入
pending。先观察主机状态;若仍处于处理中,不要把它记为清理完成。 - 核对释放条件。确认已满足 EC2 Mac 最低分配期,并查看主机是否仍关联实例、预留或其他阻止释放的状态。
- 发起释放并保存结果。控制台操作路径和 CLI 示例可参照 AWS Dedicated Host 释放步骤;CLI 返回的成功和失败项要逐一检查。
- 核验最终状态与账单。用控制台或 CLI 检查 Host ID 是否显示为
released,并单独检查 EBS 卷、快照及其他保留资源。
示例命令如下。将占位符替换为实际 Host ID,并在目标 Region 查询:
aws ec2 release-hosts --host-ids h-0123456789abcdef0
aws ec2 describe-hosts --host-ids h-0123456789abcdef0
release-hosts 返回中,Host ID 应出现在 Successful 列表;若出现在 Unsuccessful,先处理错误信息,不要重复假设资源已经释放。describe-hosts 用于查看主机状态,AWS 对 Dedicated Host 状态的说明见主机状态监控文档。
常见收尾疑问:按实例、主机和数据分别判断
实例终止后,Dedicated Host 还需要单独释放吗?
需要。实例终止与 Dedicated Host 释放是两项独立操作。确认主机无运行实例、最低分配期已满足且清理状态合适后,再执行释放;否则,不能只凭实例已终止判断主机费用已停止。
释放前先备份哪些构建数据?
先归档仍需交付或复现的构建包、测试报告、签名资料、CI 日志和故障诊断信息。缓存只有在确认可重新生成后才归入可丢弃内容。终止前检查 EBS 的 DeleteOnTermination,并将实例存储中的重要数据复制到实际配置的持久存储。
什么时候可以释放 EC2 Mac Dedicated Host?
EC2 Mac Dedicated Host 的最低分配周期为 24 小时。此外,主机上的实例必须已停止或终止;Mac 主机清理流程完成前,状态可能还在变化。若释放请求失败,按 AWS 返回的状态和错误信息继续核查,不要绕过条件。
如何验证主机确实释放成功?
查看控制台中的 Dedicated Host 状态,或运行 describe-hosts 查询对应 Host ID。以 released 状态和 release-hosts 的成功响应作为主机释放核验依据;然后检查账单和存储资源,避免把仍保留的卷、快照费用误认为主机费用。
用状态分支决定下一步,而不是凭实例页面判断
- 若实例还要复用:选择停止;等主机清理结束并确认状态后,再安排后续启动。
- 若实例确定不再使用:先完成数据留存,再终止;之后仍需单独核对 Dedicated Host 和遗留卷。
- 若主机分配期未满足或仍在清理:暂不执行释放;等状态变化后重新检查资格。
- 若释放命令返回失败:检查失败项、关联实例和主机当前状态,再根据官方流程处理。
- 若主机已显示
released:转查遗留 EBS 卷、快照和账单记录;主机释放不会自动删除所有其他资源。
清理验收时,用两张清单区分主机状态与残留成本
| 验收对象 | 可以结束操作的信号 | 仍需处理的情况 |
|---|---|---|
| CI 调度 | 新任务不再派发,队列已排空 | 待运行、重试中或仍有任务占用主机 |
| 实例 | 已按复用计划停止,或已完成备份后终止 | 仍在运行,或数据是否保留尚未确认 |
| Dedicated Host | 释放请求成功,状态为 released |
仍为 pending、仍有关联实例或释放请求失败 |
| 数据与存储 | 必要产物已归档,遗留卷和快照已有负责人 | 依赖实例存储的数据未导出,或保留卷无人管理 |
| 费用检查 | 主机状态及账单记录已分别核对 | 仅凭实例停止推断所有费用都已停止 |
AWS 将 EC2 Mac 的计费单位定义为 Dedicated Host;对按需 Dedicated Host,释放后不再按按需主机费率累计。但这不等于账户账单立刻归零:仍保留的 EBS 卷和快照可能继续产生存储费用。可对照 AWS 的 Dedicated Host 计费规则,并按账户实际账单记录确认,不要用主机状态代替账单核验。
| 后续 macOS CI 需求 | 自管 AWS EC2 Mac | 按需远程 Mac |
|---|---|---|
| 构建任务持续、要求长期在线 | 可保留现有主机,减少频繁收尾和重配 | 需确认所选租用周期能否匹配持续任务 |
| 任务间歇发生、需要临时环境 | 需主动管理主机分配、释放和遗留存储 | 可按需要了解远程 Mac 方案与租用周期 |
| 需要特定地域或接入安排 | 以 AWS 账户、Region 和实际资源配置为准 | 先查看可用地域信息,再核实是否符合工作流 |
| 需要物理接口或长期稳定重负载 | 评估实体设备或持续运行主机更合适 | 不应仅为短期方便替代有明确硬件依赖的方案 |
如果构建任务已经结束,AWS 自管方案仍要分别处理主机释放、遗留存储和账单核验;这几项不能靠终止实例一次完成。若后续只是间歇性需要 macOS 环境,可以按任务周期比较自管主机与 MergeMac 远程 Mac;若工作负载长期稳定运行,或必须依赖特定物理接口,则应优先评估持续自管或实体设备。选择下一套环境前,也可先通过支持与使用说明确认远程接入方式是否满足 CI 运维要求。
常见问题
终止 EC2 Mac 实例后,Dedicated Host 还要单独处理吗?
要。终止实例只处理实例生命周期,不代表 Dedicated Host 已释放。确认实例已停止或终止、主机达到 EC2 Mac 的最低分配周期且清理流程结束后,再单独执行释放,并检查主机状态是否为 released。未释放的按需主机仍可能继续产生主机费用。
释放主机前,哪些构建数据需要先备份?
先归档仍需交付或复现的构建包、测试结果、签名与发布所需资料、CI 日志和故障诊断信息。再检查缓存是否可由流水线重新生成。终止实例可能删除设置为 DeleteOnTermination 的 EBS 卷;实例存储数据也不能依靠停止或终止来保留,因此先按实际存储配置导出或创建快照。
EC2 Mac Dedicated Host 满足什么条件才可以释放?
至少先确认该 Dedicated Host 上没有运行中的实例,并核对 EC2 Mac 主机已满足 AWS 规定的最低分配周期;Mac 主机的最低分配期为 24 小时。停止或终止 Mac 实例后还会触发主机清理流程,主机可能暂时处于 pending。若释放被拒绝,按返回错误和当前主机状态处理,不要把实例已停止当作释放资格已满足。
怎样确认 AWS EC2 Dedicated Host 已经成功释放?
在 EC2 控制台的 Dedicated Hosts 页面查看主机状态,或使用 describe-hosts 查询对应 Host ID。释放成功的状态应为 released;release-hosts 的响应也应将该 ID 列入 Successful,而不是 Unsuccessful。之后核对账单中的主机用量,并另行检查保留的 EBS 卷、快照等资源,因为它们不会因主机释放而自动消失。
释放旧主机后,用 MergeMac 接续你的 Mac CI
MergeMac 提供独享物理 Mac mini,Base M4 每天 20.3 美元起,按天、周、月或季度租用。
