Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使 Windows 实例休眠

当您使实例休眠时,我们会向操作系统发出信号来执行休眠 (suspend-to-disk)。休眠会将实例内存 (RAM) 中的内容保存到您的 Amazon EBS 根卷。我们保留实例的 Amazon EBS 根卷以及任何附加的 Amazon EBS 数据卷。然后,重新启动您的实例:

  • Amazon EBS 根卷会恢复为之前的状态

  • 会重新加载 RAM 内容

  • 并恢复实例上之前运行的进程

  • 之前附加的数据卷会重新附加,实例也会保留其实例 ID

只有当实例已启用休眠并且满足休眠先决条件,您才可以使该实例休眠。

如果实例或应用程序在引导和进行内存占用以开始发挥全部生产功能时所需的时间较长,您可以使用休眠来预热实例。要预热实例,您需要执行以下操作:

  1. 启动实例时启用休眠。

  2. 将其设置为所需的状态。

  3. 使实例休眠,并根据需要随时恢复到休眠前的状态。

当实例处于 stopped 状态时,我们不会收取已休眠实例的使用费用。当实例处于 stopping 状态时,此时 RAM 的内容会转移到 Amazon EBS 根卷,我们会收取实例使用费用。(这不同于您停止一个实例而不使其休眠。) 我们不会收取数据传输的使用费用。但是,我们会收取所有 Amazon EBS 卷的存储费用,包括存储 RAM 内容的费用。

如果您不再需要某个实例,可以随时终止它,包括当实例处于 stopped(已休眠)状态时。有关更多信息,请参阅终止您的实例

注意

有关在 Linux 实例上使用休眠的信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的使 Linux 实例休眠

休眠概述

下图显示了休眠过程的基本概述。


				休眠流概述

当您使正在运行的实例休眠时,将出现以下情况:

  • 启动休眠时,实例将进入 stopping 状态。我们会向操作系统发出信号来执行休眠 (suspend-to-disk)。休眠会冻结所有进程、将 RAM 中的内容保存到 Amazon EBS 根卷,然后执行常规关闭。

  • 关闭完成后,实例将进入 stopped 状态。

  • 所有 Amazon EBS 卷保持附加到实例,而且其数据将保留下来,包括已保存的 RAM 内容。

  • 大多数情况下,实例会在重新启动时迁移到新的底层主机。当您停止并重新启动实例时,也会发生此类情况。

  • 当您重新启动实例时,实例启动,操作系统从 Amazon EBS 根卷读取 RAM 内容,然后再对进程解除冻结以恢复其状态。

  • 实例在休眠和重启时会保留其私有 IPv4 地址以及任何 IPv6 地址。我们会释放公有 IPv4 地址并在您重启实例时为其分配新的 IPv4 地址。

  • 实例会保留其关联的弹性 IP 地址。您需要为与已休眠实例关联的所有弹性 IP 地址付费。借助 EC2-Classic,弹性 IP 地址会在您将实例休眠时取消与它的关联。有关更多信息,请参阅 EC2-Classic

  • 当您使 ClassicLink 实例休眠时,它会与所链接的 VPC 取消链接。您必须在重新启动之后将实例再次链接到 VPC。有关更多信息,请参阅ClassicLink

有关休眠与重启、停止和终止之间的区别,请参阅重启、停止、休眠与终止之间的区别

休眠先决条件

