

# 从 Amazon Linux 2 迁移到 Amazon Linux 2023 Amazon ECS 优化版 AMI
<a name="al2-to-al2023-ami-transition"></a>

继 [Amazon Linux](https://aws.amazon.com/amazon-linux-2/faqs) 之后，Amazon ECS 将于 2026 年 6 月 30 日起终止对 Amazon Linux 2 Amazon ECS 优化版 AMI 的标准支持。在此日期之后，Amazon ECS 代理版本将被固定，新的 Amazon Linux 2 Amazon ECS 优化版 AMI 只有在源 Amazon Linux 2 AMI 更新后才会发布。生命周期终止（EOL）于 2026 年 6 月 30 日生效，之后即使源 AMI 已更新，也不会再发布 Amazon ECS 优化版 Amazon Linux 2 AMI。

Amazon Linux 2023 提供了默认安全方法，包括预配置的安全策略、允许模式下的 SELinux、默认启用仅 IMDSv2 模式、优化的启动时间以及改进的程序包管理，增强了安全性和性能。

Amazon Linux 2 和 Amazon Linux 2023 Amazon ECS 优化版 AMI 之间高度兼容，大多数客户在使用这两个操作系统时所感受到的工作负载变化将微乎其微。

有关更多信息，请参阅《Amazon Linux 2023 用户指南》**中的[比较 Amazon Linux 2 与 *Amazon Linux 2023*](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html) 以及 [AL2023 常见问题](https://aws.amazon.com/linux/amazon-linux-2023/faqs)。

## 兼容性注意事项
<a name="al2-to-al2023-ami-transition-compatibility"></a>

### 程序包管理和操作系统更新
<a name="al2-to-al2023-ami-transition-compatibility-package-management"></a>

与之前版本的 Amazon Linux 不同，Amazon ECS 优化版 Amazon Linux 2023 AMI 被锁定到特定版本的 Amazon Linux 存储库。这可以防止用户无意中更新可能引入不需要的更改或重大更改的程序包。有关更多信息，请参阅《Amazon Linux 2023 用户指南》**中的 [Managing repositories and OS updates in Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)。

### Linux 内核版本
<a name="al2-to-al2023-ami-transition-compatibility-kernel"></a>

Amazon Linux 2 AMI 基于 Linux 内核 4.14 和 5.10，而 Amazon Linux 2023 使用 Linux 内核 6.1 和 6.12。有关更多信息，请参阅《Amazon Linux 2023 用户指南**》中的 [Comparing Amazon Linux 2 and Amazon Linux 2023 kernels](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2-kernel.html)。

### 程序包可用性更改
<a name="al2-to-al2023-ami-transition-compatibility-packages"></a>

以下是 Amazon Linux 2023 中值得注意的程序包更改：
+ Amazon Linux 2 不再包含 Amazon Linux 2023 中的某些源二进制包。有关更多信息，请参阅《Amazon Linux 2023 Release Notes》**中的 [Packages removed from Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/release-notes/removed.html)。
+ Amazon Linux 支持不同版本程序包的方式的更改。Amazon Linux 2023 中不存在 Amazon Linux 2 中使用的 `amazon-linux-extras` 系统。所有程序包都可在“核心”存储库中找到。
+ Amazon Linux 2023 不支持适用于 Enterprise Linux 的附加程序包（EPEL）。有关更多信息，请参阅《Amazon Linux 2023 用户指南》**中的 [EPEL compatibility in Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/epel.html)。
+ Amazon Linux 2023 不支持 32 位应用程序。有关更多信息，请参阅《Amazon Linux 2023 用户指南》**中的 [Deprecated features from Amazon Linux 2](https://docs.aws.amazon.com/linux/al2023/ug/deprecated-al2.html#deprecated-32bit-rpms)。

### 控制组（cgroup）更改
<a name="al2-to-al2023-ami-transition-compatibility-cgroups"></a>

控制组（cgroup）是 Linux 内核的一项功能，用于分层组织进程并在进程之间分配系统资源。控制组被广泛用于通过 `systemd` 实现容器运行时系统。

Amazon ECS 代理、Docker 和 containerd 均支持 cgroupv1 和 cgroupv2。cgroupv2 更改容器内存用量的计算方式。在 cgroupv1（Amazon Linux 2）中，容器运行时报告的容器内存利用率通常不包括页面缓存。在 cgroupv2（Amazon Linux 2023）中，页面缓存包含在报告的内存用量中。与 Amazon Linux 2 相比，相同的工作负载在 Amazon Linux 2023 上可能报告更高的内存利用率，即使实际的应用程序内存消耗没有变更亦是如此。

我们建议在迁移生产工作负载之前对 Amazon Linux 2023 实例的内存用量进行基准测试，并在需要时调整任务和容器内存限制。可以使用 [Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-ECS.html) 比较 Amazon Linux 2 和 Amazon Linux 2023 之间的内存利用率。

有关 cgroupv2 的更多详细信息，请参阅《Amazon Linux 2023 用户指南》**中的 [Control groups v2 in Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/cgroupv2.html)。

### 实例元数据服务（IMDS）更改
<a name="al2-to-al2023-ami-transition-compatibility-imds"></a>

默认情况下，Amazon Linux 2023 需要实例元数据服务版本 2（IMDSv2）。IMDSv2 可带来多项好处，有助于改善安全状况。它使用面向会话的身份验证方法，需要在简单的 HTTP PUT 请求中创建密钥令牌才能启动会话。会话令牌的有效时间可以介于 1 秒到 6 小时之间。

有关如何从 IMDSv1 过渡到 IMDSv2 的更多信息，请参阅《Amazon EC2 用户指南》**中的[过渡到使用实例元数据服务版本 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-transition-to-version-2.html)。

如果您想使用 IMDSv1，您仍然可以通过使用实例元数据选项启动属性，手动覆盖设置来做到这一点。

### 内存交换性更改
<a name="al2-to-al2023-ami-transition-compatibility-memory-swappiness"></a>

Amazon Linux 2023 和 cgroups v2 不支持按容器交换内存。有关更多信息，请参阅 [管理 Amazon ECS 上的容器交换内存空间](container-swap.md)。

### FIPS 验证更改
<a name="al2-to-al2023-ami-transition-compatibility-fips"></a>

Amazon Linux 2 通过了 FIPS 140-2 认证，Amazon Linux 2023 通过了 FIPS 140-3 认证。

要在 Amazon Linux 2023 上启用 FIPS 模式，请在您的 Amazon EC2 实例上安装必要的程序包，然后按照《Amazon Linux 2023 用户指南》**的 [Enable FIPS Mode on Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/fips-mode.html) 中的说明，完成配置步骤即可。

### 加速实例支持
<a name="al2-to-al2023-ami-transition-compatibility-accelerated"></a>

Amazon ECS 优化版 Amazon Linux 2023 AMI 同时支持 Neuron 和 GPU 加速实例类型。有关更多信息，请参阅 [经 Amazon ECS 优化的 Linux AMI](ecs-optimized_AMI.md)。

## 构建自定义 AMI
<a name="al2-to-al2023-ami-transition-custom-ami"></a>

虽然我们建议您迁移到官方支持和发布的 Amazon Linux 2023 Amazon ECS 优化版 AMI，但您可以继续使用用于构建 Amazon ECS 优化版 AMI 的 Linux 变体的开源构建脚本，来构建自定义 Amazon Linux 2 Amazon ECS 优化版 AMI。有关更多信息，请参阅 [经 Amazon ECS 优化的 Linux AMI 构建脚本](ecs-ami-build-scripts.md)。

## 迁移策略
<a name="al2-to-al2023-ami-transition-migration"></a>

我们建议制定和实施包括全面应用程序测试在内的迁移计划。以下各节根据您管理 Amazon ECS 基础设施的方式概述了不同的迁移策略。

### 使用 Amazon ECS 容量提供程序进行迁移
<a name="al2-to-al2023-ami-transition-migration-capacity-providers"></a>

1. 使用新的启动模板创建一个新的容量提供程序。这应该引用一个自动扩缩组群组，其启动模板与您的现有模板类似，但它应该指定其中一个 Amazon Linux 2023 变体，而非 Amazon Linux 2 Amazon ECS 优化版 AMI。将这个新容量提供程序添加到现有的 Amazon ECS 集群。

1. 更新集群的默认容量提供程序策略，将现有的 Amazon Linux 2 容量提供程序和新的 Amazon Linux 2023 容量提供程序纳入其中。首先，对 Amazon Linux 2 提供程序使用较高的权重，对 Amazon Linux 2023 提供程序使用较低的权重（例如，Amazon Linux 2：权重 80，Amazon Linux 2023：权重 20）。这会导致 Amazon ECS 在计划新任务时开始预置 Amazon Linux 2023 实例。确认实例是否注册正确，任务是否能够在新实例上成功运行。

1. 逐步调整集群默认策略中的容量提供程序权重，增加 Amazon Linux 2023 提供程序的权重，同时随着时间的推移降低 Amazon Linux 2 提供程序的权重（例如，先是 60/40，然后是 40/60，接着是 20/80）。您还可以更新各个服务容量提供程序的策略，以优先考虑 Amazon Linux 2023 实例。监控任务放置，确保它们在 Amazon Linux 2023 实例上成功运行。

1. （可选）清空 Amazon Linux 2 容器实例以加速任务迁移。如果您有足够的 Amazon Linux 2023 替换容量，则可以通过 Amazon ECS 控制台或 AWS CLI 手动清空 Amazon Linux 2 容器实例，加速将任务从 Amazon Linux 2 过渡到 Amazon Linux 2023。迁移完成后，从您的集群中移除 Amazon Linux 2 容量提供程序，并删除关联的自动扩缩组。

### 使用 Amazon EC2 Auto Scaling 组进行迁移
<a name="al2-to-al2023-ami-transition-migration-asg"></a>

1. 使用新的启动模板创建一个新的 Amazon EC2 Auto Scaling 组。此模板应与现有的启动模板类似，但它应指定其中一个 Amazon Linux 2023 变体，而非 Amazon Linux 2 Amazon ECS 优化版 AMI。这个新的自动扩缩组可以向现有集群启动实例。

1. 纵向扩展该自动扩缩组，即可开始将 Amazon Linux 2023 实例注册到您的集群中。确认实例是否注册正确，任务是否能够在新实例上成功运行。

1. 验证确认您的任务可在 Amazon Linux 2023 上运行后，纵向扩展 Amazon Linux 2023 自动扩缩组，同时逐步缩减 Amazon Linux 2 自动扩缩组，直到完全替换所有 Amazon Linux 2 实例。

1. 如果您有足够的 Amazon Linux 2023 替换容量，则可能需要显式清空容器实例，以加速将任务从 Amazon Linux 2 过渡到 Amazon Linux 2023。有关更多信息，请参阅 [耗尽 Amazon ECS 容器实例](container-instance-draining.md)。

### 使用手动托管的实例进行迁移
<a name="al2-to-al2023-ami-transition-migration-manual"></a>

1. 使用 Amazon ECS 优化版 Amazon Linux 2023 AMI（而不是 Amazon Linux 2）手动启动新的 Amazon EC2 实例（或调整启动该实例的脚本）。确保这些实例使用与现有 Amazon Linux 2 实例相同的安全组、子网、IAM 角色和集群配置。这些实例应在启动时自动注册到现有 Amazon ECS 集群中。

1. 确认新的 Amazon Linux 2023 实例是否已成功注册到 Amazon ECS 集群并且处于 `ACTIVE` 状态。通过等待自然任务放置或手动停止/启动某些任务以触发重新计划，测试是否可以在这些新实例上计划任务并正常运行任务。

1. 根据需要启动其他 Amazon Linux 2023 实例，然后手动逐个清空和终止 Amazon Linux 2 实例，从而逐步替换 Amazon Linux 2 实例。将实例设置为 `DRAINING` 状态，通过 Amazon ECS 控制台清空实例，这将停止在这些实例上放置新任务，并允许现有任务完成或在其他地方重新计划这些任务。