在不停止 Amazon EC2 实例的情况下替换该实例的根卷 - Amazon Elastic Compute Cloud

在不停止 Amazon EC2 实例的情况下替换该实例的根卷

Amazon EC2 使您能够替换正在运行的实例的根 Amazon EBS 卷,同时保留以下内容:

  • 存储在实例存储卷上的数据 – 还原根卷后,实例存储卷仍附加到实例。

  • 存储在数据(非根)Amazon EBS 卷上的数据 – 在还原根卷后,非根 Amazon EBS 卷仍附加到实例。

  • 网络配置 – 所有网络接口均仍附加到实例,并保留其 IP 地址、标识符和附件 ID。当实例变为可用时,将刷新所有待处理的网络流量。此外,实例保留在同一个物理主机上,因此它会保留其公有和私有 IP 地址以及 DNS 名称。

  • IAM policy – 将保留和强制实施与实例相关联的 IAM 配置文件和策略(例如基于标签的策略)。

根卷替换的工作原理

当您替换实例的根卷时,将会创建根卷替换任务。原始根卷与实例分离,新根卷将在其位置附加到实例。将更新实例的块设备映射,以反映替换根卷的 ID。

替换实例的根卷时,必须指定新卷的快照源。以下是可能的选项。

此选项将当前根卷替换为一个卷,该卷基于创建根卷时使用的快照。

使用启动状态的注意事项

替换根卷的类型、大小和终止时删除属性与原始根卷相同。

此选项将当前根卷替换为一个卷,该卷基于您指定的快照。例如,您之前从该根卷创建的特定快照。如果您需要从根卷损坏或客户操作系统中的网络配置错误引起的问题中恢复,这将非常有用。

替换根卷的类型、大小和终止时删除属性与原始根卷相同。

使用快照的注意事项
  • 您只能使用与当前根卷属于同一系列的快照。

  • 您不能使用从根卷拍摄的快照创建的快照副本。

  • 成功替换根卷后,您仍可使用从原始根卷获取的快照来替换新的(替换)根卷。

此选项使用您指定的 AMI 替换当前根卷。如果需要执行操作系统和应用程序修补或升级,这将非常有用。AMI 必须具有与实例相同的产品代码、账单信息、架构类型和虚拟化类型。

如果实例启用了 ENA 或 sriov-net,则必须使用支持这些功能的 AMI。如果实例未启用 ENA 或 sriov-net,则可以选择不支持这些功能的 AMI,或者如果选择支持 ENA 或 sriov net 的 AMI,则可以自动添加支持。

如果实例启用了 NitroTPM,则必须使用启用了 NitroTPM 的 AMI。无论选择哪种 AMI,如果没有实例配置它,都不会启用 NitrotPM 支持。

您可以选择与实例的启动模式不同的 AMI,前提是该实例支持 AMI 的启动模式。如果实例不支持启动模式,则该请求将失败。如果实例支持启动模式,则新的启动模式将传播到该实例,并相应更新其 UEFI 数据。如果您手动修改了启动顺序或添加了私有 UEFI 安全启动密钥来加载私有内核模块,则在根卷替换期间,更改将丢失。

替换根卷获得与原始根卷相同的卷类型和终止时删除属性,并获取 AMI 根卷块设备映射的大小。

注意

AMI 根卷块设备映射的大小必须等于或大于原始根卷的大小。如果 AMI 根卷块设备映射的大小小于原始根卷的大小,则请求失败。

在根卷替换任务完成后,当您使用控制台 AWS CLI 或 AWS SDK 描述实例时,将反映以下新的和经过更新的信息:

  • 新 AMI ID

  • 根卷的新卷 ID

  • 经过更新的启动模式配置(如果由 AMI 更改)

  • 经过更新的 NitroTPM 配置(如果由 AMI 启用)

  • 经过更新的 ENA 配置(如果由 AMI 启用)

  • 经过更新的 sriov-net 配置(如果由 AMI 启用)

新 AMI ID 也反映在实例元数据中。