要使实例休眠,必须满足以下先决条件:

  • 支持的实例系列 - C3、C4、C5、M3、M4、M5、R3、R4 和 R5。

  • 实例 RAM 大小 - 必须最大 16 GB。

  • 实例大小 - 裸机实例不支持。

  • 支持的 AMI(必须是支持休眠的 HVM AMI):

    • Windows Server 2012 AMI 发布了 2019.09.11 版或更高版本。

    • Windows Server 2012 R2 AMI 发布了 2019.09.11 版或更高版本。

    • Windows Server 2016 AMI 发布了 2019.09.11 版或更高版本。

    • Windows Server 2019 AMI 发布了 2019.09.11 版或更高版本。

    有关 Linux 支持的 AMI 的信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的休眠先决条件

  • 根卷类型 - 必须是 Amazon EBS 卷,而不是实例存储卷。

  • Amazon EBS 根卷大小 - 必须足够大,以存储 RAM 内容并满足您的预期使用量,例如,操作系统或应用程序。如果您启用休眠,则启动时在根卷上分配空间以存储 RAM。

  • Amazon EBS 根卷加密 - 要使用休眠,必须加密根卷以确保在休眠时保护内存中的敏感内容。将 RAM 数据移动到 Amazon EBS 根卷时,它始终加密。根卷的加密在实例启动时实施。可以使用以下三个选项之一,以确保根卷是加密的 Amazon EBS 卷:

    • EBS“单步”加密:在单个 run-instances API 调用中,您可以从未加密的 AMI 中启动 EBS 支持的加密 EC2 实例,并且还可以同时启用休眠。有关更多信息,请参阅 将加密与 EBS 支持的 AMI 结合使用

    • EBS 默认加密:您可以启用 EBS 默认加密,以确保加密在您的 AWS 账户中创建的所有新的 EBS 卷。这样,您就可以为实例启用休眠,而无需在实例启动时指定加密意图。有关更多信息,请参阅 默认加密

    • 加密的 AMI:您可以使用加密的 AMI 启动实例以启用 EBS 加密。如果 AMI 没有加密的根快照,则可以将其复制到新的 AMI 并请求加密。有关更多信息,请参阅 在复制过程中将未加密映像加密复制 AMI

  • 在启动时启用休眠 - 您不能在现有实例(正在运行或已停止)上启用休眠。有关更多信息,请参阅为实例启用休眠

  • 购买选项 - 此功能仅面向按需实例和预留实例提供。它不适用于Spot 实例。有关更多信息,请参阅休眠中断的 Spot 实例

限制

  • 休眠不支持以下操作:

    • 更改已休眠实例的实例类型或大小

    • 从启用了休眠的实例创建快照或 AMI

    • 从已休眠的实例创建快照或 AMI

  • 您不能停止实例存储支持的实例,也不能使这些实例休眠*。

  • 您不能将具有超过 16 GB 的 RAM 的实例休眠。

  • 您不能使位于 Auto Scaling 组中或者由 Amazon ECS 使用的实例休眠。如果实例位于 Auto Scaling 组中并且您尝试使该实例休眠,则 Amazon EC2 Auto Scaling 服务会将已停止的实例标记为运行状况不佳,可能会终止它并启动替换实例。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的 Auto Scaling 实例的运行状况检查

  • 我们支持的实例持续休眠时间不超过 60 天。要保留实例超过 60 天,您必须重新启动已休眠的实例,停止该实例,然后重新启动它。

  • 我们不断通过升级和安全补丁更新平台,这可能会与现有已休眠的实例冲突。我们会通知您有关需要重新启动已休眠实例的关键更新,这样我们才会执行关闭或重启操作以应用必需的升级和安全补丁。

*对于启用休眠的 C3 和 R3 实例,请勿使用实例存储卷。

为实例启用休眠

要使实例休眠,必须先为其启用休眠。要启用休眠,您必须在启动实例时启用它。

重要

启动实例后,无法为实例启用或禁用休眠。

ConsoleAWS CLI适用于 Windows PowerShell 的 AWS 工具
Console

使用控制台启用休眠

  1. 按照使用启动实例向导启动实例过程操作。

  2. 选择一个 Amazon 系统映像 (AMI) 页面上,选择一个支持休眠的 AMI。有关支持的 AMI 的更多信息,请参阅休眠先决条件

  3. 选择一个实例类型页面上,选择一种支持的实例类型,然后选择下一步:配置实例详细信息。有关支持的实例类型的信息,请参阅休眠先决条件

  4. 配置实例详细信息页面上,对于 Stop - Hibernate Behavior (停止 - 休眠操作),选中 Enable hibernation as an additional stop behavior (启用休眠作为额外的停止操作) 复选框。

  5. 根据向导的提示继续。检查完核查实例启动页面上的选项后,选择启动。有关更多信息,请参阅使用启动实例向导启动实例

