

# Amazon EC2 实例状态更改
<a name="ec2-instance-lifecycle"></a>

一个 Amazon EC2 实例从启动一直到其终止，将经过不同的状态转换。

下图显示实例状态之间的转换。

![\[实例生命周期。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/instance_lifecycle.png)


您可在实例状态更改时收到通知。有关更多信息，请参阅 [Amazon EC2 实例的状态更改事件](monitoring-instance-state-changes.md)。

## 按实例状态计费
<a name="instance-billing-by-state"></a>

下表简要说明了每个实例状态，并说明实例使用是否已计费。一些AWS资源（如 Amazon EBS 卷和弹性 IP 地址）无论实例的状态如何，都将产生费用。有关更多信息，请参阅 *AWS Billing 用户指南*中的[避免意外费用](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/checklistforunwantedcharges.html)。


| 实例状态 | 描述 | 实例使用率计费 | 
| --- | --- | --- | 
|  `pending`  |  实例正准备进入 `running` 状态。实例在首次启动或者在处于 `stopped` 状态后开机时将进入 `pending` 状态。  |  不计费  | 
|  `running`  |  实例正在运行，并且做好了使用准备。  |  计费  | 
|  `stopping`  |  实例正准备进入停止状态。  |  不计费  如果您使实例休眠，则在实例处于 `stopping` 状态时会向您收费。   | 
|  `stopped`  |  实例已关闭，不能使用。可随时启动实例。  |  不计费  | 
|  `shutting-down`  |  实例正准备终止。  |  不计费  | 
|  `terminated`  |  实例已永久删除，无法启动。  |  不计费  应用于已终止实例的预留实例将按照其付款选项进行计费，直到其期限结束。有关更多信息，请参阅 [Amazon EC2 的预留实例概览](ec2-reserved-instances.md)   | 

## 待处理实例
<a name="instance-launch"></a>

当您启动实例时，实例进入 `pending` 状态。启动时指定的实例类型将决定您的实例的主机硬件。我们使用您在启动时指定的亚马逊机器映像（AMI）来启动实例。当实例准备就绪后，其进入 `running` 状态。您可以连接到正在运行的实例，然后像使用您面前的计算机一样来使用它。

只要您的实例转换为 `running` 状态，您就需要为实例运行的每一秒，至少一分钟付费，即使实例处于闲置状态并且您并未连接到实例也是如此。

## 已停止的实例
<a name="instance-stop-start"></a>

如果您的实例无法通过状态检查或未按预期运行应用程序，并且实例的根卷为 Amazon EBS 卷，则您可以先停止该实例再启动，以尝试解决该问题。

当您停止实例时，它会进入 `stopping` 状态，然后进入 `stopped` 状态。当实例 `stopped` 时，您无需支付实例的使用费或数据传输费。任何 Amazon EBS 卷的存储均会产生费用。当实例处于 `stopped` 状态时，您可以修改实例的某些属性，包括实例类型。

当您启动实例时，它会进入 `pending` 状态，然后实例会被移动到新的主机上（尽管在某些情况下，它仍将保留在当前主机上）。如果您停止并启动实例，将丢失附加在先前主机上的的实例存储卷上的所有数据。

您的实例会保留其私有 IPv4 地址，这意味着与该私有 IPv4 地址或网络接口关联的弹性 IP 地址仍然与您的实例关联。如果您的实例具有 IPv6 地址，则它将保留 IPv6 地址。

您每次将实例从 `stopped` 状态转换到 `running` 状态时，我们都按实例运行的每秒收费，您每次启动实例时至少一分钟。

有关停止和启动实例的更多详细信息，请参阅 [启动和停止 Amazon EC2 实例](Stop_Start.md)。

## 休眠实例
<a name="instance-hibernate"></a>

当您使实例休眠时，我们向操作系统发出信号来执行休眠 (suspend-to-disk)，这会将实例内存 (RAM) 中的内容保存到您的 Amazon EBS 根卷。我们保留实例的 Amazon EBS 根卷以及任何附加的 Amazon EBS 数据卷。当您启动实例时，Amazon EBS 根卷将还原到其之前的状态，并且 RAM 内容将重新加载。之前附加的数据卷会重新附加，实例也会保留其实例 ID。

当您将实例休眠时，它会进入 `stopping` 状态，然后进入 `stopped` 状态。当已休眠的实例处于 `stopped` 状态时，我们不会对其收取使用费，但是这些实例处于 `stopping` 状态时，这与您[停止实例](#instance-stop-start)而未将其休眠时不同，我们会对其进行收费。我们不收取数据传输费，但我们会对所有 Amazon EBS 卷的存储（包括 RAM 数据的存储）收费。

当您启动休眠实例时，它会进入 `pending` 状态，然后我们会将其移动到新的主机上（尽管在某些情况下，它仍将保留在当前主机上）。

您的实例会保留其私有 IPv4 地址，这意味着与该私有 IPv4 地址或网络接口关联的弹性 IP 地址仍然与您的实例关联。如果您的实例具有 IPv6 地址，则它将保留其 IPv6 地址。

有关更多信息，请参阅 [将您的 Amazon EC2 实例休眠](Hibernate.md)。

## 重启实例
<a name="instance-reboot"></a>

您可以使用 Amazon EC2 控制台、命令行工具和 Amazon EC2 API 来重启实例。我们建议您使用 Amazon EC2 来重启实例，而非在实例中运行操作系统重启命令。

重启实例相当于重启操作系统。实例位于同一主机上并保留其公有 DNS 名称、私有 IP 地址以及其实例存储卷上的所有数据。完成重启通常需要花费几分钟的时间，该时间具体取决于实例配置。

重启实例不会启动新的实例计费周期；将继续按秒计费，不再收取最低一分钟的费用。

有关更多信息，请参阅 [重启 Amazon EC2 实例](ec2-instance-reboot.md)。

## 终止实例
<a name="instance-termination"></a>

当您决定不再需要实例时，可以终止该实例。实例的状态一旦变为 `shutting-down` 或 `terminated`，就不再产生与该实例相关的费用。

如果您启用终止保护，则无法使用控制台、CLI 或 API 终止实例。

在您终止实例之后，短时间内仍可在控制台中看见该实例，然后该条目将自动被删除。您还可以使用 CLI 和 API 来描述已终止的实例。资源 (例如标签) 会逐步与终止的实例取消关联，因此过一小段时间后，它们可能在终止的实例上不再可见。您无法连接到或恢复已终止的实例。

Amazon EBS 支持的每个实例都支持 `InstanceInitiatedShutdownBehavior` 属性，该属性决定当从实例内部启动关闭命令时（例如，在 Linux 上使用 **shutdown** 命令），实例是停止还是终止。默认行为是停止实例。您可以在实例运行或停止时修改此属性的设置。

每个 Amazon EBS 卷都支持 `DeleteOnTermination` 属性，该属性控制当您终止卷所连接的实例时是删除还是保留该卷。默认为删除根卷并保留所有其他 EBS 卷。

有关更多信息，请参阅 [终止 Amazon EC2 实例](terminating-instances.md)。

## 实例状态之间的区别
<a name="lifecycle-differences"></a>

下表总结了重启、停止、休眠与终止实例之间的主要区别。


| 特征 | 重启 | 停止/启动 (仅限 Amazon EBS 支持的实例) | 休眠（仅限 Amazon EBS 支持的实例） | 终止 | 
| --- | --- | --- | --- | --- | 
|  主机  |  实例保持在同一主机上运行。  |  我们会将实例移动到新的主机上（尽管在某些情况下，它仍将保留在当前主机上）。  |  我们会将实例移动到新的主机上（尽管在某些情况下，它仍将保留在当前主机上）。  |  无  | 
|  私有 IPv4 地址  |  实例保留其私有 IPv4 地址。  |  实例保留其私有 IPv4 地址。  |  实例保留其私有 IPv4 地址。  |  无  | 
|  公有 IPv4 地址  |  实例保留其公有 IPv4 地址。  |  该实例将获取新的公有 IPv4 地址，除非其具有辅助网络接口或与弹性 IP 地址关联的辅助私有 IPv4 地址。  |  该实例将获取新的公有 IPv4 地址，除非其具有辅助网络接口或与弹性 IP 地址关联的辅助私有 IPv4 地址。  |  无  | 
|  弹性 IP 地址 (IPv4)  |  弹性 IP 地址仍旧与实例相关联  |  弹性 IP 地址仍旧与实例相关联  |  弹性 IP 地址仍旧与实例相关联  |  弹性 IP 地址不再与实例相关联  | 
|  IPv6 地址  |  实例保留其 IPv6 地址  |  实例保留其 IPv6 地址  |  实例保留其 IPv6 地址  |  无  | 
|  实例存储卷  |  数据保留  |  数据将擦除  |  数据将擦除  |  数据将擦除  | 
|  根卷  |  卷将保留  |  卷将保留  |  卷将保留  |  默认情况下将删除卷  | 
|  RAM（内存中的内容）  |  RAM 将擦除  |  RAM 将擦除  |  RAM 将保存到根卷上的某一文件  |  RAM 将擦除  | 
|  计费  |  实例计费小时不更改  |  实例的状态一旦变为 `stopping`，就不再产生与该实例相关的费用。实例每次从`stopped`转换为`running`时，我们都会启动新的实例计费周期，您每次启动实例时，最低收取一分钟费用。  |  当实例处于 `stopping` 状态时，将会产生费用；但实例处于 `stopped` 状态时，将会停止产生费用。实例每次从`stopped`转换为`running`时，我们都会启动新的实例计费周期，您每次启动实例时，最低收取一分钟费用。  |  实例的状态一旦变为 `shutting-down`，就不再产生与该实例相关的费用  | 

操作系统的关闭命令始终会终止具有实例存储根卷的实例。您可以控制操作系统关闭命令是停止还是终止具有 EBS 根卷的实例。有关更多信息，请参阅 [更改实例启动的关闭行为](Using_ChangingInstanceInitiatedShutdownBehavior.md)。

# 启动和停止 Amazon EC2 实例
<a name="Stop_Start"></a>

您可以停止和启动将 Amazon EBS 卷作为其根卷的实例。当您停止一个实例时，其会关闭。启动实例时，其通常会迁移到新的底层主机，并分配新的公有 IPv4 地址。

实例停止可以由用户启动（手动停止实例）或由 AWS 启动（当 AWS 检测到实例的底层主机发生不可修复的故障时，响应计划停止事件）。

对于由用户启动的停止，我们建议使用 Amazon EC2 控制台、CLI 或 API 而非在实例中运行操作系统停止命令。使用 Amazon EC2 时，如果实例未在几分钟内完全关闭，Amazon EC2 会执行强制关机。此外，AWS CloudTrail 还会创建一条关于实例停止时间的 API 记录。

本主题介绍如何执行由用户启动的停止 。有关 AWS 执行的停止的信息，请参阅 [管理计划停止或停用的 Amazon EC2 实例](schedevents_actions_retire.md)。

当您停止某个实例时，它不会被删除。当您决定不再需要实例时，可以终止该实例。有关更多信息，请参阅 [终止 Amazon EC2 实例](terminating-instances.md)。如果您想休眠某个实例以保存实例内存（RAM）中的内容，请参阅 [将您的 Amazon EC2 实例休眠](Hibernate.md)。有关实例生命周期操作之间的区别，请参阅 [实例状态之间的区别](ec2-instance-lifecycle.md#lifecycle-differences)。

**Topics**
+ [工作原理](how-ec2-instance-stop-start-works.md)
+ [停止实例的方法](instance-stop-methods.md)
+ [手动停止和启动](#starting-stopping-instances)
+ [自动停止和启动](#stop-start-ec2-instances-on-a-schedule)
+ [查找正在运行和已停止的实例](#find-running-and-stopped-instances-in-globalview)
+ [查找初始和最近的启动时间](#find-initial-launch-time)
+ [启用停止保护](ec2-stop-protection.md)

# 停止和启动 EC2 实例的工作原理
<a name="how-ec2-instance-stop-start-works"></a>

您停止 Amazon EC2 实例时，将在实例的操作系统（OS）级别注册更改，一些资源会丢失，而另一些资源会持续存在。启动实例时，将在实例级别注册更改。

**Topics**
+ [在停止实例时发生的情况](#what-happens-stop)
+ [在启动实例时发生的情况](#what-happens-start)
+ [测试应用程序对停止和启动的响应](#test-stop-start-instance)
+ [与实例停止和启动相关的成本](#ec2-stop-start-costs)

## 在停止实例时发生的情况
<a name="what-happens-stop"></a>

以下内容描述了使用默认停止方法停止实例时通常会发生的情况。请注意，某些方面可能会因您使用的[停止方法](instance-stop-methods.md)而异。

**在操作系统级别注册的更改**
+ API 请求会向访客发送按钮按下事件。
+ 该按钮按下事件致使各种系统服务停止。来自管理程序的 ACPI 关闭按钮按下事件触发操作系统正常关闭。
+ 启动 ACPI 关闭。
+ 当操作系统正常关闭进程退出时，实例即会关闭。没有可配置的操作系统关闭时间。
+ 如果实例操作系统未在几分钟内完全关闭，则会执行硬关闭。
+ 实例将停止运行。
+ 实例的状态将先更改为 `stopping`，然后更改为 `stopped`。
+ [自动扩缩] 如果您的实例在自动扩缩组中，当实例状态处于除 `running` 以外的其他 Amazon EC2 状态，或者状态检查的状态变为 `impaired`，则 Amazon EC2 Auto Scaling 会认为实例运行不正常并予以替换。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的[自动扩缩组中实例的运行状况检查](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-health-checks.html)。
+ [Windows 实例] 当您停止和启动 Windows 实例时，启动代理将对该实例执行任务，例如更改所有附加的 Amazon EBS 卷的驱动器号。有关这些默认值以及如何更改它们的更多信息，请参阅 [使用 EC2Launch v2 代理在 EC2 Windows 实例启动期间执行任务](ec2launch-v2.md)。

**资源丢失**
+ 存储在 RAM 中的数据。
+ 实例存储卷中存储的数据。
+ Amazon EC2 在启动或开始时自动分配给实例的公有 IPv4 地址。要保留永不更改的公有 IPv4 地址，您可以将[弹性 IP 地址](elastic-ip-addresses-eip.md)与您的实例关联。

**持续存在的资源**
+ 任何挂载的 Amazon EBS 根卷和数据卷。
+ 存储在 Amazon EBS 卷中的数据。
+ 任何挂载的[网络接口](using-eni.md)。

  网络接口包括以下也会持久保留的资源：
  + 私有 IPv4 地址。
  + IPv6 地址。
  + 与实例关联的弹性 IP 地址。请注意，当实例停止时，我们[向您收取相关弹性 IP 地址的费用](elastic-ip-addresses-eip.md#eip-pricing)。

下图说明了在 EC2 实例停止后，哪些资源会持久保留，哪些资源会丢失。该图分为三个部分：第一部分标记为**正在运行的 EC2 实例**，显示处于 `running` 状态的实例及其资源。第二部分标记为**已停止的 EC2 实例**，显示处于 `stopped` 状态且相关资源会持久保留的实例。第三部分标记为**丢失**，显示实例停止后会丢失的资源。

![\[当实例停止时，公有 IPv4 地址、RAM 和实例存储数据会丢失。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/stop-instance.png)


有关停止 Mac 实例可能会发生情况的更多信息，请参阅 [停止或终止 Amazon EC2 Mac 实例](mac-instance-stop.md)。

## 在启动实例时发生的情况
<a name="what-happens-start"></a>
+ 大多数情况下，实例会迁移到新的底层主机（尽管在某些情况下，例如在[专属主机](dedicated-hosts-understanding.md)配置中将实例分配到主机时，它仍会保留在当前主机上）。
+ 关联的 EBS 卷和网络接口将重新连接到实例。
+ 如果该实例配置为接收公有 IPv4 地址，则 Amazon EC2 会为该实例分配一个新的公有 IPv4 地址，除非其具有辅助网络接口或与弹性 IP 地址关联的辅助私有 IPv4 地址。
+ 如果您停止置放群组中的某个实例，然后重启该实例，则其仍将在该置放群组中运行。但是，如果没有足够容量可用于该实例，则启动将会失败。如果您在已有正在运行的实例的置放群组中启动实例时接收到容量错误，请在该置放群组中停止所有实例，然后再次启动它们。启动实例可能会将实例迁移至具有针对所有请求实例的容量的硬件。

## 测试应用程序对停止和启动的响应
<a name="test-stop-start-instance"></a>

您可以使用 AWS Fault Injection Service 测试您的实例停止和启动时您的应用程序是如何响应的。有关更多信息，请参阅[《AWS Fault Injection Service 用户指南》](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)。

## 与实例停止和启动相关的成本
<a name="ec2-stop-start-costs"></a>

以下费用与停止和启动实例有关。

**正在停止**：某个实例的状态一旦变为 `shutting-down` 或 `terminated`，该实例就不再产生费用。您无需支付已停止实例的使用费或数据传输费。存储 Amazon EBS 存储卷会产生费用。

**正在启动**：每次您启动已停止的实例时，我们便会收取最低一分钟的使用费用。一分钟之后，我们仅按您使用实例的秒数收费。例如，如果您运行一个实例 20 秒后停止实例，我们将按一分钟收取费用。如果您运行一个实例 3 分 40 秒，我们将收取 3 分 40 秒的使用费用。

# 停止实例的方法
<a name="instance-stop-methods"></a>

有四种方法可以执行用户启动的停止：默认停止、通过跳过操作系统关闭而停止、强制停止以及通过跳过操作系统关闭强制停止。下表比较了各种停止方法之间的关键差异：


| 停止方法 | 关键用途 | 使用案例 | CLI 命令 | 
| --- | --- | --- | --- | 
| 默认停止 | 正常关闭实例，尝试正常关闭操作系统。 | 典型实例停止。 |  <pre>aws ec2 stop-instances \<br />--instance-id i-1234567890abcdef0</pre>  | 
| 停止并跳过操作系统关闭 | 在停止实例时，可绕过操作系统正常关闭。 | 需要绕过正常关闭操作系统时。 | <pre>aws ec2 stop-instances \<br />--instance-id i-1234567890abcdef0 \<br />--skip-os-shutdown</pre> | 
| 强制停止 | 处理卡住的实例。先尝试默认停止；如果实例无法停止，则强制停止实例。 | 当实例卡住在stopping状态时。 | <pre>aws ec2 stop-instances \<br />--instance-id i-1234567890abcdef0 \<br />--force</pre> | 
| 强制停止并跳过操作系统关闭 | 停止实例时强制停止并绕过操作系统正常关闭。 | 需要强制停止并绕过正常关闭操作系统时。 | <pre>aws ec2 stop-instances \<br />--instance-id i-1234567890abcdef0 \<br />--force \<br />--skip-os-shutdown</pre> | 

有关如何使用每种方法的说明，请参阅以下内容：
+ [通过正常关闭操作系统来停止实例](Stop_Start.md#stop-instance-with-graceful-os-shutdown)
+ [停止实例并绕过操作系统正常关闭](Stop_Start.md#stop-instance-bypass-graceful-os-shutdown)
+ [强制停止实例](TroubleshootingInstancesStopping.md#force-stop-instance)

**Topics**
+ [默认停止](#ec2-instance-default-stop)
+ [停止并跳过操作系统关闭](#ec2-instance-stop-with-skip-os-shutdown)
+ [强制停止](#ec2-instance-force-stop)
+ [强制停止并跳过操作系统关闭](#ec2-instance-force-stop-with-skip-os-shutdown)

以下各节提供了有关四种不同的用户启动的停止方法的更多详细信息。

## 默认停止
<a name="ec2-instance-default-stop"></a>

默认的停止方法是停止实例的标准方法。当您发出 StopInstances 命令时，实例会从`running`状态转换到`stopping`状态，最后转换到`stopped`状态，如下图所示：

![\[默认停止流\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/stop-instance-flow-1.png)


**用途：**正常关闭实例，尝试正常关闭操作系统。

**数据影响：**保留 EBS 根卷和数据卷上的数据。实例存储卷上的数据丢失。

**何时使用：**典型停止的第一次尝试停止。

**注意**  
如果您已经尝试通过跳过操作系统关闭来停止，则在同一状态转换会话期间的后续默认停止尝试将不执行正常关闭操作系统。对于实例的当前会话，绕过操作系统的正常关闭是不可逆的。

## 停止并跳过操作系统关闭
<a name="ec2-instance-stop-with-skip-os-shutdown"></a>

当需要绕过操作系统正常关闭时，可以使用停止并跳过操作系统关闭方法来停止实例并绕过操作系统的正常关闭，如下图所示：

![\[停止并跳过操作系统关闭流\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/stop-instance-flow-3.png)


**警告**  
绕过操作系统正常关闭可能会导致数据丢失或损坏（例如，内存内容未刷新到磁盘或正在运行的 IO 丢失）或跳过关闭脚本。

**用途：**停止实例时绕过操作系统正常关闭。

**数据影响：**可能导致数据丢失或损坏。内存中的内容可能无法刷新到磁盘，正在运行的 IO 可能会丢失。可能会跳过关闭脚本。

**何时使用：**需要绕过操作系统正常关闭时。如果在执行操作系统正常关闭的默认停止时使用，则将绕过操作系统正常关闭。

**注意**  
对于实例的当前状态转换会话，绕过操作系统的正常关闭是不可逆的。在此会话期间的后续默认停止尝试不会尝试正常关闭操作系统。

## 强制停止
<a name="ec2-instance-force-stop"></a>

强制停止方法用于处理在`stopping`状态卡住的实例。实例通常会由于底层硬件问题（由[系统状态检查](monitoring-system-instance-status-check.md#system-status-checks)失败表示）而被卡住。

强制停止方法首先尝试默认停止。如果实例仍在`stopping`状态卡住，则`force`参数会强制关闭实例并将实例转换为`stopped`状态，如下图所示：

![\[强制停止流\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/stop-instance-flow-2.png)


**用途：**处理在`stopping`状态卡住的实例。先尝试默认停止。如果实例无法停止，则强制关闭该实例。

**数据影响：**先尝试默认停止，但如果继续强制停止，则可能会导致数据丢失或损坏。在极少数情况下，会导致停止后写入 EBS 卷或其他共享资源。

**何时使用：**当实例在默认停止后仍卡住时进行第二次停止尝试。有关更多信息，请参阅 [排查 Amazon EC2 实例的停止问题](TroubleshootingInstancesStopping.md)。

## 强制停止并跳过操作系统关闭
<a name="ec2-instance-force-stop-with-skip-os-shutdown"></a>

当需要强制停止并绕过操作系统正常关闭时，可以使用强制停止并跳过操作系统关闭方法使实例进入`stopped`状态，如下图所示：

![\[强制停止并跳过操作系统关闭流\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/stop-instance-flow-4.png)


**用途：**停止实例时强制停止并绕过操作系统正常关闭。

**数据影响：**跳过操作系统关闭可能导致数据丢失或损坏。内存中的内容可能无法刷新到磁盘，正在运行的 IO 可能会丢失。可能会跳过关闭脚本。如果继续强制停止，则可能会导致更多数据丢失或损坏。在极少数情况下，会导致停止后写入 EBS 卷或其他共享资源。

**何时使用：**当您想确保您的实例将停止并且想要绕过操作系统正常关闭时。如果在执行操作系统正常关闭的默认停止时使用，则将绕过操作系统正常关闭。

## 手动停止和启动实例
<a name="starting-stopping-instances"></a>

您可以停止并启动 Amazon EBS 支持的实例（具有 EBS 根卷的实例）。不能停止并启动具有实例存储根卷的实例。

使用默认方法停止实例时，会尝试正常关闭操作系统 (OS)。您可以绕过操作系统的正常关闭；但是，这可能会危及数据的完整性。

**警告**  
当您停止某个实例时，任何实例存储卷上的数据都将被擦除。在停止实例之前，请确认您是否已将所需数据从实例存储卷复制到持久性存储，例如 Amazon EBS 或 Amazon S3。

[Linux 实例] 从实例中使用操作系统 **halt** 命令不会启动关闭。如果您使用 **halt** 命令，则实例不会终止；相反，它会将 CPU 放入 `HLT`，从而暂停 CPU 操作。实例仍在运行中。

您可以使用操作系统 **shutdown** 或 **poweroff** 命令启动关机。当您使用操作系统命令时，实例会默认停止。您可以更改此行为。有关更多信息，请参阅 [更改实例启动的关闭行为](Using_ChangingInstanceInitiatedShutdownBehavior.md)。

**注意**  
如果您停止了由 Amazon EBS 支持的实例，而该实例“卡在”了 `stopping` 状态，则可以强制停止它。有关更多信息，请参阅 [排查 Amazon EC2 实例的停止问题](TroubleshootingInstancesStopping.md)。

**Topics**
+ [通过正常关闭操作系统来停止实例](#stop-instance-with-graceful-os-shutdown)
+ [停止实例并绕过操作系统正常关闭](#stop-instance-bypass-graceful-os-shutdown)
+ [启动实例](#start-ec2-instance)

### 通过正常关闭操作系统来停止实例
<a name="stop-instance-with-graceful-os-shutdown"></a>

您可以使用默认的停止方法停止实例，其中包括尝试正常关闭操作系统。有关更多信息，请参阅 [默认停止](instance-stop-methods.md#ec2-instance-default-stop)。

------
#### [ Console ]

**使用默认的停止方法停止实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在左侧导航窗格中，选择**实例**，然后选择实例。

1. 依次选择**实例状态**、**停止实例**。如果此选项处于禁用状态，则表示实例已停止，或者其根卷是实例存储卷。

1. 当系统提示您确认时，选择 **Stop**。停止实例可能需要几分钟时间。

------
#### [ AWS CLI ]

**使用默认的停止方法停止实例**  
使用 [stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) 命令。

```
aws ec2 stop-instances --instance-ids i-1234567890abcdef0
```

------
#### [ PowerShell ]

**使用默认的停止方法停止实例**  
使用 [Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) cmdlet 

```
Stop-EC2Instance -InstanceId i-1234567890abcdef0
```

------

### 停止实例并绕过操作系统正常关闭
<a name="stop-instance-bypass-graceful-os-shutdown"></a>

在停止实例时，您可以绕过操作系统正常关闭。有关更多信息，请参阅 [停止并跳过操作系统关闭](instance-stop-methods.md#ec2-instance-stop-with-skip-os-shutdown)。

**警告**  
绕过操作系统正常关闭可能会导致数据丢失或损坏（例如，内存内容未刷新到磁盘或正在运行的 IO 丢失）或跳过关闭脚本。

------
#### [ Console ]

**停止实例并绕过操作系统正常关闭**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances**，然后选择实例。

1. 依次选择**实例状态**、**停止实例**。

1. 在**跳过操作系统关闭**下，选中**跳过操作系统关闭**复选框。如果您在控制台中看不到此选项，则当前区域的控制台尚未提供此选项。但是，您可以使用 AWS CLI 或 SDK 访问此功能，也可以在控制台中尝试其他区域。

1. 选择**停止**。

------
#### [ AWS CLI ]

**停止实例并绕过操作系统正常关闭**  
结合使用 [stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) 命令和 `--skip-os-shutdown`。

```
aws ec2 stop-instances \
    --instance-ids i-1234567890abcdef0 \
    --skip-os-shutdown
```

------
#### [ PowerShell ]

**停止实例并绕过操作系统正常关闭**  
结合使用 [Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) cmdlet 和 `-SkipOsShutdown $true`。

```
Stop-EC2Instance `
    -InstanceId i-1234567890abcdef0 `
    -SkipOsShutdown $true
```

------

### 启动实例
<a name="start-ec2-instance"></a>

您可以启动已停止的实例。

------
#### [ Console ]

**启动实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在左侧导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后依次选择**实例状态**、**启动实例**。

   实例进入 `running` 状态可能需要几分钟时间。

------
#### [ AWS CLI ]

**启动实例**  
使用 [start-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) 命令。

```
aws ec2 start-instances --instance-ids i-1234567890abcdef0
```

------
#### [ PowerShell ]

**启动实例**  
使用 [Start-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) cmdlet。

```
Start-EC2Instance -InstanceId i-1234567890abcdef0
```

------

## 自动停止和启动您的实例
<a name="stop-start-ec2-instances-on-a-schedule"></a>

您可以使用以下服务自动停止和启动实例：

**AWS 上的实例调度器**  
您可以在 AWS 上使用实例调度器以自动开启和停止 EC2 实例。有关更多信息，请参阅[如何将实例调度器与 CloudFormation 一起使用来制定 EC2 实例的计划？](https://repost.aws/knowledge-center/stop-start-instance-scheduler) 请注意，[需要支付额外费用](https://docs.aws.amazon.com/solutions/latest/instance-scheduler-on-aws/cost.html)。

**AWS Lambda 和 Amazon EventBridge 规则**  
您可以使用 Lambda 和 EventBridge 规则按计划停止和开启您的实例。有关更多信息，请参阅[如何使用 Lambda，按固定间隔停止和启动 Amazon EC2 实例？](https://repost.aws/knowledge-center/start-stop-lambda-eventbridge)

**Amazon EC2 Auto Scaling**  
为确保您有正确数量的 Amazon EC2 实例来处理应用程序的负载，请创建自动扩缩组。Amazon EC2 Auto Scaling 确保您的应用程序始终具有处理流量需求的适当容量，并通过仅在需要时启动实例来节省成本。请注意，Amazon EC2 Auto Scaling 会终止而不是停止不需要的实例。要设置自动扩缩组，请参阅 [Amazon EC2 Auto Scaling 入门](https://docs.aws.amazon.com/autoscaling/ec2/userguide/get-started-with-ec2-auto-scaling.html)。

## 查找所有正在运行和已停止的实例
<a name="find-running-and-stopped-instances-in-globalview"></a>

您可以在 [Amazon EC2 全局视图](https://console.aws.amazon.com/ec2globalview/home)中的单个页面上找到所有 AWS 区域 中正在运行和已停止的所有实例。此功能对于清点资源和查找忘记的实例特别有用。有关如何使用全局视图的信息，请参阅 [使用 AWS 全局视图查看跨区域的资源](global-view.md)。

您也可以在您有实例的每个区域中运行命令或 cmdlet。

------
#### [ AWS CLI ]

**获取某个区域中的 EC2 实例数量**  
使用以下 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令统计当前区域中的实例数。您必须在您有实例的每个区域运行此命令。

```
aws ec2 describe-instances \
    --region us-east-2 \
    --query "length(Reservations[].Instances[])"
```

下面是示例输出。

```
27
```

**获取有关您在某个区域中的 EC2 实例的汇总信息**  
使用以下 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。您必须在您有实例的每个区域运行此命令。

```
aws ec2 describe-instances \
    --region us-east-2 \
    --query "Reservations[].Instances[].[InstanceId,InstanceType,PrivateIpAddress]" \
    --output table
```

下面是示例输出。

```
---------------------------------------------------------
|                   DescribeInstances                   |
+---------------------+---------------+-----------------+
|  i-0e3e777f4362f1bf7|  t2.micro     |  10.0.12.9      |
|  i-09453945dcf1529e9|  t2.micro     |  10.0.143.213   |
|  i-08fd74f3f1595fdbd|  m7i.4xlarge  |  10.0.1.103     |
+---------------------+---------------+-----------------+
```

------
#### [ PowerShell ]

**获取某个区域中的 EC2 实例数量**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance -Region us-east-2).Instances.Length
```

下面是示例输出。

```
27
```

**获取有关您在某个区域中的 EC2 实例的汇总信息**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。您必须在您有实例的每个区域运行此命令。

```
(Get-EC2Instance).Instances | Select InstanceId, InstanceType, PrivateIpAddress
```

下面是示例输出。

```
InstanceId          InstanceType PrivateIpAddress
----------          ------------ ----------------
i-0e3e777f4362f1bf7 t2.micro     10.0.12.9
i-09453945dcf1529e9 t2.micro     10.0.143.213
i-08fd74f3f1595fdbd m7i.4xlarge  10.0.1.103
```

------

## 查找初始和最近的启动时间
<a name="find-initial-launch-time"></a>

当您描述一个实例时，该实例的启动时间是其最近的启动时间。在您停止并启动一个实例后，启动时间将反映新实例的启动时间。要查找一个实例的初始启动时间（即使在停止和启动该实例之后），请查看主网络接口连接到该实例的时间。

------
#### [ Console ]

**查找最近启动时间**  
选择该实例，然后在**详细信息**选项卡上的**实例详细信息**下查找**启动时间**。

**查找初始启动时间**  
选择该实例，然后在**联网**选项卡的**网络接口**下查找主网络接口（设备索引为 0）。

------
#### [ AWS CLI ]

**查找初始和最近启动时间**  
使用以下 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令，显示指定实例的初始启动时间和最近启动时间。

```
aws ec2 describe-instances \
    --instance-id i-1234567890abcdef0 \
    --query 'Reservations[].Instances[].{InstanceID:InstanceId,InitialLaunch:NetworkInterfaces[0].Attachment.AttachTime,LastLaunch:LaunchTime}'
```

下面是示例输出。

```
[
    {
        "InstanceID": "i-1234567890abcdef0",
        "InitialLaunch": "2024-04-19T00:47:08+00:00",
        "LastLaunch": "2024-05-27T06:24:06+00:00"
    }
]
```

------
#### [ PowerShell ]

**查找最近启动时间**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance -InstanceId i-1234567890abcdef0).Instances.LaunchTime
```

下面是示例输出。

```
Monday, May 27, 2024 6:24:06 AM
```

**查找初始启动时间**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance -InstanceId i-1234567890abcdef0).Instances.NetworkInterfaces.Attachment.AttachTime
```

下面是示例输出。

```
Friday, April 19, 2024 12:47:08 AM
```

------

# 为 EC2 实例启用停止保护
<a name="ec2-stop-protection"></a>

要防止实例意外停止，可以为实例启用停止保护。停止保护还可以保护您的实例免遭意外终止。

Amazon EC2 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html) API 的 `DisableApiStop` 属性可控制是否可以使用 Amazon EC2 控制台、AWS CLI，或 Amazon EC2 API 停止实例。您可以在实例启动、运行或已停止时设置该属性值。

**注意事项**
+ 启用停止保护并不能防止通过使用操作系统命令（如 **shutdown**、**poweroff**）从实例启动关闭，来意外停止实例。
+ 在[计划事件](monitoring-instances-status-check_sched.md)停止实例时，启用停止保护不会阻止 AWS 停止实例。
+ 启用停止保护不会阻止 Amazon EC2 Auto Scaling 在实例运行状况不佳或在横向缩减事件期间终止实例。您可以通过使用[实例横向缩减保护](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html)控制自动扩缩组在横向缩减时是否可以终止特定实例。
+ 停止保护不仅可防止实例意外停止，还可以防止使用控制台、AWS CLI 或 API 时意外终止实例。但是，它不会自动设置 `DisableApiTermination` 属性。请注意，当 `DisableApiStop` 属性设置为 `false` 时，`DisableApiTermination` 属性设置确定是否可以使用控制台、AWS CLI 或 API 终止实例。有关更多信息，请参阅 [终止 Amazon EC2 实例](terminating-instances.md)。
+ 无法针对具有实例存储根卷的实例启用停止保护。
+ 无法针对竞价型实例启用停止保护。
+ 启用或禁用停止保护时，Amazon EC2 API 遵循最终一致性模型。这意味着运行设置停止保护属性的命令的结果可能不会立即对您运行的所有后续命令可见。有关更多信息，请参阅《Amazon EC2 开发人员指南》**中的[最终一致性](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html)。

**Topics**
+ [在实例启动时启用停止保护](#enable-stop-protection-at-launch)
+ [为正在运行或已停止的实例启用停止保护](#enable-stop-protection-on-running-or-stopped-instance)
+ [为正在运行或已停止的实例禁用停止保护](#disable-stop-protection-on-running-or-stopped-instance)

## 在实例启动时启用停止保护
<a name="enable-stop-protection-at-launch"></a>

您可以在启动实例时为实例启用停止保护。

------
#### [ Console ]

**在实例启动时为实例启用停止保护**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在控制面板上，选择**启动实例**。

1. 在[新启动实例向导](ec2-launch-instance-wizard.md)中配置您的实例。

1. 在向导中，通过在**高级详细信息**下为**停止保护**选择**启用**来启用停止保护。

------
#### [ AWS CLI ]

**在实例启动时为实例启用停止保护**  
使用 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令启动实例。添加以下参数。

```
--disable-api-stop
```

------
#### [ PowerShell ]

**在实例启动时为实例启用停止保护**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 启动实例。添加以下参数。

```
-DisableApiStop $true
```

------

## 为正在运行或已停止的实例启用停止保护
<a name="enable-stop-protection-on-running-or-stopped-instance"></a>

您可以在实例正在运行或已停止时启用停止保护。

------
#### [ Console ]

**为实例启用停止保护**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在左侧导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后依次选择**操作**>**实例设置**>**更改停止保护**。

1. 选择**启用**复选框，然后选择**保存**。

------
#### [ AWS CLI ]

**为实例启用停止保护**  
使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --disable-api-stop
```

------
#### [ PowerShell ]

**为实例启用停止保护**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

```
Edit-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -DisableApiStop $true
```

------

## 为正在运行或已停止的实例禁用停止保护
<a name="disable-stop-protection-on-running-or-stopped-instance"></a>

您可以使用以下方法之一为正在运行或已停止的实例禁用停止保护。

------
#### [ Console ]

**为正在运行或已停止的实例禁用停止保护**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在左侧导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后依次选择 **Actions**（操作）、**Instance Settings**（实例设置）、**Change Stop Protection（更改停止保护）**。

1. 清除**启用**复选框，然后选择**保存**。

------
#### [ AWS CLI ]

**为正在运行或已停止的实例禁用停止保护**  
使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --no-disable-api-stop
```

------
#### [ PowerShell ]

**为实例禁用停止保护**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

```
Edit-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -DisableApiStop $false
```

------

# 将您的 Amazon EC2 实例休眠
<a name="Hibernate"></a>

当您使实例休眠时，Amazon EC2 会向操作系统发出信号来执行休眠 (suspend-to-disk)。休眠会将实例内存 (RAM) 中的内容保存到您的 Amazon Elastic Block Store (Amazon EBS) 根卷。Amazon EC2 保存实例的 EBS 根卷以及任何附加的 EBS 数据卷。当您的实例启动时：
+ EBS 根卷会恢复为之前的状态
+ 会重新加载 RAM 内容
+ 并恢复实例上之前运行的进程
+ 之前附加的数据卷会重新附加，实例也会保留其实例 ID

只有当实例[已启用休眠](enabling-hibernation.md)并且满足[休眠先决条件](hibernating-prerequisites.md)，您才可以使该实例休眠。

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

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

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

1. 使实例休眠，并在需要时随时恢复到所需状态。

您无需为处于 `stopped` 状态的休眠实例支付实例使用费用，也无需为将 RAM 内容转移到 EBS 根卷的数据传输付费。您需要支付所有 EBS 卷的存储费用，包括 RAM 内容的存储费用。

如果您不再需要某个实例，可以随时终止它，包括当实例处于 `stopped`（已休眠）状态时。有关更多信息，请参阅 [终止 Amazon EC2 实例](terminating-instances.md)。

**Topics**
+ [工作原理](instance-hibernate-overview.md)
+ [先决条件](hibernating-prerequisites.md)
+ [配置 Linux AMI 以支持休眠](hibernation-enabled-AMI.md)
+ [启用实例休眠](enabling-hibernation.md)
+ [在实例上禁用 KASLR（仅限 Ubuntu）](hibernation-disable-kaslr.md)
+ [休眠实例](hibernating-instances.md)
+ [启动已休眠的实例](hibernating-resuming.md)
+ [故障排除](troubleshoot-instance-hibernate.md)

# Amazon EC2 实例休眠的工作原理
<a name="instance-hibernate-overview"></a>

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

![\[休眠流概述。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/hibernation-flow.png)


## 将实例休眠时发生的情况
<a name="how-instance-hibernation-works"></a>

当您使实例休眠时，将出现以下情况：
+ 该实例移至 `stopping` 状态。Amazon EC2 会向操作系统发出信号来执行休眠 (suspend-to-disk)。休眠会冻结所有进程、将 RAM 中的内容保存到 EBS 根卷，然后执行常规关闭。
+ 关闭完成后，实例将进入 `stopped` 状态。
+ 所有 EBS 卷保持附加到实例，而且其数据将保留下来，包括已保存的 RAM 内容。
+ 所有 Amazon EC2 实例存储卷都会继续保持连接到实例，但实例存储卷上的数据将会丢失。
+ 大多数情况下，实例会在启动时迁移到新的底层主机。当您停止并启动实例时，也会发生此类情况。
+ 当实例启动时，实例将启动，操作系统从 EBS 根卷读取 RAM 内容，然后解冻进程以恢复其状态。
+ 实例会保留其私有 IPv4 地址和任何 IPv6 地址。当实例启动时，实例将继续保留其私有 IPv4 地址和所有 IPv6 地址。
+ Amazon EC2 释放公有 IPv4 地址。当实例启动时，Amazon EC2 会为实例分配一个新的公有 IPv4 地址。
+ 实例会保留其关联的弹性 IP 地址。您需要为与已休眠实例关联的所有弹性 IP 地址付费。

有关休眠与重启、停止和终止之间的区别，请参阅[实例状态之间的区别](ec2-instance-lifecycle.md#lifecycle-differences)。

## 限制
<a name="instance-hibernate-limitations"></a>
+ 当您休眠某个实例时，任何实例存储卷上的数据都会丢失。
+ （Linux 实例）您不能将具有超过 150 GiB RAM 的 Linux 实例休眠。
+ （Windows 实例）您不能将具有超过 16 GiB RAM 的 Windows 实例休眠。
+ 当实例处于休眠状态时，将无法对其进行修改。这与已停止的实例不同，已停止的实例并未休眠，并且您可以修改某些属性，例如实例类型或大小。
+ 如果您从已休眠或已启用休眠的实例创建快照或 AMI，则可能无法连接到从该 AMI 启动的新实例，或者通过从快照创建的 AMI 启动的新实例。
+ （仅限竞价型实例）如果 Amazon EC2 对您的竞价型实例进行休眠，则只有 Amazon EC2 可以恢复您的实例。如果您对竞价型实例进行休眠（[用户启动的休眠](hibernating-instances.md)），则您可以恢复您的实例。仅当容量可用且竞价价格低于或等于您指定的最高价格时，才能恢复休眠的竞价型实例。
+ 您不能使位于自动扩缩组中或者由 Amazon ECS 使用的实例休眠。如果实例位于自动扩缩组中并且您尝试使该实例休眠，则 Amazon EC2 Auto Scaling 服务会将已停止的实例标记为运行状况不佳，可能会终止它并启动替换实例。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的[自动扩缩组中实例的运行状况检查](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-health-checks.html)。
+ 您不能对配置为在启用 [UEFI 安全引导](uefi-secure-boot.md)的情况下以 UEFI 模式启动的实例进行休眠。
+ 如果您休眠启动到 容量预留 的实例，容量预留 不能确保休眠的实例在尝试启动后可以恢复。
+ 如已启用美国联邦信息处理标准（FIPS）模式，则无法将内核低于 5.10 的实例休眠。
+ 我们支持的实例持续休眠时间不超过 60 天。要保留实例超过 60 天，您必须启动已休眠的实例，停止该实例，然后启动它。
+ 我们不断通过升级和安全补丁更新平台，这可能会与现有已休眠的实例冲突。我们会通知您有关需要启动已休眠实例的关键更新，这样我们才会执行关闭或重启操作以应用必需的升级和安全补丁。

## 对竞价型实例进行休眠的注意事项
<a name="spot-hibernation-considerations"></a>
+ 如果*您*对竞价型实例进行休眠，则只要容量可用且竞价价格低于或等于您指定的最高价格，就可以重新进行启动。
+ 如果 *Amazon EC2* 对您的竞价型实例进行休眠：
  + 只有 Amazon EC2 可以恢复您的实例。
  + 当容量可用且竞价价格低于或等于您指定的最高价格时，Amazon EC2 将恢复休眠的竞价型实例。
  + 在 Amazon EC2 对您的竞价型实例进行休眠之前，您将在休眠开始前两分钟收到中断通知。

  有关更多信息，请参阅 [竞价型实例中断](spot-interruptions.md)。

# EC2 实例休眠的先决条件
<a name="hibernating-prerequisites"></a>

您可以在启动按需型实例或竞价型实例时为其启用休眠支持。您不能在现有实例（无论其正在运行或已停止）上启用休眠。有关更多信息，请参阅 [启用实例休眠](enabling-hibernation.md)。

**Topics**
+ [AWS 区域](#hibernation-prereqs-regions)
+ [AMI](#hibernation-prereqs-supported-amis)
+ [实例系列](#hibernation-prereqs-supported-instance-families)
+ [实例 RAM 大小](#instance-ram-size)
+ [根卷类型](#hibernation-prereqs-root-volume-type)
+ [根卷大小](#hibernation-prereqs-ebs-root-volume-size)
+ [根卷加密](#hibernation-prereqs-ebs-root-volume-encryption)
+ [EBS 卷类型](#hibernation-prereqs-ebs-volume-types)
+ [竞价型实例请求](#hibernation-prereqs-spot-request)

## AWS 区域
<a name="hibernation-prereqs-regions"></a>

您可以对所有 AWS 区域 中的实例使用休眠。

## AMI
<a name="hibernation-prereqs-supported-amis"></a>

您必须使用支持休眠的 HVM AMI。下列 AMI 支持休眠：

### Linux AMI
<a name="hibernation-prereqs-supported-amis-linux"></a>

**Intel 和 AMD 实例类型的 AMI**
+ AL2023 AMI 发布了 2023.09.20 版或更高版本¹
+ Amazon Linux 2 AMI 发布了 2019.08.29 版或更高版本。
+ Amazon Linux AMI 2018.03 发布了 2018.11.16 版或更高版本。
+ CentOS 版本 8 AMI²（需要[其他配置](hibernation-enabled-AMI.md#configure-centos-for-hibernation)）
+ Fedora 版本 34 或更高版本 AMI²（需要[其他配置](hibernation-enabled-AMI.md#configure-fedora-for-hibernation)）
+ Red Hat Enterprise Linux (RHEL) 9 AMI²（需要[其他配置](hibernation-enabled-AMI.md#configure-RHEL-for-hibernation)）
+ Red Hat Enterprise Linux (RHEL) 8 AMI²（需要[其他配置](hibernation-enabled-AMI.md#configure-RHEL-for-hibernation)）
+ 发布序列号为 20230303 或更晚的 Ubuntu 22.04.2 LTS (Jammy Jellyfish) AMI³
+ 发布序列号为 20210820 或更晚的 Ubuntu 20.04 LTS (Focal Fossa) AMI³
+ 发布序列号为 20190722.1 或更晚的 Ubuntu 18.04 LTS (Bionic Beaver) AMI³ ⁵
+ Ubuntu 16.04 LTS（Xenial Xerus）AMI³ ⁴ ⁵（需要[其他配置](hibernation-enabled-AMI.md#configure-ubuntu1604-for-hibernation)）

**Graviton 实例类型的 AMI**
+ AL2023 AMI（64 位 Arm）发布了 2024.07.01 版或更高版本¹
+ Amazon Linux 2 AMI（64 位 Arm）发布了 2024.06.20 版或更高版本
+ 发布序列号为 20240701 或更晚的 Ubuntu 22.04.2 LTS（64 位 Arm）(Jammy Jellyfish) AMI³
+ 发布序列号为 20240701 或更晚的 Ubuntu 20.04 LTS（64 位 Arm）(Focal Fossa) AMI³

 

¹ 对于 AL2023 最低 AMI，[需要其他配置](hibernation-enabled-AMI.md#configure-AL2023-minimal-for-hibernation)。

² 对于 CentOS、Fedora 和 Red Hat Enterprise Linux，仅在基于 Nitro 的实例上支持休眠。

³ 我们建议在采用 Ubuntu 22.04.2 LTS (Jammy Jellyfish)、Ubuntu 20.04 LTS (Focal Fossa)、Ubuntu 18.04 LTS (Bionic Beaver) 和 Ubuntu 16.04 LTS (Xenial Xerus) 的实例上禁用 KASLR。有关更多信息，请参阅 [在实例上禁用 KASLR（仅限 Ubuntu）](hibernation-disable-kaslr.md)。

⁴ 对于 Ubuntu 16.04 LTS (Xenial Xerus) AMI，在 `t3.nano` 实例类型上不支持休眠。补丁将不可用，因为 Ubuntu（Xenial Xerus）于 2021 年 4 月终止了支持。要使用 `t3.nano` 实例类型，我们建议您升级到 Ubuntu 22.04.2 LTS (Jammy Jellyfish)、Ubuntu 20.04 LTS（Focal Fossa）AMI 或 Ubuntu 18.04 LTS（Bionic Beaver）AMI。

⁵ 对 Ubuntu 18.04 LTS (Bionic Beaver) 和 Ubuntu 16.04 LTS (Xenial Xerus) 的支持已结束。

要配置您自己的 AMI 以支持休眠，请参阅 [配置 Linux AMI 以支持休眠](hibernation-enabled-AMI.md)。

即将支持 Ubuntu 的其他版本和其他操作系统。

### Windows AMI
<a name="hibernation-prereqs-supported-amis-windows"></a>
+ Windows Server 2022 AMI 发布了 2023.09.13 版或更高版本
+ Windows Server 2019 AMI 发布了 2019.09.11 版或更高版本。
+ Windows Server 2016 AMI 发布了 2019.09.11 版或更高版本。
+ Windows Server 2012 R2 AMI 发布了 2019.09.11 版或更高版本。
+ Windows Server 2012 AMI 发布了 2019.09.11 版或更高版本。

## 实例系列
<a name="hibernation-prereqs-supported-instance-families"></a>

您必须使用支持休眠的实例系列。但是，不支持裸机实例。
+ 通用型：M3、M4、M5、M5a、M5ad、M5d、M6a、M6g、M6gd、M6i、M6id、M6idn、M6in、M7a、M7g、M7gd、M7i、M7i-flex、M8a、M8azn、M8g、M8gb、M8gd、M8gn、M8i、M8i-flex、T2、T3、T3a、T4g
+ 计算优化型：C3、C4、C5、C5d、C6a、C6g、C6gd、C6gn、C6i、C6id、C6in、C7a、C7g、C7gd、C7gn、C7i、C7i-flex、C8a、C8g、C8gb、C8gd、C8gn、C8i、C8i-flex
+ 内存优化型：R3、R4、R5、R5a、R5ad、R5d、R6a、R6g、R6gd、R6idn、R6in、R7a、R7g、R7gd、R7i、R7iz、R8a、R8g、R8gb、R8gd、R8gn、R8i、R8i-flex、X2gd、X8aedz、X8i
+ 存储优化型：I3、I3en、I4g、I7i、I7ie、I8g、I8ge、Im4gn、Is4gen

------
#### [ Console ]

**获取支持休眠的实例类型**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instance Types (实例类型)**。

1. 添加筛选条件**按需休眠支持 = true**。

1. （可选）添加筛选条件以进一步筛选相关的特定实例类型。

------
#### [ AWS CLI ]

**获取支持休眠的实例类型**  
请使用 [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/describe-instance-types/.html) 命令。请注意，可用的实例类型因区域而异。

```
aws ec2 describe-instance-types \
    --filters Name=hibernation-supported,Values=true \
    --query "InstanceTypes[*].[InstanceType]" \
    --output text | sort
```

------
#### [ PowerShell ]

**获取支持休眠的实例类型**  
使用 [Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) cmdlet。请注意，可用的实例类型因区域而异。

```
(Get-EC2InstanceType `
    -Filter @{Name="hibernation-supported"; Values="true"}).InstanceType | Sort-Object
```

------

## 实例 RAM 大小
<a name="instance-ram-size"></a>

**Linux 实例** – 必须小于 150 GiB。

**Windows 实例** – 必须小于或等于 16 GiB。如需将 T3 或 T3a Windows 实例休眠，建议内存至少为 1 GiB RAM。

## 根卷类型
<a name="hibernation-prereqs-root-volume-type"></a>

根卷必须是 EBS 卷，而不是实例存储卷。

## 根卷大小
<a name="hibernation-prereqs-ebs-root-volume-size"></a>

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

## 根卷加密
<a name="hibernation-prereqs-ebs-root-volume-encryption"></a>

必须加密根卷以确保在休眠时保护内存中的敏感内容。将 RAM 数据移动到 EBS 根卷时，它始终加密。根卷的加密在实例启动时实施。

可以使用以下三个选项之一，以确保根卷是加密的 EBS 卷：
+ **EBS encryption by default**（EBS 原定设置加密） - 您可以启用 EBS 原定设置加密，以确保对在您的 AWS 账户中创建的所有新 EBS 卷进行加密。这样，您就可以为实例启用休眠，而无需在实例启动时指定加密意图。有关更多信息，请参阅 [Enable encryption by default](https://docs.aws.amazon.com/ebs/latest/userguide/encryption-by-default.html)。
+ **EBS "single-step" encryption**（EBS“单步”加密） - 您可以从未加密的 AMI 中启动 EBS 支持的加密 EC2 实例，并且还可以同时启用休眠。有关更多信息，请参阅 [将加密与 EBS 支持的 AMI 结合使用](AMIEncryption.md)。
+ **Encrypted AMI**（加密的 AMI） - 您可以使用加密的 AMI 启动实例以启用 EBS 加密。如果 AMI 没有加密的根快照，则可以将其复制到新的 AMI 并请求加密。有关更多信息，请参阅[在复制过程中将未加密映像加密](AMIEncryption.md#copy-unencrypted-to-encrypted)和[复制 AMI](CopyingAMIs.md#ami-copy-steps)。

## EBS 卷类型
<a name="hibernation-prereqs-ebs-volume-types"></a>

EBS 卷必须使用以下 EBS 卷类型之一：
+ 通用型 SSD（`gp2` 和 `gp3`）
+ 预调配 IOPS SSD（`io1` 和 `io2`）

如果选择预调配 IOPS SSD 卷类型，您必须为 EBS 卷预调配合适的 IOPS，以实现休眠状态的最佳性能。有关更多信息，请参阅《Amazon EBS 用户指南》**中的 [Amazon EBS 卷类型](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html)。

## 竞价型实例请求
<a name="hibernation-prereqs-spot-request"></a>

对于竞价型实例，以下要求适用：
+ 竞价型实例请求类型必须为 `persistent`。
+ 您不能在竞价型实例请求中指定启动组。

# 配置 Linux AMI 以支持休眠
<a name="hibernation-enabled-AMI"></a>

以下 Linux AMI 可以支持 Amazon EC2 实例休眠，前提是您完成了本节中所述的其他配置步骤。

**Topics**
+ [AL2023 最低 AMI 发布了 2023.09.20 版或更高版本](#configure-AL2023-minimal-for-hibernation)
+ [Amazon Linux 2 最小 AMI 发布了 2019.08.29 版或更高版本](#configure-AL2-minimal-for-hibernation)
+ [在 2019.08.29 前发布的 Amazon Linux 2](#configure-AL2-for-hibernation)
+ [在 2018.11.16 前发布的 Amazon Linux](#configure-AL-for-hibernation)
+ [CentOS 版本 8 或更高版本](#configure-centos-for-hibernation)
+ [Fedora 34 版或更高版本](#configure-fedora-for-hibernation)
+ [Red Hat Enterprise Linux 版本 8 或 9](#configure-RHEL-for-hibernation)
+ [发布序列号早于 20210820 的 Ubuntu 20.04 LTS（Focal Fossa）](#configure-ubuntu2004-for-hibernation)
+ [发布序列号早于 20190722.1 的 Ubuntu 18.04（Bionic Beaver）](#configure-ubuntu1804-for-hibernation)
+ [Ubuntu 16.04 (Xenial Xerus)](#configure-ubuntu1604-for-hibernation)

有关支持休眠且*无需额外*配置的 Linux 和 Windows AMI，请参阅[AMI](hibernating-prerequisites.md#hibernation-prereqs-supported-amis)。

有关更多信息，请参阅 [Update instance software on your Amazon Linux 2 instance](https://docs.aws.amazon.com/linux/al2/ug/install-updates.html)。

## AL2023 最低 AMI 发布了 2023.09.20 版或更高版本
<a name="configure-AL2023-minimal-for-hibernation"></a>

**配置 2023.09.20 版或更高版本的 AL2023 最低 AMI 以支持休眠**

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo dnf install ec2-hibinit-agent
   ```

1. 重新启动服务。

   ```
   [ec2-user ~]$ sudo systemctl start hibinit-agent
   ```

## Amazon Linux 2 最小 AMI 发布了 2019.08.29 版或更高版本
<a name="configure-AL2-minimal-for-hibernation"></a>

**配置 2019.08.29 版或更高版本的 Amazon Linux 2 最小 AMI 以支持休眠**

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo yum install ec2-hibinit-agent
   ```

1. 重新启动服务。

   ```
   [ec2-user ~]$ sudo systemctl start hibinit-agent
   ```

## 在 2019.08.29 前发布的 Amazon Linux 2
<a name="configure-AL2-for-hibernation"></a>

**配置在 2019.08.29 前发布的 Amazon Linux 2 AMI 以支持休眠**

1. 将内核更新为 `4.14.138-114.102` 或更高版本。

   ```
   [ec2-user ~]$ sudo yum update kernel
   ```

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo yum install ec2-hibinit-agent
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `4.14.138-114.102` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

1. 停止实例并创建 AMI。有关更多信息，请参阅 [创建 Amazon EBS-backed AMI](creating-an-ami-ebs.md)。

## 在 2018.11.16 前发布的 Amazon Linux
<a name="configure-AL-for-hibernation"></a>

**配置在 2018.11.16 前发布的 Amazon Linux AMI 以支持休眠**

1. 将内核更新为 `4.14.77-70.59` 或更高版本。

   ```
   [ec2-user ~]$ sudo yum update kernel
   ```

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo yum install ec2-hibinit-agent
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `4.14.77-70.59` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

1. 停止实例并创建 AMI。有关更多信息，请参阅 [创建 Amazon EBS-backed AMI](creating-an-ami-ebs.md)。

## CentOS 版本 8 或更高版本
<a name="configure-centos-for-hibernation"></a>

**配置 CentOS 版本 8 或更高版本 AMI 以支持休眠**

1. 将内核更新为 `4.18.0-305.7.1.el8_4.x86_64` 或更高版本。

   ```
   [ec2-user ~]$ sudo yum update kernel
   ```

1. 安装 Extra Packages for Enterprise Linux (EPEL) 存储库。

   ```
   [ec2-user ~]$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
   ```

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo yum install ec2-hibinit-agent
   ```

1. 启用休眠代理以在引导时开启。

   ```
   [ec2-user ~]$ sudo systemctl enable hibinit-agent.service
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `4.18.0-305.7.1.el8_4.x86_64` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

## Fedora 34 版或更高版本
<a name="configure-fedora-for-hibernation"></a>

**配置 Fedora 版本 34 或更高版本 AMI 以支持休眠**

1. 将内核更新为 `5.12.10-300.fc34.x86_64` 或更高版本。

   ```
   [ec2-user ~]$ sudo yum update kernel
   ```

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo dnf install ec2-hibinit-agent
   ```

1. 启用休眠代理以在引导时开启。

   ```
   [ec2-user ~]$ sudo systemctl enable hibinit-agent.service
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `5.12.10-300.fc34.x86_64` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

## Red Hat Enterprise Linux 版本 8 或 9
<a name="configure-RHEL-for-hibernation"></a>

**配置 Red Hat Enterprise Linux 8 或 9 AMI 以支持休眠**

1. 将内核更新为 `4.18.0-305.7.1.el8_4.x86_64` 或更高版本。

   ```
   [ec2-user ~]$ sudo yum update kernel
   ```

1. 安装 Extra Packages for Enterprise Linux (EPEL) 存储库。

   RHEL 版本 8：

   ```
   [ec2-user ~]$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
   ```

   RHEL 版本 9：

   ```
   [ec2-user ~]$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
   ```

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo yum install ec2-hibinit-agent
   ```

1. 启用休眠代理以在引导时开启。

   ```
   [ec2-user ~]$ sudo systemctl enable hibinit-agent.service
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `4.18.0-305.7.1.el8_4.x86_64` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

## 发布序列号早于 20210820 的 Ubuntu 20.04 LTS（Focal Fossa）
<a name="configure-ubuntu2004-for-hibernation"></a>

**配置发布序列号早于 20210820 的 Ubuntu 20.04 LTS（Focal Fossa）AMI 以支持休眠**

1. 将 linux-aws-kernel 更新为 `5.8.0-1038.40` 或更高版本，并将 grub2 更新为 `2.04-1ubuntu26.13` 或更高版本。

   ```
   [ec2-user ~]$ sudo apt update
   [ec2-user ~]$ sudo apt dist-upgrade
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `5.8.0-1038.40` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

1. 确认 grub2 版本已更新为 `2.04-1ubuntu26.13` 或更高版本。

   ```
   [ec2-user ~]$ dpkg --list | grep grub2-common
   ```

## 发布序列号早于 20190722.1 的 Ubuntu 18.04（Bionic Beaver）
<a name="configure-ubuntu1804-for-hibernation"></a>

**配置在序列号 20190722.1 前发布的 Ubuntu 18.04 LTS AMI 以支持休眠**

1. 将内核更新为 `4.15.0-1044` 或更高版本。

   ```
   [ec2-user ~]$ sudo apt update
   [ec2-user ~]$ sudo apt dist-upgrade
   ```

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo apt install ec2-hibinit-agent
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `4.15.0-1044` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

## Ubuntu 16.04 (Xenial Xerus)
<a name="configure-ubuntu1604-for-hibernation"></a>

要将 Ubuntu 16.04 LTS 配置为支持休眠，您需要安装 Linux-aws-hwe 内核软件包版本 4.15.0-1058-aws 或更高版本以及 ec2-hibinit-agent。

**重要**  
`linux-aws-hwe` 内核程序包受规范支持。对 Ubuntu 16.04 LTS 的标准支持于 2021 年 4 月结束，该软件包不再定期更新。但是，它将接收其他安全更新，直到扩展安全性维护支持在 2024 年结束。有关更多信息，请参阅规范 Ubuntu 博客上现已提供的[适用于 Ubuntu 16.04 LTS 的 Amazon EC2 休眠](https://ubuntu.com/blog/amazon-ec2-hibernation-for-ubuntu-16-04-lts-now-available)。  
我们建议您升级到 Ubuntu 20.04 LTS（Focal Fossa）AMI 或 Ubuntu 18.04 LTS（Bionic Beaver）AMI。

**配置 Ubuntu 16.04 LTS AMI 以支持休眠**

1. 将内核更新为 `4.15.0-1058-aws` 或更高版本。

   ```
   [ec2-user ~]$ sudo apt update
   [ec2-user ~]$ sudo apt install linux-aws-hwe
   ```

1. 从存储库安装 `ec2-hibinit-agent` 程序包。

   ```
   [ec2-user ~]$ sudo apt install ec2-hibinit-agent
   ```

1. 重启实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 确认内核版本已更新为 `4.15.0-1058-aws` 或更高版本。

   ```
   [ec2-user ~]$ uname -a
   ```

# 为 Amazon EC2 实例启用休眠
<a name="enabling-hibernation"></a>

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

**重要**  
启动实例后，无法为实例启用或禁用休眠。

**Topics**
+ [为按需型实例启用休眠](#enable-hibernation-for-on-demand-instances)
+ [为竞价型实例启用休眠](#enable-hibernation-for-spot-instances)
+ [查看实例是否已启用休眠](#view-if-instance-is-enabled-for-hibernation)

## 为按需型实例启用休眠
<a name="enable-hibernation-for-on-demand-instances"></a>

您可以为按需型实例启用休眠。

------
#### [ Console ]

**要为按需型实例启用休眠**

1. 按照步骤[启动实例](ec2-launch-instance-wizard.md)，但请在完成以下步骤以启用休眠之后再启动实例。

1. 若要启用休眠，请在启动实例向导中配置以下字段：

   1. 在**应用程序和操作系统映像（Amazon 机器映像）**下，选择支持休眠的 AMI。有关更多信息，请参阅 [AMI](hibernating-prerequisites.md#hibernation-prereqs-supported-amis)。

   1. 在 **Instance type**（实例类型）下，选择一个受支持的实例类型。有关更多信息，请参阅 [实例系列](hibernating-prerequisites.md#hibernation-prereqs-supported-instance-families)。

   1. 在 **Configure storage**（配置存储）下，选择右侧的 **Advanced**（高级），并为根卷指定以下信息：
      + 在**大小 (GiB)** 中，输入 EBS 根卷大小。卷必须足够大，以存储 RAM 内容并满足您的预期使用量。
      + 对于 **Volume Type**（卷类型），选择支持的 EBS 卷类型：通用型 SSD（`gp2` 和 `gp3`）或预调配 IOPS SSD（`io1` 和 `io2`）。
      + 对于 **Encrypted**（已加密），选择 **Yes**（是）。如果您在此 AWS 区域中启用了默认加密，则系统会选择 **Yes**（是）。
      + 对于 **KMS key**（KMS 密钥），请选择卷的加密密钥。如果您在此 AWS 区域中启用了默认加密，则会选择默认加密密钥。

      有关根卷先决条件的更多信息，请参阅[EC2 实例休眠的先决条件](hibernating-prerequisites.md)。

   1. 展开 **Advanced details**（高级详细信息），找到 **Stop - Hibernate behavior**（停止 – 休眠行为），然后选择 **Enable**（启用）。

1. 在 **Summary**（摘要）面板中查看实例配置，然后选择 **Launch instance**（启动实例）。有关更多信息，请参阅 [使用控制台中的启动实例向导来启动 EC2 实例](ec2-launch-instance-wizard.md)。

------
#### [ AWS CLI ]

**要为按需型实例启用休眠**  
使用 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令启动实例。使用 `--block-device-mappings file://mapping.json` 参数指定 EBS 根卷参数，并使用 `--hibernation-options Configured=true` 参数启用休眠。

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type m5.large \
    --block-device-mappings file://mapping.json \
    --hibernation-options Configured=true \
    --count 1 \
    --key-name MyKeyPair
```

在 `mapping.json` 中指定以下内容。

```
[
    {
        "DeviceName": "/dev/xvda",
        "Ebs": {
            "VolumeSize": 30,
            "VolumeType": "gp2",
            "Encrypted": true
        }
    }
]
```

`DeviceName` 的值必须匹配与 AMI 关联的根设备名称。要查找根设备名称，请使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images --image-id ami-0abcdef1234567890
```

如果您在此 AWS 区域中启用了默认加密，则可以省略 `"Encrypted": true`。

------
#### [ PowerShell ]

**要为按需型实例启用休眠**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) 命令启动实例。通过首先定义块设备映射，然后使用 `-BlockDeviceMappings` 参数将其添加到命令来指定 EBS 根卷。使用 `-HibernationOptions_Configured $true` 参数启用休眠。

```
$ebs_encrypt = New-Object Amazon.EC2.Model.BlockDeviceMapping
$ebs_encrypt.DeviceName = "/dev/xvda"
$ebs_encrypt.Ebs = New-Object Amazon.EC2.Model.EbsBlockDevice
$ebs_encrypt.Ebs.VolumeSize = 30
$ebs_encrypt.Ebs.VolumeType = "gp2"
$ebs_encrypt.Ebs.Encrypted = $true

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

`DeviceName` 的值必须匹配与 AMI 关联的根设备名称。要查找根设备名称，请使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 命令。

```
Get-EC2Image -ImageId ami-0abcdef1234567890
```

如果您在此 AWS 区域中启用了默认加密，则可以在块设备映射中省略 `Encrypted = $true`。

------

## 为竞价型实例启用休眠
<a name="enable-hibernation-for-spot-instances"></a>

您可以为竞价型实例启用休眠。有关在中断时休眠竞价型实例的更多信息，请参阅 [竞价型实例中断](spot-interruptions.md)。

------
#### [ Console ]

**要为竞价型实例启用休眠**

1. 请遵循[使用启动实例向导请求竞价型实例](using-spot-instances-request.md)的过程操作，但请在完成以下步骤启用休眠之后再启动实例。

1. 若要启用休眠，请在启动实例向导中配置以下字段：

   1. 在**应用程序和操作系统映像（Amazon 机器映像）**下，选择支持休眠的 AMI。有关更多信息，请参阅 [AMI](hibernating-prerequisites.md#hibernation-prereqs-supported-amis)。

   1. 在 **Instance type**（实例类型）下，选择一个受支持的实例类型。有关更多信息，请参阅 [实例系列](hibernating-prerequisites.md#hibernation-prereqs-supported-instance-families)。

   1. 在 **Configure storage**（配置存储）下，选择右侧的 **Advanced**（高级），并为根卷指定以下信息：
      + 在**大小 (GiB)** 中，输入 EBS 根卷大小。卷必须足够大，以存储 RAM 内容并满足您的预期使用量。
      + 对于 **Volume Type**（卷类型），选择支持的 EBS 卷类型：通用型 SSD（`gp2` 和 `gp3`）或预调配 IOPS SSD（`io1` 和 `io2`）。
      + 对于 **Encrypted**（已加密），选择 **Yes**（是）。如果您在此 AWS 区域中启用了默认加密，则系统会选择 **Yes**（是）。
      + 对于 **KMS key**（KMS 密钥），请选择卷的加密密钥。如果您在此 AWS 区域中启用了默认加密，则会选择默认加密密钥。

      有关根卷先决条件的更多信息，请参阅[EC2 实例休眠的先决条件](hibernating-prerequisites.md)。

   1. 展开**高级详细信息**，除了用于配置竞价型实例的字段外，还要执行以下操作：

      1. 对于**请求类型**，选择**持续**。

      1. 对于**中断行为**，选择**休眠**。或者，对于**停止 - 休眠行为**，选择**启用**。这两个字段都可以在竞价型实例上启用休眠。您只需要配置其中一个。

1. 在 **Summary**（摘要）面板中查看实例配置，然后选择 **Launch instance**（启动实例）。有关更多信息，请参阅 [使用控制台中的启动实例向导来启动 EC2 实例](ec2-launch-instance-wizard.md)。

------
#### [ AWS CLI ]

**要为竞价型实例启用休眠**  
使用 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令请求竞价型实例。使用 `--block-device-mappings file://mapping.json` 参数指定 EBS 根卷参数，并使用 `--hibernation-options Configured=true` 参数启用休眠。竞价型实例请求类型（`SpotInstanceType`）必须为 `persistent`。

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c4.xlarge \
    --block-device-mappings file://mapping.json \
    --hibernation-options Configured=true \
    --count 1 \
    --key-name MyKeyPair
    --instance-market-options
        {
           "MarketType":"spot",
           "SpotOptions":{
              "MaxPrice":"1",
              "SpotInstanceType":"persistent"
            }
        }
```

按如下方式在 `mapping.json` 中指定 EBS 根卷参数。

```
[
    {
        "DeviceName": "/dev/xvda",
        "Ebs": {
            "VolumeSize": 30,
            "VolumeType": "gp2",
            "Encrypted": true
        }
    }
]
```

`DeviceName` 的值必须匹配与 AMI 关联的根设备名称。要查找根设备名称，请使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images --image-id ami-0abcdef1234567890
```

如果您在此 AWS 区域中启用了默认加密，则可以省略 `"Encrypted": true`。

------
#### [ PowerShell ]

**要为竞价型实例启用休眠**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) 命令请求竞价型实例。通过首先定义块设备映射，然后使用 `-BlockDeviceMappings` 参数将其添加到命令来指定 EBS 根卷。使用 `-HibernationOptions_Configured $true` 参数启用休眠。

```
$ebs_encrypt = New-Object Amazon.EC2.Model.BlockDeviceMapping
$ebs_encrypt.DeviceName = "/dev/xvda"
$ebs_encrypt.Ebs = New-Object Amazon.EC2.Model.EbsBlockDevice
$ebs_encrypt.Ebs.VolumeSize = 30
$ebs_encrypt.Ebs.VolumeType = "gp2"
$ebs_encrypt.Ebs.Encrypted = $true

New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType m5.large `
    -BlockDeviceMappings $ebs_encrypt `
    -HibernationOptions_Configured $true `
    -MinCount 1 `
    -MaxCount 1 `
    -KeyName MyKeyPair `
    -InstanceMarketOption @(
        MarketType = spot;
        SpotOptions @{
        MaxPrice = 1;
        SpotInstanceType = persistent}
    )
```

`DeviceName` 的值必须匹配与 AMI 关联的根设备名称。要查找根设备名称，请使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 命令。

```
Get-EC2Image -ImageId ami-0abcdef1234567890
```

如果您在此 AWS 区域中启用了默认加密，则可以在块设备映射中省略 `Encrypted = $true`。

------

## 查看实例是否已启用休眠
<a name="view-if-instance-is-enabled-for-hibernation"></a>

您可以检查实例是否已启用休眠。

------
#### [ Console ]

**查看实例是否启用休眠**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 选择所需实例，然后在**详细信息**选项卡上的**实例详细信息**部分中检查**停止 – 休眠操作**。**已启用** 表明已为实例启用休眠。

------
#### [ AWS CLI ]

**查看实例是否启用休眠**  
使用 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令并指定 `--filters "Name=hibernation-options.configured,Values=true"` 参数以筛选启用了休眠的实例。

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

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

```
"HibernationOptions": {
    "Configured": true
}
```

------
#### [ PowerShell ]

**查看实例是否启用休眠**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet 并筛选启用了休眠的实例。

```
(Get-EC2Instance `
    -Filter @{Name="hibernation-options.configured"; Values="true"}).Instances
```

------

# 在实例上禁用 KASLR（仅限 Ubuntu）
<a name="hibernation-disable-kaslr"></a>

要使用 Ubuntu 16.04 LTS（Xenial Xerus）、发布序列号为 20190722.1 或更晚的 Ubuntu 18.04 LTS - Bionic 或者发布序列号为 20210820 或更晚的 Ubuntu 20.04 LTS（Bionic Beaver）在新启动的实例上运行休眠，我们建议禁用 KASLR（内核地址空间布局随机掩码）。在 Ubuntu 16.04 LTS、Ubuntu 18.04 LTS 或 Ubuntu 20.04 LTS 上，默认启用 KASLR。

KASLR 是一项标准 Linux 内核安全功能，它通过随机化内核的基本地址值，来帮助减少尚未发现的内存访问漏洞的风险和后果。启用 KASLR 后，实例在休眠后可能无法恢复。

要详细了解 KASLR，请参阅 [Ubuntu 功能](https://wiki.ubuntu.com/Security/Features)。

**在使用 Ubuntu 启动的实例上禁用 KASLR**

1. 使用 SSH 连接到您的实例。有关更多信息，请参阅 [使用 SSH 连接到 Linux 实例](connect-to-linux-instance.md)。

1. 在选定编辑器中打开 `/etc/default/grub.d/50-cloudimg-settings.cfg` 文件。编辑 `GRUB_CMDLINE_LINUX_DEFAULT` 行以将 `nokaslr` 选项追加到其末尾，如以下示例所示。

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme_core.io_timeout=4294967295 nokaslr"
   ```

1. 保存文件并退出您的编辑器。

1. 运行以下命令来重新构建 grub 配置。

   ```
   sudo update-grub
   ```

1. 重启实例。

   ```
   sudo reboot
   ```

1. 运行以下命令确认 `nokaslr` 已添加。

   ```
   cat /proc/cmdline
   ```

   命令的输出应包含 `nokaslr` 选项。

# 将 Amazon EC2 实例休眠
<a name="hibernating-instances"></a>

如果按需型实例或竞价型实例是 EBS 支持的实例、[已启用休眠](enabling-hibernation.md)且满足[休眠先决条件](hibernating-prerequisites.md)，则可以在该实例上启动休眠。如果无法成功使实例休眠，则会进行正常关闭。

------
#### [ Console ]

**要对实例进行休眠**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 选择所需实例，然后依次选择**实例状态**、**休眠实例**。如果**休眠实例**处于已禁用状态，则表示实例已经休眠或停止，或者无法休眠。有关更多信息，请参阅[EC2 实例休眠的先决条件](hibernating-prerequisites.md)。

1. 当系统提示进行确认时，选择**休眠**。使实例休眠可能需要几分钟时间。实例状态首先会更改为 **Stopping**（正在停止），然后如果实例已休眠，实例状态会更改为 **Stopped**（已停止）。

------
#### [ AWS CLI ]

**要对实例进行休眠**  
使用 [stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) 命令并指定 `--hibernate` 参数。

```
aws ec2 stop-instances \
    --instance-ids i-1234567890abcdef0 \
    --hibernate
```

------
#### [ PowerShell ]

**要对实例进行休眠**  
使用 [Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) cmdlet。

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

------

您可以检查是否已在实例上启动休眠。

------
#### [ Console ]

**查看是否已在实例上启动休眠**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后在**详细信息**选项卡的**实例详细信息**部分中，检查**状态转换消息**的值。

   **Client.UserInitiatedHibernate：用户启动的休眠**表示您在按需型实例或竞价型实例上启动了休眠。

------
#### [ AWS CLI ]

**查看是否已在实例上启动休眠**  
使用 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令并指定 `state-reason-code` 筛选条件以查看已启动了休眠的实例。

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

输出中的以下字段表示已在按需型实例或竞价型实例上启动休眠。

```
"StateReason": {
    "Code": "Client.UserInitiatedHibernate"
}
```

------
#### [ PowerShell ]

**查看是否已在实例上启动休眠**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet 并指定 `state-reason-code` 筛选条件以查看已启动休眠的实例。

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

------

# 启动已休眠的 Amazon EC2 实例
<a name="hibernating-resuming"></a>

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

对于竞价型实例，如果 Amazon EC2 对实例进行了休眠，则只有 Amazon EC2 可以恢复它。只有在*您*对竞价型实例进行休眠的情况下，您才能自己恢复该实例。仅当容量可用且竞价价格低于或等于您指定的最高价格时，才能恢复竞价型实例。

------
#### [ Console ]

**启动已休眠实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 选择已休眠的实例，然后依次选择**实例状态**、**启动实例**。实例进入 `running` 状态可能需要几分钟时间。在此期间，实例[状态检查](monitoring-system-instance-status-check.md#types-of-instance-status-checks)显示实例处于失败状态，直至实例已启动。

------
#### [ AWS CLI ]

**启动已休眠实例**  
使用 [start-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) 命令。

```
aws ec2 start-instances --instance-ids i-1234567890abcdef0
```

------
#### [ PowerShell ]

**启动已休眠实例**  
使用 [Start-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) cmdlet。

```
Start-EC2Instance -InstanceId i-1234567890abcdef0
```

------

# 排查 Amazon EC2 实例休眠问题
<a name="troubleshoot-instance-hibernate"></a>

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

**Topics**
+ [在启动后无法立即休眠](#hibernate-troubleshooting-1)
+ [从 stopping 转变为 stopped 用时太长，内存状态在启动后无法恢复](#hibernate-troubleshooting-2)
+ [实例卡在 stopping 状态](#hibernate-troubleshooting-3)
+ [休眠后无法立即启动竞价型实例](#hibernate-troubleshooting-4)
+ [恢复竞价型实例失败](#hibernate-troubleshooting-5)

## 在启动后无法立即休眠
<a name="hibernate-troubleshooting-1"></a>

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

Linux 实例在启动之后，您必须等待大约 2 分钟才会休眠，对于 Windows 实例，在启动之后，您必须等待大约 5 分钟后才会休眠。

## 从 stopping 转变为 stopped 用时太长，内存状态在启动后无法恢复
<a name="hibernate-troubleshooting-2"></a>

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

**Linux 实例**

检查实例系统日志，查找与休眠相关的消息。要访问系统日志，请[连接](connect-to-linux-instance.md)到实例或者使用 [get-console-output](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-console-output.html) 命令。从 `hibinit-agent` 中查找日志行。如果日志行指示出现故障或者缺少日志行，则很有可能在启动时配置休眠失败。

例如，以下消息指明实例根卷不够大：`hibinit-agent: Insufficient disk space. Cannot create setup for hibernation. Please allocate a larger root device.`

如果 `hibinit-agent` 中的最后日志行是 `hibinit-agent: Running: swapoff /swap`，则已成功配置休眠。

如果您未看到来自这些进程的任何日志，您的 AMI 可能不支持休眠。有关支持的 AMI 的信息，请参阅[EC2 实例休眠的先决条件](hibernating-prerequisites.md)。如果您使用自己的 Linux AMI，则请确保按照 [配置 Linux AMI 以支持休眠](hibernation-enabled-AMI.md) 的说明操作。

**Windows Server 2016 及更高版本**  
检查 EC2 Launch 日志，查找与休眠相关的消息。要访问 EC2 Launch 日志，请[连接](connecting_to_windows_instance.md)到实例并在文本编辑器中打开 `C:\ProgramData\Amazon\EC2-Windows\Launch\Log\Ec2Launch.log` 文件。如果使用 EC2Launch v2，请打开 `C:\ProgramData\Amazon\EC2Launch\log\agent.log`。

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

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

例如，以下消息指示休眠配置失败：`Message: Failed to enable hibernation.` 如果错误消息包含十进制 ASCII 值，则可以将这些 ASCII 值转换为纯文本，以便读取完整的错误消息。

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

**Windows Server 2012 R2 和早期版本**  
检查 EC2 配置日志，查找与休眠相关的消息。要访问 EC2 配置日志，请[连接](connecting_to_windows_instance.md)到实例并在文本编辑器中打开 `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`，则已成功配置休眠。

**Windows 实例大小**  
如果您使用的是 RAM 小于 1 GiB 的 T3 或 T3a Windows 实例，请尝试将实例的大小增加到至少有 1 GiB RAM 的实例。

## 实例卡在 stopping 状态
<a name="hibernate-troubleshooting-3"></a>

如果您已使实例休眠并且实例卡在 `stopping` 状态，则可以强制停止它。有关更多信息，请参阅 [排查 Amazon EC2 实例的停止问题](TroubleshootingInstancesStopping.md)。

## 休眠后无法立即启动竞价型实例
<a name="hibernate-troubleshooting-4"></a>

如果您尝试在竞价型实例休眠后的两分钟内启动该实例，则可能会出现以下错误：

`You failed to start the Spot Instance because the associated Spot Instance request is not in an appropriate state to support start.`

对于 Linux 实例，等待大约 2 分钟，对于 Windows 实例，等待大约 5 分钟，然后重试启动实例。

## 恢复竞价型实例失败
<a name="hibernate-troubleshooting-5"></a>

如果您的竞价型实例成功休眠但无法恢复，而是重新启动（未保留休眠状态的全新重启），则可能是因为用户数据包含以下脚本：

```
/usr/bin/enable-ec2-spot-hibernation
```

从启动模板的**用户数据**字段中移除此脚本，然后请求新的竞价型实例。

请注意，即使实例无法恢复，在不保留休眠状态的情况下，该实例仍然可以像从 `stopped` 状态启动一样启动。

# 重启 Amazon EC2 实例
<a name="ec2-instance-reboot"></a>

实例重启相当于操作系统重启。在许多情况下，只需要几分钟时间即可重启您的实例。

重启实例后，将保留以下内容：
+ 公有 DNS 名称（IPv4）
+ 私有 IPv4 地址
+ 公有 IPv4 地址
+ IPv6 地址（如适用）
+ 其实例存储卷上的所有数据

与[停止并启动](Stop_Start.md)实例会启动新的计费周期并且最低收取一分钟的费用不同，重启实例不会启动新的实例计费周期。

实例重启可以由用户启动（即手动重启实例），也可以由 AWS 启动（用于自动恢复实例，或者响应计划重启事件以进行必要的维护，例如应用需要重启的更新）。

对于由用户启动的重启，我们建议使用 Amazon EC2 控制台、CLI 或 API 而非在实例中运行操作系统重启命令。使用 Amazon EC2 时，如果实例未在几分钟内完全关闭，Amazon EC2 会执行强制重启。此外，AWS CloudTrail 还会创建一条关于实例重启时间的 API 记录。

本主题介绍如何执行由用户启动的重启。有关 AWS 执行的重启的信息，请参阅[实例自动恢复](ec2-instance-recover.md)和[管理计划重启的 Amazon EC2 实例](schedevents_actions_reboot.md)。

**重要**  
如果正在您的实例上安装更新，我们建议您在所有更新都安装完毕之后，才使用 Amazon EC2 控制台或命令行重启或关闭您的实例。当您使用 Amazon EC2 控制台或命令行重启或关闭实例时，您的实例会存在硬重启的风险。在安装更新过程中硬重启会将您的实例置于不稳定状态。

------
#### [ Console ]

**重启实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后选择 **Instance state**（实例状态）、**Reboot instance**（重新引导实例）。

1. 当系统提示您确认时，选择**重启**。

   实例仍处于 `running` 状态。

------
#### [ AWS CLI ]

**重启实例**  
使用 [reboot-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/reboot-instances.html) 命令。

```
aws ec2 reboot-instances --instance-ids i-1234567890abcdef0
```

------
#### [ PowerShell ]

**重启实例**  
使用 [Restart-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Restart-EC2Instance.html) cmdlet。

```
Restart-EC2Instance -InstanceId i-1234567890abcdef0
```

------

**运行受控的故障注入实验**  
您可以使用 AWS Fault Injection Service 测试您的实例重新启动时您的应用程序如何响应。有关更多信息，请参阅[《AWS Fault Injection Service 用户指南》](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)。

# 终止 Amazon EC2 实例
<a name="terminating-instances"></a>

**警告**  
**终止实例是永久且不可逆转的。**  
终止一个实例后，您将无法再连接到该实例，而且也无法对其进行恢复操作。被配置为在终止后删除的所有连接的 Amazon EBS 卷也将被永久删除并且无法恢复。实例存储卷中存储的所有数据将永久丢失。有关更多信息，请参阅 [实例终止的工作原理](how-ec2-instance-termination-works.md)。  
在终止实例之前，请务必确保已将需要在终止后保留的所有数据备份到持久存储中。

当您不再需要实例时，可将其删除。这称为*终止* 实例。实例的状态一旦变为 `shutting-down` 或 `terminated`，就不再产生与该实例相关的费用。

在您终止之后，您将无法连接到或启动实例。但您可以使用同一 AMI 启动新的实例。

如果您希望停止或休眠实例，请参阅 [启动和停止 Amazon EC2 实例](Stop_Start.md) 或 [将您的 Amazon EC2 实例休眠](Hibernate.md)。有关更多信息，请参阅 [实例状态之间的区别](ec2-instance-lifecycle.md#lifecycle-differences)。

**Topics**
+ [实例终止的工作原理](how-ec2-instance-termination-works.md)
+ [终止实例的方法](instance-terminate-methods.md)
+ [终止实例并正常关闭操作系统](#terminating-instances-console)
+ [终止实例并绕过操作系统正常关闭](#terminating-instances-bypass-graceful-os-shutdown)
+ [排查实例终止问题](#troubleshoot-instance-terminate)
+ [更改实例终止保护](Using_ChangingDisableAPITermination.md)
+ [更改实例启动的关闭行为](Using_ChangingInstanceInitiatedShutdownBehavior.md)
+ [实例终止时保留数据](preserving-volumes-on-termination.md)

# 实例终止的工作原理
<a name="how-ec2-instance-termination-works"></a>

当终止实例时，则会在实例的操作系统（OS）级别注册更改，一些资源会丢失，而一些资源会持续存在。

下图显示了 Amazon EC2 实例终止后丢失的内容和仍然存在的情况。实例终止后，任何实例存储卷上的数据和存储在实例 RAM 中的数据都将擦除。与实例关联的任何弹性 IP 地址都将分离。对于 Amazon EBS 根卷和数据卷，结果取决于每个卷的**终止时删除**设置。

![\[实例终止时，IP 地址、RAM、实例存储卷和 EBS 根卷都将丢失。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/terminate-instance.png)


## 注意事项
<a name="terminate-instance-overview"></a>
+ **数据持久性**
  + 实例存储卷：当实例终止时，所有数据将永久删除。
  + EBS 根卷：
    + 如果启动时附加，则实例终止时默认删除。
    + 如果启动后附加，则实例终止时默认存在。
  + EBS 数据卷：
    + 如果启动时使用控制台附加：实例终止时默认存在。
    + 如果启动时使用 CLI 附加：实例终止时默认删除。
    + 如果启动后使用控制台或 CLI 附加：实例终止时默认存在。
**注意**  
任何在实例终止时未删除的卷将继续产生费用。您可以更改设置，以便在实例终止时删除或保留卷。有关更多信息，请参阅 [实例终止时保留数据](preserving-volumes-on-termination.md)。
+ **防止意外终止**
  + 要防止有人意外终止实例，请[启用终止保护](Using_ChangingDisableAPITermination.md)。
  + 要控制从实例启动关闭操作时实例停止还是终止，请更改[实例启动的关闭行为](Using_ChangingInstanceInitiatedShutdownBehavior.md)。
+ **关闭脚本**：如果您在实例终止时运行脚本，您的实例可能会异常终止，因为我们无法确保关闭脚本运行。Amazon EC2 尝试彻底关闭实例并运行任何系统关闭脚本；但是，某些事件（如硬件故障）可能会阻止这些系统关闭脚本运行。
+ **裸机实例**：x86 裸机实例不支持协同关闭。

## 在终止实例时发生的情况
<a name="what-happens-terminate"></a>

**在操作系统级别注册的更改**
+ API 请求会向访客发送按钮按下事件。
+ 该按钮按下事件致使各种系统服务停止。由 **systemd**（Linux）或系统进程（Windows）提供系统正常关闭。来自管理程序的 ACPI 关闭按钮按下事件触发正常关闭。
+ 启动 ACPI 关闭。
+ 正常关闭进程退出后，该实例将关闭。没有可配置的操作系统关闭时间。短时间内仍可在控制台中看到该实例，然后该条目将自动被删除。

**资源丢失**
+ 实例存储卷中存储的数据。
+ 如果 `DeleteOnTermination` 属性设置为 `true`，则为 EBS 根卷。
+ 如果 `DeleteOnTermination` 属性设置为 `true`，则为 EBS 数据卷（在启动时或启动后附加）。

**持续存在的资源**
+ 如果 `DeleteOnTermination` 属性设置为 `false`，则为 EBS 根卷。
+ 如果 `DeleteOnTermination` 属性设置为 `false`，则为 EBS 数据卷（在启动时或启动后附加）。

## 测试应用程序对实例终止的响应
<a name="test-terminate-instance"></a>

您可以使用 AWS Fault Injection Service 测试您的实例终止时您的应用程序如何响应。有关更多信息，请参阅[《AWS Fault Injection Service 用户指南》](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)。

# 终止实例的方法
<a name="instance-terminate-methods"></a>

**警告**  
**终止实例是永久且不可逆转的。**  
终止一个实例后，您将无法再连接到该实例，而且也无法对其进行恢复操作。被配置为在终止后删除的所有连接的 Amazon EBS 卷也将被永久删除并且无法恢复。实例存储卷中存储的所有数据将永久丢失。有关更多信息，请参阅 [实例终止的工作原理](how-ec2-instance-termination-works.md)。  
在终止实例之前，请务必确保已将需要在终止后保留的所有数据备份到持久存储中。

有四种方法可以执行用户启动的实例终止：默认终止、跳过操作系统关闭终止、强制终止和跳过操作系统关闭强制终止。下表比较了各种终止方法之间的关键差异：

**注意**  
如果启用了终止保护，则无法终止实例。有关更多信息，请参阅[更改实例终止保护](Using_ChangingDisableAPITermination.md)。


| 终止方法 | 关键用途 | 使用案例 | CLI 命令 | 
| --- | --- | --- | --- | 
| 默认终止 | 正常关闭实例，尝试正常关闭操作系统。 | 典型实例终止。 | <pre>aws ec2 terminate-instances \<br />--instance-id i-1234567890abcdef0</pre> | 
| 终止并跳过操作系统关闭 | 终止实例时绕过操作系统正常关闭。 | 需要绕过正常关闭操作系统时。 | <pre>aws ec2 terminate-instances \<br />--instance-id i-1234567890abcdef0 \<br />--skip-os-shutdown</pre> | 
| 强制终止 | 处理卡住的实例。首先尝试默认终止；如果实例无法终止，则强制终止实例。 | 当实例卡住在shutting-down状态时。 | <pre>aws ec2 terminate-instances \<br />--instance-id i-1234567890abcdef0 \<br />--force</pre> | 
| 强制终止并跳过操作系统关闭 | 强制终止并在终止实例时绕过操作系统正常关闭。 | 当需要强制终止并绕过操作系统正常关闭时。 | <pre>aws ec2 terminate-instances \<br />--instance-id i-1234567890abcdef0 \<br />--force \<br />--skip-os-shutdown</pre> | 

有关如何使用每种方法的说明，请参阅以下内容：
+ [终止实例并正常关闭操作系统](terminating-instances.md#terminating-instances-console)
+ [终止实例并绕过操作系统正常关闭](terminating-instances.md#terminating-instances-bypass-graceful-os-shutdown)
+ [强制终止实例](TroubleshootingInstancesShuttingDown.md#force-terminate-ec2-instance)

## 终止实例并正常关闭操作系统
<a name="terminating-instances-console"></a>

您可以使用默认的终止方法终止实例，其中包括尝试正常关闭操作系统。有关更多信息，请参阅 [终止实例的方法](instance-terminate-methods.md)。

------
#### [ Console ]

**使用默认终止方法终止实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择相应实例，然后依次选择**实例状态**、**终止（删除）实例**。

1. 当系统提示您确认时，选择**终止（删除）**。

1. 在您终止某个实例之后，它会在短时间内保持可见，状态为 `terminated`。

   如果终止失败，或者已终止实例的可见时间超过几个小时，请参阅 [已终止实例仍然显示](TroubleshootingInstancesShuttingDown.md#terminated-instance-still-displaying)。

------
#### [ AWS CLI ]

**使用默认终止方法终止实例**  
使用 [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html) 命令。

```
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0
```

------
#### [ PowerShell ]

**使用默认终止方法终止实例**  
使用 [Remove-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2Instance.html) cmdlet。

```
Remove-EC2Instance -InstanceId i-1234567890abcdef0
```

------

## 终止实例并绕过操作系统正常关闭
<a name="terminating-instances-bypass-graceful-os-shutdown"></a>

在终止实例时，您可以绕过操作系统正常关闭。有关更多信息，请参阅 [终止实例的方法](instance-terminate-methods.md)。

------
#### [ Console ]

**终止实例并绕过操作系统正常关闭**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择相应实例，然后依次选择**实例状态**、**终止（删除）实例**。

1. 在**跳过操作系统关闭**下，选中**跳过操作系统关闭**复选框。如果您在控制台中看不到此选项，则当前区域的控制台尚未提供此选项。但是，您可以使用 AWS CLI 或 SDK 访问此功能，也可以在控制台中尝试其他区域。

1. 选择**终止（删除）**。

1. 在您终止某个实例之后，它会在短时间内保持可见，状态为 `terminated`。

   如果终止失败，或者已终止实例的可见时间超过几个小时，请参阅 [已终止实例仍然显示](TroubleshootingInstancesShuttingDown.md#terminated-instance-still-displaying)。

------
#### [ AWS CLI ]

**终止实例并绕过操作系统正常关闭**  
使用 [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html) 命令和 `--skip-os-shutdown`。

```
aws ec2 terminate-instances \
    --instance-ids i-1234567890abcdef0 \
    --skip-os-shutdown
```

------
#### [ PowerShell ]

**终止实例并绕过操作系统正常关闭**  
使用 [Remove-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2Instance.html) cmdlet 和 `-SkipOsShutdown $true`。

```
Remove-EC2Instance `
    -InstanceId i-1234567890abcdef0 `
    -SkipOsShutdown $true
```

------

## 排查实例终止问题
<a name="troubleshoot-instance-terminate"></a>

请求者必须具有调用 `ec2:TerminateInstances` 的权限。有关更多信息，请参阅[使用实例的示例策略](ExamplePolicies_EC2.md#iam-example-instances)。

如果您终止您的实例而另一个实例启动，很可能您已通过 EC2 队列 或 Amazon EC2 Auto Scaling 等功能配置了自动扩展。有关更多信息，请参阅 [自动启动或终止的实例](TroubleshootingInstancesShuttingDown.md#automatic-instance-create-or-delete)。

**注意**  
如果启用了终止保护，则无法终止实例。有关更多信息，请参阅[更改实例终止保护](Using_ChangingDisableAPITermination.md)。

如果您的实例处于 `shutting-down` 状态的时间超出正常范围，可尝试强制终止。如果实例仍处于 `shutting-down` 状态，则应通过 Amazon EC2 服务中的自动进程进行清理（终止）。有关更多信息，请参阅 [延迟的实例终止](TroubleshootingInstancesShuttingDown.md#instance-stuck-terminating)。

# 更改实例终止保护
<a name="Using_ChangingDisableAPITermination"></a>

要防止在使用 Amazon EC2 API 时意外终止实例（无论是直接还是使用其他接口（例如 Amazon EC2 控制台）调用 `TerminateInstances`），则可以为该实例启用*终止保护*。`DisableApiTermination` 属性用于控制是否可以终止实例。默认情况下，终止保护处于禁用状态。您可以在启动实例时、实例正在运行时或已停止时设置此属性的值。

当 `InstanceInitiatedShutdownBehavior` 属性设置为 `terminate` 时，`DisableApiTermination` 属性不会阻止您通过从实例启动关机来终止实例的操作（例如，使用操作系统的系统关机命令）。有关更多信息，请参阅 [更改实例启动的关闭行为](Using_ChangingInstanceInitiatedShutdownBehavior.md)。

**注意事项**
+ 在[计划事件](monitoring-instances-status-check_sched.md)终止实例时，启用停止保护不会阻止 AWS 终止实例。
+ 启用终止保护不会阻止 Amazon EC2 Auto Scaling 在实例运行状况不佳，或在横向缩减事件期间终止实例。可以通过使用[实例横向缩减保护](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html)，来控制自动扩缩组在横向缩减时是否可以终止特定实例。可以通过[暂停 ReplaceUnhealthy 扩展过程](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-suspend-resume-processes.html)，来控制自动扩缩组是否可以终止运行状况不佳的实例。
+ 无法为竞价型实例启用终止保护。

------
#### [ Console ]

**在实例启动时启用终止保护**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在控制面板上，选择**启动实例**。

1. 展开**高级详细信息**。对于**终止保护**，请选择**启用**。

1. 指定完实例详细信息后，选择**启动实例**。

**为实例更改终止保护**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择实例。

1. 依次选择**操作**、**实例设置**、**更改终止保护**。

1. 对于**终止保护**，选择或清除**启用**。

1. 选择**保存**。

------
#### [ AWS CLI ]

**为实例启用终止保护**  
使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --disable-api-termination
```

**为实例禁用终止保护**  
使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --no-disable-api-termination
```

------
#### [ PowerShell ]

**为实例启用终止保护**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

```
Edit-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -DisableApiTermination $true
```

**为实例禁用终止保护**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

```
Edit-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -DisableApiTermination $false
```

------

## 终止具有终止保护的多个实例
<a name="terminate-multiple"></a>

如果您在同一请求中终止跨多个可用区的多个实例，并且启用了一个或多个指定实例以进行终止保护，则请求失败，结果如下：
+ 与受保护实例位于同一可用区中的指定实例不会终止。
+ 位于不同可用区（其他指定实例不受保护）的指定实例将成功终止。

**示例**  
假设您在两个可用区中有以下四个实例。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/Using_ChangingDisableAPITermination.html)

如果您尝试终止同一请求中的所有这些实例，请求将报告失败，结果如下：
+ **实例 1** 和**实例 2** 已成功终止，因为两个实例均未启用终止保护。
+ **实例 3** 和**实例 4** 无法终止，因为**实例 3** 已启用终止保护。

# 更改实例启动的关闭行为
<a name="Using_ChangingInstanceInitiatedShutdownBehavior"></a>

**警告**  
**终止实例是永久且不可逆转的。**  
终止一个实例后，您将无法再连接到该实例，而且也无法对其进行恢复操作。被配置为在终止后删除的所有连接的 Amazon EBS 卷也将被永久删除并且无法恢复。实例存储卷中存储的所有数据将永久丢失。有关更多信息，请参阅 [实例终止的工作原理](how-ec2-instance-termination-works.md)。  
在终止实例之前，请务必确保已将需要在终止后保留的所有数据备份到持久存储中。

当从 Amazon EBS 支持的实例启动关闭（使用 **shutdown** 或 **poweroff** 命令）时，该实例默认会停止。您可以通过更改实例的 `InstanceInitiatedShutdownBehavior` 属性更改此行为，从而实例会改为终止。您可以在实例运行或停止时更改此属性。

**halt** 命令不会启动关闭。如果已经使用，实例并不会终止；而是将 CPU 置于 `HLT` 状态，实例将继续运行。

**注意**  
只有当您从实例本身的操作系统中执行关闭操作时，`InstanceInitiatedShutdownBehavior` 属性才适用。当使用 `StopInstances` API 或 Amazon EC2 控制台停止实例时，该属性不适用。

------
#### [ Console ]

**更改实例启动的关闭操作**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 选择实例。

1. 依次选择**操作**、**实例设置**、**更改关闭操作**。

   **关闭行为**显示当前行为。

1. 要更改行为，请从**关闭行为**中选择**停止**或**终止**。

1. 选择**保存**。

------
#### [ AWS CLI ]

**更改实例启动的关闭操作**  
使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --instance-initiated-shutdown-behavior terminate
```

------
#### [ PowerShell ]

**更改实例启动的关闭操作**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

```
Edit-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -InstanceInitiatedShutdownBehavior terminate
```

------

# 实例终止时保留数据
<a name="preserving-volumes-on-termination"></a>

当 Amazon EC2 实例终止时，您可以在实例存储卷或 Amazon EBS 卷上保留数据。本主题将介绍如何确保数据在实例终止后仍然存在。

## 实例终止如何影响根卷和数据卷
<a name="how-instance-termination-affects-root-and-data-volumes"></a>

**实例存储卷**  
实例终止时，实例存储卷会自动删除，数据也会丢失。要在实例生命周期结束后保留这些数据，可在终止实例之前手动将数据复制到持久性存储，如 Amazon EBS 卷、Amazon S3 存储桶或 Amazon EFS 文件系统。有关更多信息，请参阅 [适用于 Amazon EC2 实例的存储选项](Storage.md)。

**Amazon EBS 卷**  
实例终止时，EBS 卷将被删除或保留，具体取决于每个卷的 `DeleteOnTermination` 属性值：
+ **是**（控制台）/`true`（CLI）：实例终止时，卷将会删除。
+ **否**（控制台）/`false`（CLI）：实例终止时，卷将会保留。保留的卷将继续产生费用。
**注意**  
实例终止后，您可以为保留的卷拍摄快照，或将其附加到其他实例。为避免产生费用，您必须删除该卷。

## EBS 卷的默认删除行为
<a name="default-deletion-behavior-for-ebs-volumes"></a>

默认的 `DeleteOnTermination` 值因卷类型、卷是在启动时还是启动后附加以及附加卷所用的方法（控制台或 CLI）而异：


| 卷类型 | 附加时间 | 附加方法 | 实例终止时的默认行为 | 
| --- | --- | --- | --- | 
| 根卷 | 在启动时 | 控制台或 CLI | 删除 | 
| 根卷 | 启动后 | 控制台或 CLI | Preserve | 
| 数据量 | 在启动时 | 控制台 | Preserve | 
| 数据量 | 在启动时 | CLI | 删除 | 
| 数据量 | 启动后 | 控制台和 CLI | Preserve | 

## 检查卷持久性设置
<a name="check-ebs-volume-persistence-settings"></a>

EBS 卷启动时的默认值由 AMI 上设置的 `DeleteOnTermination` 属性决定。您可以在实例启动时更改该值，以覆盖 AMI 设置。我们建议您在启动实例后验证 `DeleteOnTermination` 属性的默认设置。

**要检查实例终止时是否会删除 Amazon EBS 卷**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择**实例**。

1. 选择实例。

1. 选择**存储**选项卡。

1. 在**块设备**下，向右滚动以选中**终止时删除**列。
   + 如果为**是**，则在实例终止时将会删除卷。
   + 如果为**否**，则在实例终止时不会删除卷。任何未删除的卷将继续产生费用。

## 将根卷更改为在启动时持久保留
<a name="delete-on-termination-ebs-volume"></a>

您可以在启动实例时更改 EBS 根卷的 `DeleteOnTermination` 属性。您还可以对数据卷使用以下过程。

------
#### [ Console ]

**在启动时更改要持久保留的实例根卷**

1. 按照步骤[启动实例](ec2-launch-instance-wizard.md)，但请在完成以下步骤以将根卷更改为持久保留后，再启动实例。

1. 在**配置存储**窗格上，选择**高级**。

1. 在 **EBS 卷**下，展开根卷信息。

1. 对于**终止时删除**，选择**是**。

1. 在 **Summary**（摘要）面板中查看实例配置，然后选择 **Launch instance**（启动实例）。有关更多信息，请参阅 [使用控制台中的启动实例向导来启动 EC2 实例](ec2-launch-instance-wizard.md)。

------
#### [ AWS CLI ]

**在启动时更改要持久保留的实例根卷**  
使用 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令更改块设备映射中 `DeleteOnTermination` 的值。

添加 `--block-device-mappings` 选项：

```
--block-device-mappings file://mapping.json
```

在 `mapping.json` 中，指定设备名称，例如 `/dev/sda1` 或 `/dev/xvda`，并为 `DeleteOnTermination` 指定 `false`。

```
[
  {
    "DeviceName": "device_name",
    "Ebs": {
      "DeleteOnTermination": false
    }
  }
]
```

------
#### [ PowerShell ]

**在启动时更改要持久保留的实例根卷**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 更改块设备映射中 `DeleteOnTermination` 的值。

添加 `-BlockDeviceMapping` 选项：

```
-BlockDeviceMapping $bdm
```

在 `bdm` 中，指定设备名称，例如 `/dev/sda1` 或 `/dev/xvda`，并为 `DeleteOnTermination` 指定 `false`。

```
$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebd.DeleteOnTermination = false
$bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$bdm.DeviceName = "/dev/sda1"
$bdm.Ebs = $ebd
```

------

## 将运行的实例的根卷更改为持久保留
<a name="delete-on-termination-running-instance"></a>

您可以将正在运行的实例的根卷更改为持久保留。您还可以对数据卷使用以下过程。

------
#### [ AWS CLI ]

**将根卷更改为持久保留**  
使用 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0  \
    --block-device-mappings file://mapping.json
```

在 `mapping.json` 中，指定设备名称，例如 `/dev/sda1` 或 `/dev/xvda`，并为 `--DeleteOnTermination` 指定 `false`。

```
[
  {
    "DeviceName": "device_name",
    "Ebs": {
      "DeleteOnTermination": false
    }
  }
]
```

------
#### [ PowerShell ]

**将根卷更改为持久保留**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

添加 `-BlockDeviceMapping` 选项：

```
-BlockDeviceMapping $bdm
```

在 `bdm` 中，指定设备名称，例如 `/dev/sda1` 或 `/dev/xvda`，并为 `DeleteOnTermination` 指定 `false`。

```
$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebd.DeleteOnTermination = false
$bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$bdm.DeviceName = "/dev/sda1"
$bdm.Ebs = $ebd
```

------

# 实例指令引退
<a name="instance-retirement"></a>

计划在 AWS 检测到托管实例的基础硬件发生无法弥补的故障时停用实例。实例根卷类型会决定实例停用的行为：
+ 如果实例的根卷是 Amazon EBS 卷，将停止实例，您可随时重新启动它。启动停止的实例会将其迁移到新的硬件。
+ 如果实例根卷是实例存储卷，则实例将终止，且无法再次使用。

有关实例事件类型的更多信息，请参阅[Amazon EC2 实例的计划事件](monitoring-instances-status-check_sched.md)。

**Topics**
+ [确定计划停用的实例](#instance-retirement-identify)
+ [可对计划停用的由 EBS 支持的实例执行的操作](#instance-retirement-actions-EBS)
+ [可对计划停用的由实例存储支持的实例执行的操作](#instance-retirement-actions-instance-store)

## 确定计划停用的实例
<a name="instance-retirement-identify"></a>

如果已计划停用实例，您将在事件发生之前收到包含实例 ID 和停用日期的电子邮件。您还可以检查已计划停用的实例。

**重要**  
如果某个实例已计划停用，我们建议您尽快采取行动，因为该实例可能已经无法访问。有关更多信息，请参阅 [Check if your instance is reachable](#check-instance)。

**Topics**
+ [监控账户联系人的电子邮件](#identify-by-email)
+ [检查实例](#identify-in-console-cli)

### 监控账户联系人的电子邮件
<a name="identify-by-email"></a>

如果某个实例已计划停用，该账户的主要联系人和操作联系人会在该事件生效之前收到电子邮件。该电子邮件会包含实例 ID 和计划的停用日期。有关更多信息，请参阅《AWS 账户管理 参考指南》中的 [Update the primary contact for your AWS account](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-primary.html) 和 [Update the alternate contacts for your AWS account](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-alternate.html)**。

### 检查实例
<a name="identify-in-console-cli"></a>

如果您不会经常检查所用的电子邮件账户，则可能会错过实例停用通知。您可以随时检查是否有任何实例已计划停用。<a name="identify-retiring-instances"></a>

------
#### [ Console ]

**识别已计划停用的实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **EC2 控制面板**。在**计划的事件**下方，您可以看到与您的 Amazon EC2 实例和卷相关的事件，这些事件按区域列出。  
![\[计划的事件\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/dashboard-scheduled-events.png)

1. 如果您的某个实例列有计划的事件，请选择区域名称下方的链接以转至 **Events (事件)** 页面。

1. **事件**页面会列出与事件相关的所有资源。要查看计划停用的实例，请从第一个筛选列表中选择 **Instance resources**，然后从第二个筛选列表中选择 **Instance stop or retirement**。

1. 如果筛选结果显示有实例被计划停用，请选择该实例，并注意详细信息窗格中**开始时间**字段中的日期和时间。这就是您的实例停用的日期。

------
#### [ AWS CLI ]

**查找已计划停用的实例**  
使用以下 [describe-instance-status](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-status.html) 命令。在您有实例正在运行的每个区域重复此操作。

```
aws ec2 describe-instance-status --filters Name=event.code,Values=instance-retirement
```

------
#### [ PowerShell ]

**查找已计划停用的实例**  
使用 [Get-EC2InstanceStatus](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceStatus.html) cmdlet。在您有实例正在运行的每个区域重复此操作。

```
Get-EC2InstanceStatus -Filter @{Name="event.code"; Values="instance-retirement"}
```

------

## 可对计划停用的由 EBS 支持的实例执行的操作
<a name="instance-retirement-actions-EBS"></a>

要保留即将停用的实例上的数据，您可以执行以下某项操作。请务必在实例停用日期之前执行该操作，以防止意外的停机和数据丢失。

对于 Linux 实例，如果您不确定您的实例是由 EBS 还是由实例存储支持，则请参阅 [Amazon EC2 实例的根卷](RootDeviceStorage.md)。

**检查实例是否可访问**

当您收到计划停用实例的通知时，建议您尽快采取以下操作：
+ 通过[连接](connect.md)或 ping 实例来检查实例是否可以访问。
+ 如果实例可以访问，则应计划在预定停用日期之前的某个适当的时间停止/启动实例，以影响最小为准。有关停止和启动实例以及在停止实例时可能发生的情况（例如，对与实例关联的公有、私有和弹性 IP 地址的影响）的更多信息，请参阅[启动和停止 Amazon EC2 实例](Stop_Start.md)。请注意，停止和启动实例后，实例存储卷上的数据将会丢失。
+ 如果您的实例无法访问，您应立即采取操作，执行[停止/启动](Stop_Start.md)来恢复实例。
+ 或者，如果您想[终止](terminating-instances.md)实例，请尽快计划终止，以便停止为实例产生费用。

**创建实例备份**  
从实例创建由 EBS 支持的 AMI，以便您可以有一个备份。为确保数据的完整性，请在创建 AMI 之前停止实例。您可以等到计划的停用日期（实例停止的日期），或者在停用日期之前自行停止实例。您可随时重新启动实例。有关更多信息，请参阅 [创建 Amazon EBS-backed AMI](creating-an-ami-ebs.md)。

**启动替换实例**  
从实例创建 AMI 后，您可以使用 AMI 启动替换实例。在 Amazon EC2 控制台中，选择您的新 AMI，然后选择**从 AMI 启动实例**。为您的实例配置参数，然后选择**启动实例**。有关每个字段的更多信息，请参阅 [使用控制台中的启动实例向导来启动 EC2 实例](ec2-launch-instance-wizard.md)。

## 可对计划停用的由实例存储支持的实例执行的操作
<a name="instance-retirement-actions-instance-store"></a>

要保留即将停用的实例上的数据，您可以执行以下某项操作。请务必在实例停用日期之前执行该操作，以防止意外的停机和数据丢失。

**警告**  
如果具有实例存储根卷的实例超过了停用日期，则会终止该实例，并且无法恢复该实例或其中存储的任何数据。无论您的实例根卷是哪种类型，在停用实例后，存储在实例存储卷上的数据都会丢失，即使这些卷连接到具有 EBS 根卷的实例也不例外。

**检查实例是否可访问**

当您收到计划停用实例的通知时，建议您尽快采取以下操作：
+ 通过[连接](connect-to-linux-instance.md)或 ping 实例来检查实例是否可以访问。
+ 如果实例无法访问，则很可能无法恢复实例。有关更多信息，请参阅 [排查 Amazon EC2 实例无法访问的问题](troubleshoot-unreachable-instance.md)。AWS 将在计划的停用日期终止您的实例，因此，对于无法访问的实例，您可以立即自行将其[终止](terminating-instances.md)。

**启动替换实例**  
使用 AMI 工具从实例创建 Amazon S3 支持的 AMI，如[创建 Amazon S3 支持的 AMI](creating-an-ami-instance-store.md)中所述。在 Amazon EC2 控制台中，选择您的新 AMI，然后选择**从 AMI 启动实例**。为您的实例配置参数，然后选择**启动实例**。有关每个字段的更多信息，请参阅 [使用控制台中的启动实例向导来启动 EC2 实例](ec2-launch-instance-wizard.md)。

**将实例转换为由 EBS 支持的实例**  
将数据传输到 EBS 卷，制作卷的快照，然后从快照创建 AMI。您可以从新 AMI 启动替换实例。有关更多信息，请参阅 [将 Amazon S3 支持的 AMI 转换为 EBS-backed AMI](Using_ConvertingS3toEBS.md)。