使用 AMI 的注意事项:
  • 如果您使用拥有多个块设备映射的 AMI,则仅使用该 AMI 的根卷。其他(非根)卷将被忽略。

  • 只有当您拥有 AMI 及其关联根卷快照的权限时,才能使用此功能。您不能对 AWS Marketplace AMI 使用此功能。

  • 仅当实例没有产品代码时,您才能使用没有产品代码的 AMI。

  • AMI 根卷块设备映射的大小必须等于或大于原始根卷的大小。如果 AMI 根卷块设备映射的大小小于原始根卷的大小,则请求失败。

  • 将自动更新实例的实例身份文档。

  • 如果实例支持 NitroTPM,则将重置该实例的 NitroTPM 数据,并将生成新密钥。

您可以选择在根卷替换过程完成后是否保留原始根卷。如果您在替换过程完成后选择删除原始根卷,则原始根卷将被自动删除,并变得不可恢复。如果您选择在该过程完成后保留原始根卷,则该卷仍会在您的账户中预调配;当您不再需要该卷时,必须手动将其删除。

根卷替换任务会经历以下几个状态:

  • pending:正在创建替换卷。

  • in-progress:正在分离原始卷,正在附加替换卷。

  • succeeded:已将替换卷成功附加到实例并且实例可用。

  • failing:替换任务即将失败。

  • failed:替换任务已失败,但根卷仍处于附加状态。

  • failing-detached:替换任务即将失败,并且实例可能未附加根卷。

  • failed-detached:替换任务已失败,并且实例未附加根卷。

如果根卷替换任务失败,则实例将重新启动,原始根卷仍附加到该实例。

注意事项

开始之前,请注意以下因素:

要求
  • 该实例必须处于 running 状态。

  • 在此过程中,实例将自动重新启动。在重启过程中,将清空内存(RAM)的内容。无需手动重启。

  • 如果根卷是实例存储卷,则无法替换它。仅支持具有 Amazon EBS 根卷的实例。

  • 您可以替换所有虚拟化实例类型和 EC2 Mac 裸机实例的根卷。不支持其他裸机实例类型。

  • 您可以使用与实例先前根卷属同谱系的任何快照。

  • 如果您的账户在当前区域启用了 Amazon EBS 默认加密密,无论指定快照的加密状态或指定 AMI 的根卷如何,由根卷替换任务创建的替换根卷始终处于加密状态。

加密结果

下表汇总了可能的加密结果。

原始根卷 指定的快照或 AMI 默认加密 替换根卷 用于替换根卷的加密密钥
将替换根卷还原到初始启动状态 已加密 不适用 不考虑 已加密 与原始根卷相同的 KMS 密钥
未加密 不适用 已禁用 未加密 不适用
未加密 不适用 已启用 已加密 账户的 Amazon EBS 加密的默认 KMS 密钥
从快照或 AMI 还原替换根卷 已加密 未加密 不考虑 已加密 与原始根卷相同的 KMS 密钥
已加密 已加密 不考虑 已加密 与原始根卷相同的 KMS 密钥
未加密 未加密 已禁用 未加密 不适用
未加密 未加密 已启用 已加密 账户的 Amazon EBS 加密的默认 KMS 密钥
未加密 已加密 不考虑 已加密 如果 AMI 或快照归账户所有,则使用 AMI 或快照的 KMS 密钥对替换卷进行加密。如果与账户共享 AMI 或快照,则使用该账户的 Amazon EBS 加密的默认 KMS 密钥加密替换卷。

替换根卷

当您替换实例的根卷时,将创建根卷替换任务。您可以使用根卷更换任务来监控替换过程的进度和结果。

Console
替换根卷
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 选择要替换其根卷的实例,然后选择 Actions(操作)Monitor and troubleshoot(监控和故障排除)Replace root volume(替换根卷)

    注意

    如果选定的实例不在 running 状态,替换根卷操作将被禁用。

  4. 替换根卷屏幕中,对于还原,选择以下选项之一:

    • 启动状态:从用于创建当前根卷的快照中还原替换根卷。

    • 快照:将替换根卷还原到您指定的快照。对于快照,选择要使用的快照。

    • 映像:使用您指定的 AMI 还原替换根卷。对于映像,选择要使用的 AMI。

  5. (可选)要删除要替换的根卷,请选择删除替换的根卷

  6. 选择创建替换任务

  7. 要监控替换任务,请选择实例的存储选项卡,然后展开最近的根卷替换任务

AWS CLI
将替换根卷还原到启动状态

