当我尝试从 AMI 启动 EC2 实例时,为什么某些实例类型被禁用?
上次更新日期:2020 年 12 月 18 日
我尝试从 Amazon 系统映像 (AMI) 启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。为什么我想启动的实例类型被禁用了?
简短描述
实例类型 A1、T4g、M6g、C6g 和 R6g 使用 AWS Graviton 处理器。AWS Graviton 处理器使用 aarch64 (ARM64) 架构而不是 x86_64 (AMD64)。
ARM64 架构使用的 CPU 指令集与 x86_64 架构系列使用的指令不同。这些指令集提供向处理器发送命令的机制。在软件编译过程中,人类可读的软件代码会转换为特定于 CPU 架构的 CPU 指令。该架构类型的任何 CPU 都可以使用这些 CPU 指令。但是,一种架构类型的 CPU 无法理解另一种类型的指令集。因此,从一个架构编译的 AMI 只能在该架构类型的 CPU 上运行。
ARM64 和 x86_64 架构使用不同的指令集。这意味着使用 x86_64 架构创建的 EC2 实例和 AMI 与使用 ARM64 架构的实例不兼容。这种不兼容会导致在启动或更改实例类型时发生以下情况之一:
- 使用所选 EC2 AMI 启动 Graviton 实例类型时,启动向导可能会将新实例类型显示为已禁用。
- 如果您对当前未使用新架构类型的已部署 EC2 实例的实例类型进行更改,则可能会收到错误提示。错误消息的内容类似于以下示例:
“'m6g.large' 对使用 'x86_64' 架构的实例 'i-xyz' 而言不是有效的实例类型”。
要使用其他架构,请先创建一个新的 EC2 实例或 AMI。
注意:如果没有启用增强联网功能,则 AMI 可能与您的实例类型不兼容。有关更多信息,请参阅如何在 EC2 实例上启用和配置增强联网功能?
解决方法
启动新实例
所有主要的 Linux 发行版都可以在 ARM 架构上使用。要使用 ARM 架构启动实例:
- 打开 Amazon EC2 控制台。
- 依次选择 Launch instance(启动实例)、Launch instance(启动实例)。
- 选择与您最喜欢的发行版的 ARM 版本对应的 AMI 旁边的 64-bit (ARM)(64 位 (ARM)),然后选择 Select(选择)。
- 完成启动实例 。
实例启动后,它的行为与任何 EC2 实例一样。
更改实例类型
由于指令集不同,不能在架构类型之间直接进行实例类型更改。要将系统迁移到新的架构,请执行以下操作:
- 启动所需配置的新 EC2 实例。
- 将应用程序迁移到新的 EC2 实例。