AWS CLI

使用 AWS CLI 启用休眠

使用 run-instances 命令启动实例。使用 --hibernation-options Configured=true 参数启用休眠。

aws ec2 run-instances --image-id ami-0abcdef1234567890 --instance-type m5.large --hibernation-options Configured=true --count 1 --key-name MyKeyPair
适用于 Windows PowerShell 的 AWS 工具

使用 适用于 Windows PowerShell 的 AWS 工具 启用休眠

使用 New-EC2Instance 命令启动实例。使用 -HibernationOptions_Configured $true 参数启用休眠。

New-EC2Instance -ImageId ami-0abcdef1234567890 -InstanceType m5.large -HibernationOptions_Configured $true -MinCount 1 -MaxCount 1 -KeyName MyKeyPair

 

ConsoleAWS CLI适用于 Windows PowerShell 的 AWS 工具
Console

查看是否已使用控制台为实例启用休眠

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 选择实例,在详细信息窗格中,检查 Stop - Hibernation behavior (停止 - 休眠操作)已启用 表明已为实例启用休眠。

AWS CLI

查看是否已使用 AWS CLI 为实例启用休眠

使用 describe-instances 命令并指定 --filters "Name=hibernation-options.configured,Values=true" 参数以筛选启用了休眠的实例。

aws ec2 describe-instances --filters "Name=hibernation-options.configured,Values=true"

输出中的以下字段指示实例已启用了休眠。

"HibernationOptions": { "Configured": true }
适用于 Windows PowerShell 的 AWS 工具

查看是否已使用 适用于 Windows PowerShell 的 AWS 工具 为实例启用休眠

使用 Get-EC2Instance 命令并指定 -Filter @{ Name="hibernation-options.configured"; Value="true"} 参数以筛选启用了休眠的实例。

Get-EC2Instance -Filter @{ Name="hibernation-options.configured"; Value="true"}

输出会列出已启用休眠的 EC2 实例。

使实例休眠

当实例已启用休眠并且满足休眠先决条件时,您才可以使该实例休眠。如果无法成功使实例休眠,则会进行正常关闭。

ConsoleAWS CLI适用于 Windows PowerShell 的 AWS 工具
Console

使用控制台使 Amazon EBS 支持的实例休眠

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 选择实例,然后依次选择操作实例状态Stop - Hibernate (停止 - 休眠)。如果 Stop - Hibernate (停止 - 休眠) 已禁用,则实例已经休眠或停止,或者无法休眠。有关更多信息,请参阅休眠先决条件

  4. 在确认对话框中,选择 Yes, Stop - Hibernate (是,停止 - 休眠)。使实例休眠可能需要几分钟时间。当实例正在进入休眠时,实例状态更改为正在停止;在实例已休眠的情况下,实力状态将更改为已停止

AWS CLI

使用 AWS CLI 使 Amazon EBS 支持的实例休眠

使用 stop-instances 命令并指定 --hibernate 参数。

aws ec2 stop-instances --instance-ids i-1234567890abcdef0 --hibernate
适用于 Windows PowerShell 的 AWS 工具

使用 适用于 Windows PowerShell 的 AWS 工具 使 Amazon EBS 支持的实例休眠

使用 Stop-EC2Instance 命令并指定 -Hibernate $true 参数。

Stop-EC2Instance -InstanceId i-1234567890abcdef0 -Hibernate $true

 

ConsoleAWS CLI适用于 Windows PowerShell 的 AWS 工具
Console

查看是否已使用控制台在实例上启动休眠

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 选择实例,在详细信息窗格中,检查状态转换原因消息。消息 Client.UserInitiatedHibernate: User initiated hibernate (Client.UserInitiatedHibernate: 用户启动了休眠) 指明实例上启动了休眠。

