终止实例
当您不再需要实例时,可将其删除。这称为终止 实例。实例的状态一旦变为 shutting-down
或 terminated
,就不再产生与该实例相关的费用。
在您终止之后,您将无法连接到或启动实例。但是您可以使用同一 AMI 启动其他实例。如果您愿意停止并启动您的实例,或者将其休眠,请参阅停止和启动您的实例 或休眠 Windows 按需型实例。有关更多信息,请参阅重启、停止、休眠和终止之间的区别。
实例终止
在您终止实例之后,短时间内仍可在控制台中看见该实例,然后该条目将自动被删除。您无法自行删除已终止的实例条目。在实例终止后,标签和卷等资源会逐步与实例取消关联,因此过一小段时间后,它们可能在终止的实例上不再可见。
当实例终止时,与该实例关联的所有实例存储卷上的数据都会被删除。
默认情况下,当实例终止时,Amazon EBS 根设备卷将自动删除。但是,默认情况下,即使在实例终止后,您在启动时附加的所有额外 EBS 卷或您附加到现有实例的所有 EBS 卷也会保留。这一操作是由卷的 DeleteOnTermination
属性控制的,您可以对其进行修改。有关更多信息,请参阅在实例终止时保留 Amazon EBS 卷。
您可以使用 Amazon Web Services Management Console、CLI 和 API 防止实例被别人意外终止。此功能对 Amazon EC2 实例存储支持的实例和 Amazon EBS 支持的实例都适用。每个实例的 DisableApiTermination
属性默认值均为 false
(可以通过 Amazon EC2 终止实例)。您可以在实例运行或停止时修改此实例属性 (如果是由 Amazon EBS 支持的实例)。有关更多信息,请参阅启用终止保护。
当使用操作系统中的系统关闭命令从实例启动关闭时,您可以控制是否应该关闭或终止实例。有关更多信息,请参阅更改实例启动的关闭操作。
如果您在实例终止时运行脚本,您的实例可能会异常终止,因为我们无法确保关闭脚本运行。Amazon EC2 尝试干净完全关闭实例并运行任何系统关闭脚本;但是,某些事件(例如硬件故障)可能会阻止这些系统关闭脚本运行。
通过跨可用区域终止保护来终止多个实例
如果您终止跨多个可用区域的多个实例,并且启用了一个或多个指定实例以进行终止保护,则请求失败,结果如下:
-
与受保护实例位于同一可用区中的指定实例不会终止。
-
位于不同可用区(其他指定实例不受保护)的指定实例将成功终止。
例如,假设您有以下实例:
实例 | 可用区 | 终止保护 |
---|---|---|
实例 A | us-east-1a |
Disabled |
实例 B | Disabled |
|
实例 C | us-east-1b |
Enabled |
实例 D | Disabled |
如果您尝试终止同一请求中的所有这些实例,请求将报告失败,结果如下:
-
实例 A 和实例 B 已成功终止,因为
us-east-1a
中所有指定的实例都未启用终止保护。 -
实例 C 和实例 D 终止失败,因为
us-east-1b
中至少一个指定的实例(实例 C)已启用终止保护。
在终止实例时发生的情况
使用 terminate-instances
命令终止 EC2 实例后,将在操作系统级别注册以下内容:
-
API 请求将向访客发送按钮按下事件。
-
由于此按钮按下事件,将停止各种系统服务。systemd 处理系统的正常关闭。来自管理程序的 ACPI 关闭按钮按下事件触发正常关闭。
-
启动 ACPI 关闭。
-
当正常关闭进程退出时,实例将关闭。没有可配置的操作系统关闭时间。
终止实例
您可以使用 Amazon Web Services Management Console或命令行终止实例。
默认情况下,当您从 Amazon EBS 支持的实例启动关闭(使用 shutdown 或 poweroff 命令)时,该实例会停止。halt 命令不会启动关闭。如果使用,实例并不会终止,而是将 CPU 置于 HLT
状态,实例将保持运行。
运行受控的故障注入实验
您可以使用 Amazon Fault Injection Simulator 测试您的实例终止时您的应用程序如何响应。有关更多信息,请参阅 Amazon Fault Injection Simulator 用户指南。
启用终止保护
默认情况下,您可以使用 Amazon EC2 控制台、命令行界面或 API 终止您的实例。要使用 Amazon EC2 防止实例意外终止,可以为实例启用终止保护。DisableApiTermination
属性可控制是否可以使用控制台、CLI 或 API 终止实例。默认情况下,终止保护处于禁用状态。您可以在实例启动、运行或已停止时设置该属性值 (针对由 Amazon EBS 支持的实例)。
当设置 DisableApiTermination
属性时,InstanceInitiatedShutdownBehavior
属性不会阻止您通过从实例启动关闭来终止实例 (使用操作系统的系统关闭命令)。有关更多信息,请参阅更改实例启动的关闭操作。
限制
您不能为竞价型实例启用终止保护,当 Spot 价格超过您愿意为竞价型实例支付的金额时,竞价型实例将终止。不过,您可以准备应用程序来处理竞价型实例中断。有关更多信息,请参阅竞价型实例中断。
DisableApiTermination
属性不会阻止 Amazon EC2 Auto Scaling 终止实例。对于 Auto Scaling 组中的实例,请使用下列 Amazon EC2 Auto Scaling 功能而非 Amazon EC2 终止保护:
-
要阻止作为 Auto Scaling 组一部分的实例在缩小时终止,请使用实例缩小保护。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的使用实例横向缩减保护。
-
要阻止 Amazon EC2 Auto Scaling 终止运行状况不佳的实例,请暂停
ReplaceUnhealthy
流程。有关更多信息,请参阅Amazon EC2 Auto Scaling 用户指南中的暂停和恢复扩展流程。 -
要指定 Amazon EC2 Auto Scaling 应先终止的实例,请选择终止策略。有关更多信息,请参阅Amazon EC2 Auto Scaling 用户指南中的自定义终止策略。
要在实例启动时启用终止保护
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
在控制面板中,选择 Launch Instance 并按照向导中的说明操作。
-
在 Configure Instance Details (配置实例详细信息) 页面上,选中 Enable termination protection (启用终止保护) 复选框。
启用正在运行或已停止的实例的终止保护
-
选择相应实例,然后依次选择 Actions (操作)、Instance Settings (实例设置)、Change Termination Protection (更改终止保护)。
-
选择 Yes, Enable (是,启用)。
禁用正在运行或已停止的实例的终止保护
-
选择相应实例,然后依次选择 Actions (操作)、Instance Settings (实例设置)、Change Termination Protection (更改终止保护)。
-
选择 Yes, Disable (是,禁用)。
使用命令行启用或禁用终止保护
您可以使用以下任一命令。有关这些命令行界面的更多信息,请参阅 访问 Amazon EC2。
modify-instance-attribute (Amazon CLI)
Edit-EC2InstanceAttribute (Amazon Tools for Windows PowerShell)
更改实例启动的关闭操作
默认情况下,从由 Amazon EBS 支持的实例启动关闭(使用 shutdown 或 poweroff 之类的命令),该实例将会停止。(请注意,halt 不会发出 poweroff 命令;如果使用 halt 命令,实例将不会终止;而是将 CPU 置于 HLT 状态,实例仍保持运行)。您可以使用实例的 InstanceInitiatedShutdownBehavior
属性更改此操作,以便终止实例。您可以在实例运行或停止时更新此属性。
您可以使用 Amazon EC2 控制台或命令行更新 InstanceInitiatedShutdownBehavior
属性。InstanceInitiatedShutdownBehavior
属性只在您从实例自身的操作系统执行关闭操作时适用;在您使用 StopInstances
API 或 Amazon EC2 控制台停止实例时不适用。
在实例终止时保留 Amazon EBS 卷
当实例终止时,Amazon EC2 会使用每个挂载的 Amazon EBS 卷的 DeleteOnTermination
属性的值来确定是保留还是删除该卷。
根据卷是实例的根卷还是附加到实例的非根卷,DeleteOnTermination
属性的默认值会有所不同。
- 根卷
-
默认情况下,实例的根卷的
DeleteOnTermination
属性将设置为true
。因此,当某个实例终止时,默认为删除该实例的根卷。DeleteOnTermination
属性可由 AMI 的创建者以及实例的启动者设置。当 AMI 的创建者或实例的启动者更改属性时,新的设置将覆盖原始 AMI 默认设置。我们建议您在使用 AMI 启动实例后验证DeleteOnTermination
属性的默认设置。 - 非根卷
-
默认情况下,当您将非根 EBS 卷附加到某个实例时,其
DeleteOnTermination
属性将设置为false
。因此,默认为保留这些卷。在该实例终止后,您可以为保留的卷拍摄快照,或将其附加到另一个实例。您必须删除卷以避免产生更多费用。有关更多信息,请参阅删除 Amazon EBS 卷。
要验证使用中的 EBS 卷的 DeleteOnTermination
属性的值,请查看该实例的块储存设备映射。有关更多信息,请参阅查看实例块储存设备映射中的 EBS 卷。
在启动该实例或在该实例正在运行时,您可以更改卷的 DeleteOnTermination
属性的值。
使用控制台将根卷更改为在启动时持久保留
当您启动实例时,可以使用控制台更改 DeleteOnTermination
属性。要对正在运行的实例更改此属性,您必须使用命令行。
使用控制台在启动时更改实例要持久保留的根卷
-
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
从控制台控制面板中,选择 Launch Instance。
-
在 Choose an Amazon Machine Image (AMI) 页面上,选择一个 AMI,然后选择 Select。
-
遵循向导完成 Choose an Instance Type (选择一个实例类型) 和 Configure Instance Details (配置实例详细信息) 页面。
-
在 Add Storage (添加存储) 页面上,取消选中根卷的 Delete On Termination (终止时删除) 复选框。
-
完成其余向导页面上的操作,然后选择 Launch。
在新控制台中,您可以通过实例的详细信息窗格查看根设备卷的详细信息以验证设置。在存储库的存储选项卡,在块储存设备中,向右滚动以查看终止时删除设置。默认情况下,Delete on termination (终止时删除) 为 Yes
。如果您更改默认行为,Delete on termination (终止时删除) 将为 No
。
在旧控制台中,您可以通过实例的详细信息窗格查看根设备卷的详细信息以验证设置。在 Block devices (块储存设备) 旁,选择根设备卷的条目。默认情况下,Delete on termination (终止时删除) 为 True
。如果您更改默认行为,Delete on termination (终止时删除) 将为 False
。
使用命令行将根卷更改为在启动时持久保留
当您启动 EBS 支持的实例时,可以使用以下命令之一将根设备卷更改为持久保留。有关这些命令行界面的更多信息,请参阅 访问 Amazon EC2。
run-instances (Amazon CLI)
New-EC2Instance(Amazon Tools for Windows PowerShell)
在要保留的卷的块设备映射中,纳入 --DeleteOnTermination
,并指定 false
。
例如,若要保留卷,需将以下选项添加到 run-instances
命令:
--block-device-mappings file://mapping.json
在 mapping.json
中,指定设备名称,例如 /dev/sda1
或 /dev/xvda
,并为 --DeleteOnTermination
指定 false
。
[ { "DeviceName": "
device_name
", "Ebs": { "DeleteOnTermination": false } } ]
使用命令行将运行的实例的根卷更改为持久保留
您可以使用以下命令之一将正在运行的 EBS 支持实例的根设备卷更改为持久保留。有关这些命令行界面的更多信息,请参阅 访问 Amazon EC2。
modify-instance-attribute (Amazon CLI)
Edit-EC2InstanceAttribute (Amazon Tools for Windows PowerShell)
例如,使用以下命令:
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 } } ]