停止和启动您的实例 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

停止和启动您的实例

您可以停止和启动将 Amazon EBS 卷作为其根设备的实例。该实例将保留其实例 ID,但是可以按照 修改已停止的实例 部分中所述进行修改。当您停止某个实例时,该实例将关闭。启动实例时,该实例通常会迁移到新的底层主机,并分配新的公有 IPv4 地址。

当您停止某个实例时,它不会被删除。当您决定不再需要实例时,可以终止该实例。有关更多信息,请参阅终止实例。如果您想休眠某个实例以保存实例内存(RAM)中的内容,请参阅 对您的按需型实例或竞价型实例进行休眠。有关实例生命周期操作之间的区别,请参阅 重启、停止、休眠和终止之间的区别

Amazon 可为您的实例计划事件,例如重启、停止/启动或停用。有关 Amazon 托管的计划事件类型以及如何查看和接收有关计划事件的通知的信息,请参阅 实例的计划事件

下图显示了 Amazon EC2 实例停止后丢失的内容和仍然存在的情况。当实例停止时,它会丢失所有附加的实例存储卷和存储在这些卷上的数据、存储在实例 RAM 上的数据以及分配的公有 IPv4 地址(如果弹性 IP 地址未与实例关联)。实例保留分配的私有 IPv4 地址、与实例关联的弹性 IP 地址、任何 IPv6 地址以及任何附加的 Amazon EBS 卷和这些卷上的数据。


			当实例停止时,公有 IPv4 地址、RAM 和实例存储数据会丢失。

与启动和停止实例相关的成本

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

正在停止 — 当某个实例的状态变为 shutting-downterminated,该实例就不再产生费用。您无需支付已停止实例的使用费或数据传输费。存储 Amazon EBS 存储卷会产生费用。

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

查找所有正在运行和已停止的实例

您可以在 Amazon EC2 全局视图中的单个页面上找到所有 Amazon Web Services 区域 中正在运行和已停止的所有实例。此功能对于清点资源和查找忘记的实例特别有用。有关如何使用全局视图的信息,请参阅 Amazon EC2 全局视图

停止实例的先决条件

您可以停止由 Amazon EBS 支持的实例。由实例存储卷支持的实例不支持停止操作。要更好地了解这两种卷类型之间的区别,请参阅 适用于 Amazon EC2 实例的存储选项

要验证实例的根设备类型,您可以使用 Amazon EC2 控制台或 Amazon CLI。

Amazon EC2 console

在 Amazon EC2 控制台中,打开实例窗格并选择实例。根设备类型列在存储选项卡的根设备详细信息下。

Amazon CLI

您可以通过运行 describe-instances Amazon CLI 命令并检查 RootDeviceType 的输出(ebsinstance-store)来验证实例的根设备类型。有关更多信息,请参阅 Amazon CLI 命令参考中的 describe-instances

手动停止和启动实例

您可以使用控制台或命令行停止和启动由 Amazon EBS 支持的实例。

警告

当您停止某个实例时,任何附加实例存储卷上的数据都将被擦除。在停止实例之前,请确认您是否已将所需数据从实例存储卷复制到持久性存储,例如 Amazon EBS 或 Amazon S3。由实例存储卷支持的实例不支持停止操作。