使用 create-replace-root-volume-task 命令。对于 --instance-id,指定要为其替换根卷的实例的 ID。省略 --snapshot-id--image-id 参数。若要在替换原始根卷后将其删除,请包括 --delete-replaced-root-volume 并指定 true

$ aws ec2 create-replace-root-volume-task \ --instance-id i-1234567890abcdef0 \ --delete-replaced-root-volume
将替换根卷还原到特定快照

使用 create-replace-root-volume-task 命令。对于 --instance-id,指定要为其替换根卷的实例的 ID。对于 --snapshot-id,请定要使用的快照的 ID。若要在替换原始根卷后将其删除,请包括 --delete-replaced-root-volume 并指定 true

$ aws ec2 create-replace-root-volume-task \ --instance-id i-1234567890abcdef0 \ --snapshot-id snap-9876543210abcdef0 \ --delete-replaced-root-volume
使用 AMI 还原替换根卷

使用 create-replace-root-volume-task 命令。对于 --instance-id,指定要为其替换根卷的实例的 ID。对于 --image-id,指定要使用的 AMI 的 ID。若要在替换原始根卷后将其删除,请包括 --delete-replaced-root-volume 并指定 true

$ aws ec2 create-replace-root-volume-task \ --instance-id i-01234567890abcdef \ --image-id ami-09876543210abcdef \ --delete-replaced-root-volume
查看根卷替换任务的状态

使用 describe-replace-root-volume-tasks 命令并指定要查看的根卷替换任务的 ID。

$ aws ec2 describe-replace-root-volume-tasks \ --replace-root-volume-task-ids replacevol-1234567890abcdef0
{ "ReplaceRootVolumeTasks": [ { "ReplaceRootVolumeTaskId": "replacevol-1234567890abcdef0", "InstanceId": "i-1234567890abcdef0", "TaskState": "succeeded", "StartTime": "2020-11-06 13:09:54.0", "CompleteTime": "2020-11-06 13:10:14.0", "SnapshotId": "snap-01234567890abcdef", "DeleteReplacedRootVolume": "True" }] }

或者,请指定 instance-id 筛选条件以按实例筛选结果。

$ aws ec2 describe-replace-root-volume-tasks \ --filters Name=instance-id,Values=i-1234567890abcdef0
Tools for Windows PowerShell
将替换根卷还原到启动状态

使用 New-EC2ReplaceRootVolumeTask 命令。对于 -InstanceId,指定要为其替换根卷的实例的 ID。省略 -SnapshotId-ImageId 参数。若要在替换原始根卷后将其删除,请包括 -DeleteReplacedRootVolume 并指定 $true

PS C:\> New-EC2ReplaceRootVolumeTask -InstanceId i-1234567890abcdef0 -DeleteReplacedRootVolume $true
将替换根卷还原到特定快照

使用 New-EC2ReplaceRootVolumeTask 命令。对于 --InstanceId,指定要为其替换根卷的实例的 ID。对于 -SnapshotId,请定要使用的快照的 ID。若要在替换原始根卷后将其删除,请包括 -DeleteReplacedRootVolume 并指定 $true

PS C:\> New-EC2ReplaceRootVolumeTask -InstanceId i-1234567890abcdef0 -SnapshotId snap-9876543210abcdef0 -DeleteReplacedRootVolume $true
使用 AMI 还原替换根卷

使用 New-EC2ReplaceRootVolumeTask 命令。对于 -InstanceId,指定要为其替换根卷的实例的 ID。对于 -ImageId,指定要使用的 AMI 的 ID。若要在替换原始根卷后将其删除,请包括 -DeleteReplacedRootVolume 并指定 $true

PS C:\> New-EC2ReplaceRootVolumeTask -InstanceId i-1234567890abcdef0 -ImageId ami-09876543210abcdef -DeleteReplacedRootVolume $true
查看根卷替换任务的状态

使用 Get-EC2ReplaceRootVolumeTask 命令并指定要查看的根卷替换任务的 ID。

PS C:\> Get-EC2ReplaceRootVolumeTask -ReplaceRootVolumeTaskIds replacevol-1234567890abcdef0

或者,请指定 instance-id 筛选条件以按实例筛选结果。

PS C:\> Get-EC2ReplaceRootVolumeTask -Filters @{Name = 'instance-id'; Values = 'i-1234567890abcdef0'} | Format-Table