

# Amazon EC2 实例类型更改
<a name="ec2-instance-resize"></a>

随着您的需求变化，您可能会发现您的实例过度使用 (实例类型过小) 或利用不足 (实例类型过大)。如果是这种情况，您可以通过更改实例类型来调整实例的大小。例如，如果您 `t2.micro` 实例对于其工作负载来说太小，您可以通过将其更改为更大的 T2 实例类型来增加其大小，例如 `t2.large`。或者，您可以将其更改其它实例类型，如 `m5.large`。您可能还想将实例类型从上一代更改为最新一代以利用某些功能，例如 IPv6 支持。

如果您想要针对能够最好地处理现有工作负载的实例类型获得建议，则可以使用 AWS Compute Optimizer。有关更多信息，请参阅 [从 Compute Optimizer 获取 EC2 实例建议](ec2-instance-recommendations.md)。

更改实例类型时，您将开始支付新实例类型的费率。有关所有实例类型的按需费率，请参阅 [Amazon EC2 按需定价](https://aws.amazon.com/ec2/pricing/on-demand/)。

要在不更改实例类型的情况下，向实例添加额外的存储空间，请向实例添加一个 EBS 卷。有关更多信息，请参阅《Amazon EBS 用户指南》**中的[将 Amazon EBS 卷挂载到实例](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html)。

## 要遵循哪些说明？
<a name="choose-instance-resize-instructions"></a>

对于更改实例类型，我们有不同的说明。应该使用哪些说明取决于实例的根卷，以及实例类型是否与实例的当前配置兼容。有关如何确定兼容性的信息，请参阅 [更改实例类型的兼容性](resize-limitations.md)。

使用下表确定需要遵守的说明。


| 根卷 | 兼容性 | 使用以下说明进行操作 | 
| --- | --- | --- | 
| EBS | 兼容 | [更改实例类型](change-instance-type-of-ebs-backed-instance.md) | 
| EBS | 不兼容 | [迁移到新实例类型](migrate-instance-configuration.md) | 
| 实例存储 | 不适用 | [迁移到新实例类型](migrate-instance-configuration.md) | 

# 更改实例类型的兼容性
<a name="resize-limitations"></a>

仅当实例的当前配置与您所需的实例类型兼容时，才能更改实例类型。如果您所需的实例类型与实例的当前配置不兼容，则您必须启动一个具有与新实例类型兼容的配置的新实例，并将应用程序迁移到新实例。

可通过以下方式确定兼容性：

**虚拟化类型**  
Linux AMI 使用两种虚拟化之一：半虚拟化 (PV) 或硬件虚拟机 (HVM)。如果是从 PV AMI 启动的实例，则您无法将其更改为仅限 HVM 的实例类型。有关更多信息，请参阅 [虚拟化类型](ComponentsAMIs.md#virtualization_types)。要查看实例的虚拟化类型，请在 Amazon EC2 控制台中查看 **Instances**（实例）屏幕的详细信息窗格中的 **Virtualization**（虚拟化）值。

**架构**  
AMI 特定于处理器的架构，因此您必须选择与当前实例类型具有相同处理器架构的实例类型。例如：  
+ 如果当前实例类型处理器是基于 Arm 架构的，则仅限于支持基于 Arm 架构的处理器的实例类型，例如 C6g 和 M6g。
+ 只有以下实例类型支持 32 位 AMIs：`t2.nano`、`t2.micro`、`t2.small`、`t2.medium`、`c3.large`、`t1.micro`、`m1.small`、`m1.medium` 和 `c1.medium`。如需更改 32 位实例的实例类型，则仅限使用以下实例类型。

**网络适配器**  
如果从一个网络适配器的驱动程序切换到另一个网络适配器，则在操作系统创建新的适配器时将重置网络适配器设置。要重新配置设置，您可能需要使用管理员权限访问本地账户。以下是从一个网络适配器移到另一个网络适配器的示例：  
+ AWS PV（T2 实例）到 Intel 82599 VF（M4 实例）
+ Intel 82599 VF（大多数 M4 实例）到 ENA（M5 实例）
+ ENA（M5 实例）到高带宽 ENA（M5n 实例）

**增强联网**  
支持[增强联网](enhanced-networking.md)的实例类型需要安装必要的驱动程序。例如，[基于 Nitro 的实例](instance-types.md#instance-hypervisor-type)需要安装了弹性网络适配器（ENA）驱动程序的 EBS-backed AMI。要将实例的实例类型从不支持增强联网的类型更改为支持增强联网的实例类型，必须根据需要在实例上安装 [ENA 驱动程序](enhanced-networking-ena.md)或 [ixgbevf 驱动程序](sriov-networking.md)。  
在启用 ENA Express 的情况下调整实例大小时，新实例类型必须同时支持 ENA Express。有关支持 ENA Express 的实例类型列表，请参阅 [ENA Express 支持的实例类型](ena-express.md#ena-express-supported-instance-types)。  
要将实例类型从支持 ENA Express 更改为不支持 ENA Express，请确保在调整实例大小之前尚未启用 ENA Express。

**NVMe**  
在[基于 Nitro 的实例](instance-types.md#instance-hypervisor-type)上，EBS 卷显示为 NVMe 块储存设备。如果将实例类型不支持 NVMe 的实例的实例类型更改为支持 NVMe 的实例类型，您必须先在实例上安装 NVMe 驱动程序。此外，您在块设备映射中所指定设备的设备名称将使用 NVMe 设备名称（`/dev/nvme[0-26]n1`）进行重命名。  
[Linux 实例] 因此，要使用 `/etc/fstab` 在启动时挂载文件系统，必须使用 UUID/标签而非设备名称。

**卷限制**  
您可以挂载到实例的最大 Amazon EBS 卷数取决于实例类型和实例规模。有关更多信息，请参阅 [Amazon EC2 实例的 Amazon EBS 卷限制](volume_limits.md)。  
您只能更改为支持的卷数与当前附加到实例的卷数相同或更大的实例类型或实例大小。如果您更改为不支持当前附加卷数量的实例类型或实例大小，则请求会失败。例如，如果您从具有 32 个附加卷的 `m7i.4xlarge` 实例更改为最多支持 27 个卷的 `m6i.4xlarge`，请求将失败。

**NitroTPM**  
如果使用已启用 [NitroTPM](nitrotpm.md) 且实例类型支持 NitroTPM 的 AMI 启动了实例，则该实例将在启用 NitroTPM 的情况下启动。您只能更改为使用同样支持 NitroTPM 的实例类型。

# 更改 Amazon EC2 实例的实例类型
<a name="change-instance-type-of-ebs-backed-instance"></a>

如果您需要的实例类型与实例的当前配置兼容，请按照以下说明来更改 Amazon EBS 支持的实例的实例类型。有关更多信息，请参阅 [更改实例类型的兼容性](resize-limitations.md)。

**注意事项**
+ 您必须先停止实例，然后才能更改其实例类型。当实例停止时，请确保您已计划停机时间。停止实例并更改其实例类型可能需要几分钟时间，重新启动实例所用的时间则由应用程序的启动脚本决定。有关更多信息，请参阅 [启动和停止 Amazon EC2 实例](Stop_Start.md)。
+ 当您停止并启动实例时，我们会将该实例移动到新硬件。如果您的实例具有公有 IPv4 地址，这并非弹性 IP，我们会释放该地址并向实例提供一个新的公有 IPv4 地址。有关实例在整个生命周期中的 IP 地址行为的更多信息，请参阅[实例状态之间的区别](ec2-instance-lifecycle.md#lifecycle-differences)。
+ 您无法更改[竞价型实例](using-spot-instances-request.md#stopping-a-spot-instance)的实例类型。
+ [Windows 实例] 建议您在更改实例类型之前，更新 AWS PV 驱动程序包。有关更多信息，请参阅 [在 EC2 Windows 实例上升级半虚拟化驱动程序](Upgrading_PV_drivers.md)。
+ 如果您的实例处于自动扩缩组中，则 Amazon EC2 Auto Scaling 服务会将已停止的实例标记为运行状况不佳，可能会终止该实例并启动替换实例。为防止出现此情况，您可以在更改实例类型时，为组暂停扩展流程。有关更多信息，请参阅 *Amazon EC2 Auto Scaling 用户指南*中的[暂停和恢复 Auto Scaling 组的进程](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-suspend-resume-processes.html)。
+ 当您更改具有 NVMe 实例存储卷实例的实例类型时，更新后的实例可能会有更多实例存储卷，因为即使没有在 AMI 或实例块储存设备映射中指定，所有 NVMe 实例存储卷都可用。否则，已更新的实例通常具有您在启动原始实例时指定的相同实例存储卷数。
+ 您可以挂载到实例的最大 Amazon EBS 卷数取决于实例类型和实例规模。您不能更改为不支持已附加到您实例的卷数量的实例类型或实例大小。有关更多信息，请参阅 [Amazon EC2 实例的 Amazon EBS 卷限制](volume_limits.md)。
+ [Linux 实例] 您可以使用 `AWSSupport-MigrateXenToNitroLinux` 运行手册将兼容 Linux 实例从 Xen 实例类型迁移到 Nitro 实例类型。有关更多信息，请参阅**《AWS Systems Manager Automation Runbook Reference》中的 [https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-migrate-xen-to-nitro.html](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-migrate-xen-to-nitro.html)。
+ [Windows 实例] 有关将兼容的 Windows 实例从 Xen 实例类型迁移到 Nitro 实例类型的其他指南，请参阅[迁移到最新一代的实例类型](migrating-latest-types.md)。

**更改由 Amazon EBS 支持的实例的实例类型**

1. （可选）如果新实例类型需要现有实例上未安装的驱动程序，您必须先连接到您的实例并安装驱动程序。有关更多信息，请参阅 [更改实例类型的兼容性](resize-limitations.md)。

1. [Windows 实例] 如果您将 Windows 实例配置为使用[静态 IP 寻址](config-windows-multiple-ip.md#step1)，并将不支持增强联网的实例类型更改为支持增强联网的实例类型，则当您在重新配置静态 IP 寻址时，可能会收到有关潜在 IP 地址冲突的警告。要防止此情况出现，在更改实例类型之前，请在网络接口上为实例启用 DHCP。从您的实例中，打开 **Network and Sharing Center**（网络和共享中心），打开网络接口的 **Internet Protocol Version 4 (TCP/IPv4) Properties**（互联网协议版本 4 (TCP/IPv4) 属性），并选择 **Obtain an IP address automatically**（自动获取 IP 地址）。更改实例类型并在网络接口上重新配置静态 IP 寻址。

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

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

1. 选择所需实例，然后依次选择**实例状态**、**停止实例**。当系统提示您确认时，选择 **Stop**。停止实例可能需要几分钟时间。

1. 在实例处于选中状态时，依次选择**操作**、**实例设置**、**更改实例类型**。若实例状态不是 `stopped`，则此操作会显示为灰色。

1. 请在 **Change instance type**（更改实例类型）页面上执行以下操作：

   1. 对于 **Instance type**（实例类型），选择您所需的实例类型。

      如果列表中未包含该实例类型，则说明其与您的实例配置不兼容。请改为使用以下说明：[通过启动新的 EC2 实例迁移到新实例类型](migrate-instance-configuration.md)。

   1. （可选）如果您选择的实例类型支持 EBS 优化，则选择 **EBS-optimized**（EBS 优化）以启用 EBS 优化，或取消选择 **EBS-optimized**（EBS 优化）以禁用 EBS 优化。

      如果您选择的实例类型默认情况下已经过 EBS 优化，则 **EBS-optimized**（EBS 优化）已选中，您无法取消选择。

   1. （可选）配置新实例类型的 vCPU 选项。

      当您对现有实例更改实例类型时，Amazon EC2 会尽可能将现有实例的 CPU 选项设置应用到新实例。如果新的实例类型不支持这些设置，则 CPU 选项将重置为**无**。对于新实例类型，此选项会使用默认 vCPU 数。

      如果您选择的实例类型支持 vCPU 配置，请在**高级详细信息**面板中选择**指定 CPU 选项**，从而为您的新实例类型配置 vCPU。

   1. 选择**更改**以接受新设置。

1. 要启动实例，请选择该实例，然后依次选择 **Instance state**（实例状态）、**Start instance**（启动实例）。实例进入 `running` 状态可能需要几分钟时间。如果您的实例无法启动，请参阅 [实例类型更改的问题排查](troubleshoot-change-instance-type.md)。

1. [Windows 实例] 如果您的实例运行 Windows Server 2016 或 Windows Server 2019（带 EC2Launch v1），则会连接到您的 Windows 实例并运行以下 EC2Launch PowerShell 脚本，以便在更改实例类型后对其进行配置。
**重要**  
当您启用初始化实例 EC2 Launch 脚本时，管理员密码将重置。您可以修改配置文件，通过在初始化任务的设置中指定禁用管理员密码重置来禁用它。有关如何禁用密码重置的步骤，请参阅[配置初始化任务](ec2launch-config.md#ec2launch-inittasks)（EC2Launch）或[更改设置](ec2launch-v2-settings.md#ec2launch-v2-ui)（EC2Launch v2）。

   ```
   PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
   ```

# 通过启动新的 EC2 实例迁移到新实例类型
<a name="migrate-instance-configuration"></a>

仅当 EC2 实例是 EBS 支持的实例，并且其配置与您想要的新实例类型兼容时，您才能更改该实例的实例类型。否则，如果配置或实例与新实例类型不兼容，或者它是基于实例存储的实例，则您必须启动与所需实例类型兼容的替代实例。有关如何确定兼容性的更多信息，请参阅[更改实例类型的兼容性](resize-limitations.md)。

**迁移过程概述**
+ 备份原始实例上的数据。
+ 启动一个具有与您所需的新实例类型兼容的配置的新实例，附加已附加到原始实例的任何 EBS 卷。
+ 在新实例上安装应用程序。
+ 恢复所有数据。
+ 如果原始实例有弹性 IP 地址，则必须将其与新实例关联，以确保您的用户可以继续使用您的应用程序而不会中断。

**将实例迁移到新实例**

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

1. 备份仍然需要的任何数据，如下所示：
   + 连接到您的实例，并将实例存储卷上的数据复制到持久性存储中。
   + [创建 EBS 卷的快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-snapshot.html)，以便您可以使用相同数据创建新卷；或者将卷从原始实例分离，以便您可以将其附加到新实例。

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

1. 选择 **Launch instances**。配置实例时，执行以下操作：

   1. 选择支持您所需实例类型的 AMI。例如，您必须选择支持新实例类型的处理器类型的 AMI。此外，当前一代的实例类型需要 HVM AMI。

   1. 选择所需的新实例类型。如果您所需的实例类型不可用，则说明其与您所选 AMI 的配置不兼容。

   1. 如果您要允许相同的流量到达新实例，请选择与原始实例使用相同的 VPC 和安全组。

   1. 完成新实例的配置后，请完成以下步骤以选择密钥对并启动实例。实例进入 `running` 状态可能需要几分钟时间。

1. 如果您将数据备份到 EBS 快照，请[从快照创建卷](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html#ebs-create-volume-from-snapshot)，然后[将该卷附加](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html)到新实例。

   要将 EBS 卷从原始实例移动到新实例，请先从原始实例[分离该卷](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-detaching-volume.html)，然后[将该卷附加](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html)到新实例。

1. 在新实例上安装应用程序和所有必需软件。

1. 还原您在原始实例的实例存储卷中备份的所有数据。

1. 如果原始实例有弹性 IP 地址，请将其按如下方式分配给新实例：

   1. 在导航窗格中，选择 **Elastic IPs**。

   1. 选择与原始实例关联的弹性 IP 地址，然后依次选择**操作**、**取消关联弹性 IP 地址**。当系统提示进行确认时，选择**取消关联**。

   1. 在弹性 IP 地址仍处于选中状态的情况下，依次选择**操作**、**关联弹性 IP 地址**。

   1. 对于 **Resource type (资源类型)**，选择 **Instance (实例)**。

   1. 对于**实例**，选择新实例。

   1. （可选）对于 **Private IP address (私有 IP 地址)**，请指定要将弹性 IP 地址关联到的私有 IP 地址。

   1. 选择 **Associate**。

1. (可选) 如果不再需要原始实例，您可以将其终止。选择实例，确认您将要终止原始实例而不是新实例（例如，查看名称或启动时间），然后依次选择 **Instance state**（实例状态）、**Terminate instance**（终止实例）。

# 实例类型更改的问题排查
<a name="troubleshoot-change-instance-type"></a>

使用以下信息可帮助您诊断和修复在更改实例类型时可能遇到的常见问题。

## 更改实例类型后，实例无法启动
<a name="troubleshoot-change-instance-type-no-start"></a>

**可能的原因：未满足新实例类型的要求**  
如果您的实例未启动，则可能是新实例类型的某一要求未满足。有关更多信息，请参阅[为什么我的 Linux 实例在更改其类型后无法启动？](https://repost.aws/knowledge-center/boot-error-linux-nitro-instance)

**可能的原因：AMI 不支持实例类型**  
若使用 EC2 控制台更改实例类型，则仅限所选 AMI 支持的实例类型可用。若使用 AWS CLI 启动实例，则可以指定不兼容的 AMI 和实例类型。如果 AMI 和实例类型不兼容，则实例无法启动。有关更多信息，请参阅 [更改实例类型的兼容性](resize-limitations.md)。

**可能的原因：实例位于集群置放群组中**  
如果您的实例位于[集群置放群组](placement-strategies.md#placement-groups-cluster)中，并且更改实例类型后实例无法启动，请尝试以下操作：  

1. 停止集群置放群组中的所有实例。

1. 更改受影响的实例的实例类型。

1. 启动集群置放群组中的所有实例。

## 更改实例类型后，无法从互联网访问应用程序或网站
<a name="troubleshoot-change-instance-type-ipv4"></a>

**可能的原因：公有 IPv4 地址被释放**  
更改实例类型时，您必须先停止该实例。停止实例时，我们会释放公有 IPv4 地址并向该实例提供一个新的公有 IPv4 地址。  
为了在实例停止和启动之间保留公有 IPv4 地址，我们建议您使用弹性 IP 地址，若您的实例处于运行中，则无需额外费用。有关更多信息，请参阅 [弹性 IP 地址](elastic-ip-addresses-eip.md)。