Console
停止和启动由 Amazon EBS 支持的实例
  1. 登录到 Amazon Web Services Management Console 并打开 Amazon EC2 控制台(https://console.aws.amazon.com/ec2/)。

  2. 在左侧导航窗格中,选择实例,然后选择实例。

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

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

  5. (可选)当实例已停止时,您可以修改特定的实例属性。有关更多信息,请参阅修改已停止的实例

  6. 要启动已停止的实例,请选择该实例,然后依次选择实例状态启动实例

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

Command line
停止和启动由 Amazon EBS 支持的实例

运行以下命令之一:

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

自动停止和启动您的实例

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

Amazon 上的实例调度器

您可以在 Amazon 上使用实例调度器以自动开启和停止 EC2 实例。有关更多信息,请参阅如何将实例调度器与 CloudFormation 一起使用来制定 EC2 实例的计划? 请注意,需要支付额外费用

Amazon Lambda 和 Amazon EventBridge 规则

您可以使用 Lambda 和 EventBridge 规则按计划停止和开启您的实例。有关更多信息,请参阅如何使用 Lambda 定期停止和开启 Amazon EC2 实例?

Amazon EC2 Auto Scaling

为确保您有正确数量的 Amazon EC2 实例来处理应用程序的负载,请创建自动扩缩组。Amazon EC2 Auto Scaling 确保您的应用程序始终具有处理流量需求的适当容量,并通过仅在需要时启动实例来节省成本。请注意,Amazon EC2 Auto Scaling 会终止而不是停止不需要的实例。要设置自动扩缩组,请参阅 Amazon EC2 Auto Scaling 入门

在停止实例时发生的情况

当您停止实例时,将在实例的操作系统级别注册更改,一些系统资源会丢失,有些会持续存在。

停止实例时,将在操作系统级别注册以下内容:
  • API 请求会向访客发送按钮按下事件。

  • 该按钮按下事件致使各种系统服务停止。来自管理程序的 ACPI 关闭按钮按下事件触发正常关闭。

  • 启动 ACPI 关闭。

  • 当正常关闭进程退出时,实例即会关闭。没有可配置的操作系统关闭时间。

  • 如果实例操作系统未在几分钟内完全关闭,则会执行硬关闭。

  • 实例将停止运行。

  • 实例的状态将先更改为 stopping,然后更改为 stopped

  • [自动扩缩] 如果您的实例在自动扩缩组中,当实例状态是除 running 以外的其他 Amazon EC2 状态,或者状态检查的状态变为 impaired,则 Amazon EC2 Auto Scaling 会认为实例运行不正常并予以替换。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的 Auto Scaling 实例的运行状况检查

当您停止实例时,以下内容丢失
  • 存储在 RAM 中的数据。

  • 实例存储卷中存储的数据。

  • Amazon EC2 在启动或开始时自动分配给实例的公有 IPv4 地址。要保留永不更改的公有 IPv4 地址,您可以将弹性 IP 地址与您的实例关联。

当您停止实例时,以下内容持续存在
  • 任何附加的 Amazon EBS 卷。

  • 存储在附加的 Amazon EBS 卷中的数据。

  • 私有 IPv4 地址。

  • IPv6 地址。

  • 与实例关联的弹性 IP 地址。请注意,当实例停止时,我们向您收取相关弹性 IP 地址的费用

有关停止 Mac 实例时会发生什么的信息,请参阅停止并终止您的 Mac 实例。

在启动实例时发生的情况

启动实例时,将在实例级别注册更改。

启动 EC2 实例时,会出现以下情况:
  • 大多数情况下,实例会迁移到新的底层主机(尽管在某些情况下,例如在专属主机配置中将实例分配到主机时,它仍会保留在当前主机上)。

  • 如果将实例配置为接收公有 IPv4 地址,Amazon EC2 会为实例分配一个新的公有 IPv4 地址。要保留永不更改的公有 IPv4 地址,您可以将弹性 IP 地址与您的实例关联。

修改已停止的实例

当实例停止时,您可以像对待所有其他卷一样修改根卷(例如,修复文件系统问题或更新软件)。

只有在实例停止时,您才能修改以下实例属性:
  • 实例类型

  • 用户数据

  • 内核

  • RAM 磁盘

如果您在实例运行时尝试修改这些属性,Amazon EC2 会返回 IncorrectInstanceState 错误。

您可以使用 Amazon EC2 控制台或 Amazon CLI 更改已停止实例的以下属性:
  • 实例类型

  • 用户数据

  • EBS 优化

不支持使用 Amazon EC2 控制台修改以下属性:
  • DeleteOnTermination

  • 内核

  • RAM 磁盘

修改实例属性

您可以使用 Amazon EC2 控制台或命令行修改实例属性。

Console
要在 Amazon Web Services Management Console 中修改以下内容,请执行以下操作 请参阅以下资源

实例类型

更改实例类型

用户数据

用户数据和控制台

EBS 优化

修改 EBS 优化

根卷的 DeleteOnTermination 属性

更新正在运行的实例的块储存设备映射。您无需停止实例即可更改此属性。

Command line
使用命令行修改实例属性

您可以使用以下命令修改实例属性。有关这些命令行界面的更多信息,请参阅 访问 Amazon EC2

修改实例的根卷

您可以通过执行以下步骤来修改实例的根卷。

  1. 将该卷从已停止的实例中分离。

  2. 将卷附加到正在运行的实例。

  3. 修改卷。

  4. 将该卷从正在运行的实例中分离。

  5. 将卷重新附加到已停止的实例。

确保使用在实例块设备映射中指定为根设备的存储设备名称重新附加根卷。有关如何将卷分离和附加到实例的详细步骤,请参阅 从 Linux 实例分离 Amazon EBS 卷将 Amazon EBS 卷挂载到实例。有关指定块设备映射的更多帮助,请参阅 块设备映射

启用停止保护

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

Amazon EC2 ModifyInstanceAttribute API 的 DisableApiStop 属性可控制是否可以使用 Amazon EC2 控制台、Amazon CLI,或 Amazon EC2 API 停止实例。您可以在实例启动、运行或已停止时设置该属性值。

限制
  • 启用停止保护并不能防止通过使用操作系统命令(如 shutdownpoweroff)从实例启动关闭,来意外停止实例。

  • 计划事件停止实例时,启用停止保护不会阻止 Amazon 停止实例。

  • 启用停止保护不会阻止 Amazon EC2 Auto Scaling 在实例运行状况不佳或在横向缩减事件期间终止实例。您可以通过使用实例横向缩减保护控制自动扩缩组在横向缩减时是否可以终止特定实例。

  • 停止保护不仅可防止实例意外停止,还可以防止使用控制台、Amazon CLI 或 API 时意外终止实例。但是,它不会自动设置 DisableApiTermination 属性。请注意,当 DisableApiStop 属性设置为 false 时,DisableApiTermination 属性设置确定是否可以使用控制台、Amazon CLI 或 API 终止实例。有关更多信息,请参阅终止实例

  • 无法针对由实例存储提供支持的实例启用停止保护。

  • 无法针对竞价型实例启用停止保护。

  • 启用或禁用停止保护时,Amazon EC2 API 遵循最终一致性模型。这意味着运行设置停止保护属性的命令的结果可能不会立即对您运行的所有后续命令可见。有关更多信息,请参阅《Amazon EC2 API 参考》中的最终一致性

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

您可以使用以下方法之一在启动实例时为实例启用停止保护。

Console
在实例启动时为实例启用停止保护
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在控制面板上,选择启动实例

  3. 新启动实例向导中配置您的实例。

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

Amazon CLI
在实例启动时启用停止保护

使用 run-instances Amazon CLI 命令启动实例,并指定 disable-api-stop 参数。

aws ec2 run-instances \ --image-id ami-a1b2c3d4e5example \ --instance-type t3.micro \ --key-name MyKeyPair \ --disable-api-stop \ ...

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

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

Console
为正在运行或已停止的实例启用停止保护
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 选择实例,然后依次选择操作>实例设置>更改停止保护

  4. 选择 Enable(启用)复选框,然后选择 Save(保存)。

Amazon CLI
为正在运行或已停止的实例启用停止保护

使用 modify-instance-attribute Amazon CLI 命令并指定 disable-api-stop 参数。

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

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

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

Console
为正在运行或已停止的实例禁用停止保护
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 选择实例,然后依次选择 Actions(操作)、Instance Settings(实例设置)、Change Stop Protection(更改停止保护)

  4. 取消选中 Enable(启用)复选框,然后选择 Save(保存)。

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

使用 modify-instance-attribute Amazon CLI 命令并指定 no-disable-api-stop 参数。

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

测试应用程序对停止和启动的响应

您可以使用 Amazon Fault Injection Service 测试您的实例停止和启动时您的应用程序是如何响应的。有关更多信息,请参阅 Amazon Fault Injection Service 用户指南

排查实例的停止问题

如果您停止了由 Amazon EBS 支持的实例,而该实例“卡在”了 stopping 状态,则可以强制停止它。有关更多信息,请参阅排查实例的停止问题