AWS CLI

查看是否已使用 AWS CLI 在实例上启动休眠

使用 describe-instances 命令并指定 state-reason-code 筛选条件以查看已启动了休眠的实例。

aws ec2 describe-instances --filters "Name=state-reason-code,Values=Client.UserInitiatedHibernate"

输出中的以下字段指明实例上启动了休眠。

"StateReason": { "Code": "Client.UserInitiatedHibernate" }
适用于 Windows PowerShell 的 AWS 工具

查看是否已使用 适用于 Windows PowerShell 的 AWS 工具 在实例上启动休眠

使用 Get-EC2Instance 命令并指定 state-reason-code 筛选条件以查看已启动休眠的实例。

Get-EC2Instance -Filter @{Name="state-reason-code";Value="Client.UserInitiatedHibernate"}

输出会列出已启动休眠的 EC2 实例。

重启已休眠的实例

按照启动已停止实例的相同方式,重启已休眠的实例。

ConsoleAWS CLI适用于 Windows PowerShell 的 AWS 工具
Console

使用控制台重启已休眠的实例

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 选择已休眠的实例,然后依次选择操作实例状态开始。实例进入 running 状态可能需要几分钟时间。在此期间,实例状态检查显示实例处于失败状态,直至实例已重新启动。

AWS CLI

使用 AWS CLI 重启已休眠的实例

使用 start-instances 命令。

aws ec2 start-instances --instance-ids i-1234567890abcdef0
适用于 Windows PowerShell 的 AWS 工具

使用 适用于 Windows PowerShell 的 AWS 工具 重启已休眠的实例

使用 Start-EC2Instance 命令。

Start-EC2Instance -InstanceId i-1234567890abcdef0

休眠故障排除

使用此信息帮助您诊断和修复在使实例休眠时可能遇到的问题。

在启动后无法立即休眠

如果您在实例启动之后过快地尝试使实例休眠,则会收到错误。

在启动之后,您必须等待大约分钟,然后才能休眠。

stopping 转变为 stopped 用时太长,内存状态在启动后无法恢复

如果正在进入休眠的实例从 stopping 状态转变为 stopped 状态用时过长,并且在启动之后内存状态未恢复,则这可能表明未正确配置休眠。

Windows Server 2016 及更高版本

检查 EC2 启动日志,查找与休眠相关的消息。要访问 EC2 启动日志,请连接到实例并在文本编辑器中打开 C:\ProgramData\Amazon\EC2-Windows\Launch\Log\Ec2Launch.log 文件。

注意

默认情况下,Windows 会隐藏 C:\ProgramData 下的文件和文件夹。要查看 EC2 启动目录和文件,必须在 Windows 资源管理器中输入路径,或者更改文件夹属性以显示隐藏的文件和文件夹。

查找休眠的日志行。如果日志行指示出现故障或者缺少日志行,则很有可能在启动时配置休眠失败。

例如,以下消息指示休眠配置失败:Message: Failed to enable hibernation.

如果日志行包含 HibernationEnabled: true,则已成功配置休眠。

Windows Server 2012 R2 和早期版本

检查 EC2 配置日志,查找与休眠相关的消息。要访问 EC2 配置日志,请连接到实例并在文本编辑器中打开 C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt 文件。从 SetHibernateOnSleep 中查找日志行。如果日志行指示出现故障或者缺少日志行,则很有可能在启动时配置休眠失败。

例如,以下消息指示实例根卷不够大:SetHibernateOnSleep: Failed to enable hibernation: Hibernation failed with the following error: There is not enough space on the disk.

如果日志行为 SetHibernateOnSleep: HibernationEnabled: true,则已成功配置休眠。

如果您未看到来自这些进程的任何日志,您的 AMI 可能不支持休眠。有关支持的 AMI 的信息,请参阅休眠先决条件

实例卡在 stopping 状态

如果您已使实例休眠并且实例卡在 stopping 状态,则可以强制停止它。有关更多信息,请参阅 排查实例的停止问题