

# Amazon ECS 的 Amazon EC2 容器实例
<a name="create-capacity"></a>

Amazon ECS 容器实例是运行 Amazon ECS 容器代理且注册到集群的 Amazon EC2 实例。当您使用容量提供程序、外部容量提供程序或自动扩缩组容量提供程序在 Amazon ECS 中运行任务时，您的任务将被放置在您的活动容器实例上。您负责容器实例管理和维护。

尽管您可以自行创建在 Amazon ECS 上运行您的容器化工作负载所需的符合基本规范的 Amazon EC2 实例 AMI，但 AWS 工程师仍会在 Amazon ECS 上预配置并测试经 Amazon ECS 优化的 AMI。这是可供您开始操作并快速获取 AWS 上运行的容器的最简单方式。

您使用控制台创建集群时，Amazon ECS 会使用与所选操作系统关联的最新 AMI 为您的实例创建启动模板。

使用 CloudFormation 创建集群时，SSM 参数是自动扩缩组实例的 Amazon EC2 启动模板的一部分。您可以将该模板配置为使用动态 Systems Manager 参数来确定要部署的经 Amazon ECS 优化的 AMI。此参数可确保每次部署堆栈时，都会检查是否存在需要应用到 EC2 实例的可用更新。有关如何使用 Systems Manager 参数的示例，请参阅《AWS CloudFormation 用户指南》中的 [Create an Amazon ECS cluster with the Amazon ECS-optimized Amazon Linux 2023 AMI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#aws-resource-ecs-cluster--examples--Create_an_cluster_with_the_Amazon_Linux_2023_ECS-Optimized-AMI)**。
+ [检索经 Amazon ECS 优化的 Linux AMI 元数据](retrieve-ecs-optimized_AMI.md)
+ [检索经 Amazon ECS 优化的 Bottlerocket AMI 元数据](ecs-bottlerocket-retrieve-ami.md)
+ [检索经 Amazon ECS 优化的 Windows AMI 元数据](retrieve-ecs-optimized_windows_AMI.md)

您可以从与您的应用程序兼容的实例类型中进行选择。使用较大的实例，您可以同时启动更多任务。使用较小的实例，您可以以更精细的方式进行横向扩展以节省成本。您不需要为适合集群中所有应用程序而选择单个 Amazon EC2 实例类型。相反，您可以创建多个自动扩缩组，其中每个组都具有不同的实例类型。然后，您可以为这些组的每一组创建一个 Amazon EC2 容量提供程序。

使用以下指南来确定要使用的实例系列类型和实例类型：
+ 消除不满足应用程序特定要求的实例类型或实例系列。例如，如果您的应用程序需要 GPU，则可以排除没有 GPU 的任何实例类型。
+ 考虑包括网络吞吐量和存储在内的要求。
+ 考虑 CPU 和内存。通常，CPU 和内存必须足够大，从而足以容纳要运行的任务的至少一个副本。

## 竞价型实例
<a name="container-instance-spot"></a>

与按需型实例相比，Spot 容量可以显著节省成本。Spot 容量是定价明显低于按需容量或预留容量的过剩容量。Spot 容量适用于批处理和机器学习工作负载，以及开发和暂存环境。更笼统地说，它适用于可容许临时停机时间的任何工作负载。

请理解以下结果，因为 Spot 容量可能并非一直可用。
+ 在需求极高的时期，Spot 容量可能不可用。此操作可能会导致 Amazon EC2 竞价型实例的启动被延迟。在这些情况下，Amazon ECS 服务会重试启动任务，Amazon EC2 Auto Scaling 组也会重试启动实例，直到所需的容量变得可用为止。Amazon EC2 不会将 Spot 容量替换为按需容量。
+ 当总体容量需求增加时，系统可能会在只有两分钟警告的情况下终止竞价型实例和任务。发出警告后，如有必要，在实例完全终止之前，任务应当开始有序关闭。这有助于最大限度地降低出错的可能性。有关正常关闭的更多信息，请参阅[使用 ECS 进行正常关闭](https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/)。

为了帮助最大限度地减少 Spot 容量短缺情况的出现，请考虑以下建议：
+ 使用多个区域和可用区：Spot 容量因区域和可用区域而异。通过在多个区域和可用区中运行工作负载，您可以提高 Spot 可用性。如果可能，请在运行任务和实例的区域中，为所有可用区指定子网。
+ 使用多个 Amazon EC2 实例类型 - 当您将混合实例策略与 Amazon EC2 Auto Scaling 一起使用时，会将多个实例类型启动到您的自动扩缩组中。这样可以确保 Spot 容量请求可以在需要时得到满足。为了最大限度地提高可靠性以及最大限度地降低复杂性，请在混合实例策略中使用具有大致相同数量的 CPU 和内存的实例类型。这些实例可以来自不同的代系，也可以是相同基本实例类型的变体。请注意，它们可能会包含您可能不需要的其他功能。此类列表的一个例子可能包括 m4.large、m5.large、m5a.large、m5d.large、m5n.large、m5dn.large 和 m5ad.large。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的[具有多个实例类型和购买选项的自动扩缩组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html)。
+ 使用经容量优化的 Spot 分配策略 - 借助 Amazon EC2 Spot，您可以在经容量和成本优化的分配策略之间进行选择。如果您在启动新实例时选择经容量优化的策略，Amazon EC2 Spot 会选择在所选可用区中可用性最高的实例类型。此项有助于减少实例在启动后不久便终止的可能性。

有关如何在容器实例上配置竞价型终止通知的信息，请参阅：
+ [配置 Amazon ECS Linux 容器实例以接收竞价型实例通知](spot-instance-draining-linux-container.md)
+ [配置 Amazon ECS Windows 容器实例以接收竞价型实例通知](windows-spot-instance-draining-container.md)

# 经 Amazon ECS 优化的 Linux AMI
<a name="ecs-optimized_AMI"></a>

**重要**  
Amazon ECS 优化版 Amazon Linux 2 AMI 的生命周期将于 2026 年 6 月 30 日终止，这与上游 Amazon Linux 2 操作系统的生命周期终止日期相同（有关更多信息，请参阅 [Amazon Linux 2 常见问题](https://aws.amazon.com/amazon-linux-2/faqs/)）。我们鼓励客户升级自己的应用程序以便使用 Amazon Linux 2023，其中包括直到 2028 年的长期支持。有关从 Amazon Linux 2 迁移到 Amazon Linux 2023 的信息，请参阅 [Migrating from the Amazon Linux 2 Amazon ECS-optimized AMI to the Amazon Linux 2023 Amazon ECS-optimized AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/al2-to-al2023-ami-transition.html)。

默认情况下，所有 Amazon ECS 优化 AMI 的弃用日期均设置为 AMI 创建日期后的两年。您可以使用 Amazon EC2 `DescribeImages` API 来检查 AMI 的弃用状态和日期。有关更多信息，请参阅*《Amazon Elastic Compute Cloud API Reference》*中的 [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)。

Amazon ECS 提供已根据这些要求和建议进行了预配置的经 Amazon ECS 优化的 AMI，以运行您的容器工作负载。建议您在 Amazon EC2 实例中使用 Amazon ECS 优化版 Amazon Linux 2023 AMI。从最新的经 Amazon ECS 优化的 AMI 启动容器实例可确保您收到最新的安全更新和容器代理版本。有关如何启动实例的信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

您使用控制台创建集群时，Amazon ECS 会使用与所选操作系统关联的最新 AMI 为您的实例创建启动模板。

使用 CloudFormation 创建集群时，SSM 参数是自动扩缩组实例的 Amazon EC2 启动模板的一部分。您可以将该模板配置为使用动态 Systems Manager 参数来确定要部署的经 Amazon ECS 优化的 AMI。此参数可确保每次部署堆栈时，都会检查是否存在需要应用到 EC2 实例的可用更新。有关如何使用 Systems Manager 参数的示例，请参阅《AWS CloudFormation 用户指南》中的 [Create an Amazon ECS cluster with the Amazon ECS-optimized Amazon Linux 2023 AMI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#aws-resource-ecs-cluster--examples--Create_an_cluster_with_the_Amazon_Linux_2023_ECS-Optimized-AMI)**。

如果需要自定义经 Amazon ECS 优化的 AMI，请参阅 GitHub 上的 [Amazon ECS Optimized AMI Build Recipes](https://github.com/aws/amazon-ecs-ami)。

以下 Amazon ECS 优化型 AMI 的变体可用于具有 Amazon Linux 2023 操作系统的 Amazon EC2 实例。


| 操作系统 | AMI | 说明 | 存储配置 | 
| --- | --- | --- | --- | 
| Amazon Linux 2023 |  经 Amazon ECS 优化的 Amazon Linux 2023 AMI |  Amazon Linux 2023 是 AWS 的下一代 Amazon Linux。在大多数情况下，推荐用于为您的 Amazon ECS 工作负载启动 Amazon EC2 实例。有关更多信息，请参阅《Amazon Linux 2023 用户指南》**中的[什么是 Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html)。  | 预设情况下，经 Amazon ECS 优化的 Amazon Linux 2023 AMI 附带一个 30GiB 的根卷。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2023 AMI 的默认文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2023（arm64） |  经 Amazon ECS 优化的 Amazon Linux 2023（arm64）AMI |  此 AMI 基于 Amazon Linux 2023，建议将其用于为 Amazon ECS 工作负载启动采用基于 ARM 的 AWS Graviton/Graviton 2/Graviton 3/Graviton 4 处理器的 Amazon EC2 实例。有关更多信息，请参阅《Amazon EC2 实例类型指南》中的 [Specifications for the Amazon EC2 general purpose instances](https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html)**。  | 预设情况下，经 Amazon ECS 优化的 Amazon Linux 2023 AMI 附带一个 30GiB 的根卷。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2023 AMI 的默认文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2023（Neuron） |  经 Amazon ECS 优化的 Amazon Linux 2023 AMI  |  基于 Amazon Linux 2023，此 AMI 适用于 Amazon EC2 Inf1、Trn1 或 Inf2 实例。带有预先配置 AWS Inferentia 和 AWS Trainium 驱动程序以及 Docker 的 AWS Neuron 运行时系统，它使得在 Amazon ECS 上运行机器学习推理工作负载变得更加容易。有关更多信息，请参阅 [适用于 AWS 神经元机器学习工作负载的 Amazon ECS 任务定义](ecs-inference.md)。 经 Amazon ECS 优化的 Amazon Linux 2023（Neuron）AMI 不随附 AWS CLI 预装。  | 预设情况下，经 Amazon ECS 优化的 Amazon Linux 2023 AMI 附带一个 30GiB 的根卷。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2023 AMI 的默认文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2023 GPU | 经 Amazon ECS 优化的 Amazon Linux 2023 GPU AMI |  此 AMI 基于 Amazon Linux 2023，建议在为 Amazon ECS 工作负载启动基于 Amazon EC2 GPU 的实例时使用。预配置了 NVIDIA 内核驱动程序和 Docker GPU 运行时，可以使正在运行的工作负载充分利用 Amazon ECS 上的 GPU。有关更多信息，请参阅 [适用于 GPU 工作负载的 Amazon ECS 任务定义](ecs-gpu.md)。  | 预设情况下，经 Amazon ECS 优化的 Amazon Linux 2023 AMI 附带一个 30GiB 的根卷。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2023 AMI 的默认文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 

以下 Amazon ECS 优化型 AMI 的变体可用于使用 Amazon Linux 2 操作系统的 Amazon EC2 实例。


| 操作系统 | AMI | 说明 | 存储配置 | 
| --- | --- | --- | --- | 
|  **Amazon Linux 2**   |  经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10 AMI | 基于 Amazon Linux 2，在启动 Amazon EC2 实例时使用此 AMI，您需要为 Amazon ECS 工作负载使用 Linux 内核 5.10 而不是内核 4.14。经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10 AMI 未预装 AWS CLI。 | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
|  **Amazon Linux 2**  |  经 Amazon ECS 优化的 Amazon Linux 2 AMI | 此项适用于您的 Amazon ECS 工作负载。经 Amazon ECS 优化的 Amazon Linux 2 AMI 不随附 AWS CLI 预装。 | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
|  **Amazon Linux 2（arm64）**  |  经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10（arm64）AMI |  此 AMI 基于 Amazon Linux 2，适用于为 Amazon ECS 工作负载启动采用基于 Arm 的 AWS Graviton/Graviton 2/Graviton 3/Graviton 4 处理器，并且您希望使用 Linux 内核 5.10 而不是 Linux 内核 4.14 的 Amazon EC2 实例。有关更多信息，请参阅《Amazon EC2 实例类型指南》中的 [Specifications for Amazon EC2 general purpose instances](https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html)**。 经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 不随附 AWS CLI 预装。  | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2（arm64） | 经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI |  此 AMI 基于 Amazon Linux 2，适用于为 Amazon ECS 工作负载启动采用基于 Arm 的 AWS Graviton/Graviton 2/Graviton 3/Graviton 4 处理器的 Amazon EC2 实例。 经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 不随附 AWS CLI 预装。  | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
|  **Amazon Linux 2（GPU）**  | Amazon ECS GPU 优化型内核 5.10 AMI | 基于 Amazon Linux 2，建议在为 Amazon ECS 工作负载启动基于 Amazon EC2 GPU 的实例（含 Linux 内核 5.10）时使用此 AMI。预配置了 NVIDIA 内核驱动程序和 Docker GPU 运行时，可以使正在运行的工作负载充分利用 Amazon ECS 上的 GPU。有关更多信息，请参阅 [适用于 GPU 工作负载的 Amazon ECS 任务定义](ecs-gpu.md)。 | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2（GPU） | Amazon ECS GPU 优化型 AMI | 基于 Amazon Linux 2，建议在为 Amazon ECS 工作负载启动基于 Amazon EC2 GPU 的实例（含 Linux 内核 4.14）时使用此 AMI。预配置了 NVIDIA 内核驱动程序和 Docker GPU 运行时，可以使正在运行的工作负载充分利用 Amazon ECS 上的 GPU。有关更多信息，请参阅 [适用于 GPU 工作负载的 Amazon ECS 任务定义](ecs-gpu.md)。 | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2（Neuron）  | 经 Amazon ECS 优化的 Amazon Linux 2（Neuron）内核 5.10 AMI  | 基于 Amazon Linux 2，此 AMI 适用于 Amazon EC2 Inf1、Trn1 或 Inf2 实例。其带有预先配置 AWS Inferentia（含 Linux 内核 5.10）和 AWS Trainium 驱动程序以及 Docker 的 AWS Neuron 运行时，使得在 Amazon ECS 上运行机器学习推理工作负载变得更加容易。有关更多信息，请参阅 [适用于 AWS 神经元机器学习工作负载的 Amazon ECS 任务定义](ecs-inference.md)。经 Amazon ECS 优化的 Amazon Linux 2（Neuron）AMI 不随附 AWS CLI 预装。 | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2（Neuron）  | 经 Amazon ECS 优化的 Amazon Linux 2（Neuron）AMI | 基于 Amazon Linux 2，此 AMI 适用于 Amazon EC2 Inf1、Trn1 或 Inf2 实例。带有预先配置 AWS Inferentia 和 AWS Trainium 驱动程序以及 Docker 的 AWS Neuron 运行时系统，它使得在 Amazon ECS 上运行机器学习推理工作负载变得更加容易。有关更多信息，请参阅 [适用于 AWS 神经元机器学习工作负载的 Amazon ECS 任务定义](ecs-inference.md)。经 Amazon ECS 优化的 Amazon Linux 2（Neuron）AMI 不随附 AWS CLI 预装。 | 预设情况下，基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI（经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 和Amazon ECS GPU 优化型 AMI）随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小，以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 `xfs`，Docker 使用 `overlay2` 存储驱动程序。有关更多信息，请参阅 Docker 文档中的[使用 OverlayFS 存储驱动程序](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 

Amazon ECS 为 GitHub 上的 Amazon ECS 优化 AMI 的 Linux 变体提供了更改日志。有关更多信息，请参阅[更改日志](https://github.com/aws/amazon-ecs-ami/blob/main/CHANGELOG.md)。

经 Amazon ECS 优化的 AMI 的 Linux 变体使用 Amazon Linux 2 AMI 或 Amazon Linux 2023 AMI 作为其基础。您可以通过查询 Systems Manager Parameter Store API 来检索每个变体的 AMI 名称。有关更多信息，请参阅 [检索经 Amazon ECS 优化的 Linux AMI 元数据](retrieve-ecs-optimized_AMI.md)。还提供了 Amazon Linux 2 AMI 版本注释。有关更多信息，请参阅 [Amazon Linux 2 版本注释](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)。还提供了 Amazon Linux 2023 发布说明。有关更多信息，请参阅 [Amazon Linux 2023 发布说明](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html)。

以下页面提供了有关更改的更多信息：
+ GitHub 上的[来源 AMI 发布](https://github.com/aws/amazon-ecs-ami/releases)说明
+ Docker 文档中的 [Docker 引擎版本注释](https://docs.docker.com/engine/release-notes/)
+ NVIDIA 文档中的 [NVIDIA 驱动程序文档](https://docs.nvidia.com/datacenter/tesla/index.html)
+ GitHub 上的 [Amazon ECS 代理变更日志](https://github.com/aws/amazon-ecs-agent/blob/master/CHANGELOG.md)

  `ecs-init` 应用程序的源代码以及用于打包代理的脚本和配置现在已成为代理存储库的一部分。有关 `ecs-init` 的旧版本和包装，请参阅 GitHub 上的 [Amazon ecs-init 变更日志](https://github.com/aws/amazon-ecs-init/blob/master/CHANGELOG.md)

## 将安全更新应用于经 Amazon ECS 优化的 AMI
<a name="ecs-optimized-AMI-security-changes"></a>

基于 Amazon Linux 的、经 Amazon ECS 优化的 AMI 包含的自定义版本的 cloud-init。Cloud-init 是一个程序包，用于在云计算环境中引导 Linux 映像，并在启动实例时执行所需操作。默认情况下，在 2024 年 6 月 12 日之前发布的所有经 Amazon ECS 优化的 Amazon Linux AMI 在实例启动时都已应用了“关键”和“重要”安全更新。

从 2024 年 6 月 12 日起发布的经 Amazon ECS 优化的 Amazon Linux 2 AMI 开始，默认行为将不再包括在启动时更新程序包。相反，建议您在发布版本后更新为新的经 Amazon ECS 优化的 AMI。经 Amazon ECS 优化的 AMI 在有可用安全更新或基本 AMI 更改时发布。这将确保您收到最新的程序包版本和安全更新，并且程序包版本在实例启动后不可变。有关检索最新经 Amazon ECS 优化 AMI 的更多信息，请参阅 [检索经 Amazon ECS 优化的 Linux AMI 元数据](retrieve-ecs-optimized_AMI.md)。

建议将您的环境自动化，以在新 AMI 可用时进行更新。有关可用选项的信息，请参阅 [Amazon ECS enables easier EC2 capacity management, with managed instance draining](https://aws.amazon.com/blogs/containers/amazon-ecs-enables-easier-ec2-capacity-management-with-managed-instance-draining/)。

要继续对某个 AMI 版本手动应用“关键”和“重要”安全更新，则可以在 Amazon EC2 实例上运行以下命令。

```
yum update --security
```

**警告**  
 更新 docker 或 containerd 软件包会导致主机上所有正在运行的容器停止，这意味着所有正在运行的 Amazon ECS 任务都将停止。请相应地制定计划，以最大程度地减少服务中断。

如果您想在启动时重新启用安全更新，则可以在启动 Amazon EC2 实例时将以下行添加到 cloud-init 用户数据的 `#cloud-config` 部分。有关更多信息，请参阅《Amazon Linux 用户指南》**中的 [Using cloud-init on Amazon Linux 2](https://docs.aws.amazon.com/linux/al2/ug/amazon-linux-cloud-init.html)。

```
#cloud-config
repo_upgrade: security
```

## 经 Amazon ECS 优化的 AL2023 GPU AMI 中的版本锁定的软件包
<a name="ecs-optimized-ami-version-locked-packages"></a>

在经 Amazon ECS 优化的 AL2023 GPU AMI 中，某些软件包对于 GPU 功能的正确、高性能行为至关重要。这些方法包括：
+ NVIDIA 驱动程序（`nvidia*`）
+ 内核模块（`kmod*`）
+ NVIDIA 库（`libnvidia*`）
+ 内核软件包（`kernel*`）

**注意**  
这并非是详尽的列表。完整的锁定软件包列表可通过 `dnf versionlock list` 获得

这些软件包锁定了版本来确保稳定性，并防止可能中断 GPU 工作负载的意外更改。因此，这些软件包通常应在一个托管进程的范围内进行修改，该进程可以妥善处理潜在问题并维护 GPU 功能。

为了防止意外修改，这些软件包使用了 `dnf versionlock` 插件。

如果希望修改锁定的软件包，您可以：

```
# unlock a single package
sudo dnf versionlock delete $PACKAGE_NAME

# unlock all packages
sudo dnf versionlock clear
```

**重要**  
当需要更新这些软件包时，客户应该考虑使用包含所需更新的最新 AMI 版本。如果需要更新现有实例，则应采用涉及解锁、更新和重新锁定软件包的谨慎方法，始终确保在整个过程中保持 GPU 功能正常运行。

# 检索经 Amazon ECS 优化的 Linux AMI 元数据
<a name="retrieve-ecs-optimized_AMI"></a>

您可以通过编程方式检索经 Amazon ECS 优化的 AMI 元数据。元数据包括 AMI 名称、Amazon ECS 容器代理版本和 Amazon ECS 运行时版本（其中包括 Docker 版本）。

您使用控制台创建集群时，Amazon ECS 会使用与所选操作系统关联的最新 AMI 为您的实例创建启动模板。

使用 CloudFormation 创建集群时，SSM 参数是自动扩缩组实例的 Amazon EC2 启动模板的一部分。您可以将该模板配置为使用动态 Systems Manager 参数来确定要部署的经 Amazon ECS 优化的 AMI。此参数可确保每次部署堆栈时，都会检查是否存在需要应用到 EC2 实例的可用更新。有关如何使用 Systems Manager 参数的示例，请参阅《AWS CloudFormation 用户指南》中的 [Create an Amazon ECS cluster with the Amazon ECS-optimized Amazon Linux 2023 AMI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#aws-resource-ecs-cluster--examples--Create_an_cluster_with_the_Amazon_Linux_2023_ECS-Optimized-AMI)**。

经 Amazon ECS 优化的 AMI 的 AMI ID、映像名称、操作系统、容器代理版本、源映像名称和运行时版本可通过查询 Systems Manager Parameter Store API 以编程方式检索。有关 Systems Manager Parameter Store API 的更多信息，请参阅 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) 和 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html)。

**注意**  
您的管理用户必须具有以下 IAM 权限才能检索经 Amazon ECS 优化的 AMI 元数据。这些权限已添加到 `AmazonECS_FullAccess` IAM 策略。  
ssm:GetParameters
ssm:GetParameter
ssm:GetParametersByPath

## Systems Manager Parameter Store 参数格式
<a name="ecs-optimized-ami-parameter-format"></a>

以下是经 Amazon ECS 优化的 AMI 变体参数名称的格式。

**Linux 经 Amazon ECS 优化的 AMI**
+ Amazon Linux 2023 AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/<version>
  ```
+ Amazon Linux 2023（arm64）AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/arm64/<version>
  ```
+ Amazon Linux 2023（Neuron）AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/<version>
  ```
+ Amazon Linux 2023（GPU）AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/gpu/<version>
  ```

  Amazon Linux 2 AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/<version>
  ```
+ Amazon Linux 2 内核 5.10 AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/<version>
  ```
+ Amazon Linux 2（arm64）AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/arm64/<version>
  ```
+ Amazon Linux 2 内核 5.10（arm64）AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/arm64/<version>
  ```
+ Amazon ECS GPU 优化型内核 5.10 AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/gpu/<version>
  ```
+ Amazon Linux 2（GPU）AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/<version>
  ```
+ 经 Amazon ECS 优化的 Amazon Linux 2（Neuron）内核 5.10 AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/inf/<version>
  ```
+ Amazon Linux 2（Neuron）AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/inf/<version>
  ```

以下参数名称格式通过使用子参数 `image_id` 检索最新推荐的经 Amazon ECS 优化的 Amazon Linux 2 AMI 的映像 ID。

```
/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id
```

以下参数名称格式通过指定 AMI 名称来检索特定的经 Amazon ECS 优化的 AMI 版本的元数据。
+ 经 Amazon ECS 优化的 Amazon Linux 2 AMI 元数据：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/amzn2-ami-ecs-hvm-2.0.20181112-x86_64-ebs
  ```

**注意**  
经 Amazon ECS 优化的 Amazon Linux 2 AMI 的所有版本都可用于检索。只能检索经 Amazon ECS 优化的 AMI 版本 `amzn-ami-2017.09.l-amazon-ecs-optimized`（Linux）及更高版本。

## 示例
<a name="ecs-optimized-ami-parameter-examples"></a>

以下示例说明了可用于检索经 Amazon ECS 优化的 AMI 变体的元数据的方法。

### 检索最新推荐的经 Amazon ECS 优化的 AMI 的元数据
<a name="ecs-optimized-ami-parameter-examples-1"></a>

您可以使用 AWS CLI 和以下 AWS CLI 命令检索最新推荐的经 Amazon ECS 优化的 AMI。

**Linux 经 Amazon ECS 优化的 AMI**
+ **对于经 Amazon ECS 优化的 Amazon Linux 2023 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2023（arm64）AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/arm64/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2023（Neuron）AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2023 GPU AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/gpu/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10（arm64）AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/arm64/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/arm64/recommended --region us-east-1
  ```
+ **对于 Amazon ECS GPU 优化型内核 5.10 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/gpu/recommended --region us-east-1
  ```
+ **对于 Amazon ECS GPU 优化型 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2（Neuron）内核 5.10 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/inf/recommended --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Amazon Linux 2（Neuron）AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended --region us-east-1
  ```

### 检索最新推荐的经 Amazon ECS 优化的 Amazon Linux 2023 AMI 的映像 ID
<a name="ecs-optimized-ami-parameter-examples-6"></a>

您可以通过使用子参数 `image_id` 检索最新推荐的经 Amazon ECS 优化的 Amazon Linux 2023 AMI ID 的映像 ID。

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/recommended/image_id --region us-east-1
```

要仅检索 `image_id` 值，您可以查询特定参数值；例如：

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/recommended/image_id --region us-east-1 --query "Parameters[0].Value"
```

### 检索特定经 Amazon ECS 优化的 Amazon Linux 2 AMI 版本的元数据
<a name="ecs-optimized-ami-parameter-examples-2"></a>

使用 AWS CLI 和以下 AWS CLI 命令检索特定 经 Amazon ECS 优化的 Amazon Linux AMI版本的元数据。将要检索的 经 Amazon ECS 优化的 Amazon Linux AMI 的名称替换为 AMI 名称 

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/amzn2-ami-ecs-hvm-2.0.20200928-x86_64-ebs --region us-east-1
```

### 使用 Systems Manager GetParametersByPath API 检索经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10 AMI 元数据
<a name="ecs-optimized-ami-parameter-examples-3"></a>

通过 AWS CLI 和下列命令使用 Systems Manager GetParametersByPath API 检索 经 Amazon ECS 优化的 Amazon Linux 2 AMI 元数据。

```
aws ssm get-parameters-by-path --path /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/ --region us-east-1
```

### 检索最新推荐的经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10 AMI 的映像 ID
<a name="ecs-optimized-ami-parameter-examples-4"></a>

您可以通过使用子参数 `image_id` 检索最新推荐的经 Amazon ECS 优化的 Amazon Linux 2 内核 5.10 AMI ID 的映像 ID。

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/recommended/image_id --region us-east-1
```

要仅检索 `image_id` 值，您可以查询特定参数值；例如：

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id --region us-east-1 --query "Parameters[0].Value"
```

### 在 CloudFormation 模板中使用最新推荐的经 Amazon ECS 优化的 AMI
<a name="ecs-optimized-ami-parameter-examples-5"></a>

您可以参考 Systems Manager 参数存储名称引用 CloudFormation 模板中最新推荐的经 Amazon ECS 优化的 AMI。

**Linux 示例**

```
Parameters:kernel-5.10
  LatestECSOptimizedAMI:
    Description: AMI ID
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/recommended/image_id
```

# 从 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。Amazon ECS 代理和容器运行时会为您管理 cgroup，因此 Amazon ECS 客户无需对此底层 cgroup 升级进行任何更改。

有关 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 控制台清空实例，这将停止在这些实例上放置新任务，并允许现有任务完成或在其他地方重新计划这些任务。

# 经 Amazon ECS 优化的 Linux AMI 构建脚本
<a name="ecs-ami-build-scripts"></a>

Amazon ECS 已对用于构建 Amazon ECS 优化版 AMI 的 Linux 变体的构建脚本进行开源。GitHub 上现在提供了这些生成脚本。有关更多信息，请参阅 GitHub 上的 [amazon-ecs-ami](https://github.com/aws/amazon-ecs-ami)。

如果您需要自定义经 Amazon ECS 优化的 AMI，请参阅 GitHub 上的 [经 Amazon ECS 优化的 AMI 生成配方](https://github.com/aws/amazon-ecs-ami)。

生成脚本存储库包含 [HashiCorp packer](https://developer.hashicorp.com/packer/docs) 模板和生成脚本以生成经 Amazon ECS 优化的 AMI 的每个 Linux 变体。这些脚本是经 Amazon ECS 优化的 AMI 生成的可信来源，因此您可关注 GitHub 存储库以监控对 AMI 所做的更改。例如，您可能希望自己的 AMI 使用 Amazon ECS 团队用于正式 AMI 的同一版本的 Docker。

有关更多信息，请通过 GitHub 上的 [aws/amazon-ecs-ami](https://github.com/aws/amazon-ecs-ami) 参阅 Amazon ECS AMI 存储桶。

**要构建经 Amazon ECS 优化的 Linux AMI**

1. 克隆 `aws/amazon-ecs-ami` GitHub 存储库。

   ```
   git clone https://github.com/aws/amazon-ecs-ami.git
   ```

1. 添加 AWS 区域的环境变量以在创建 AMI 时使用。用要使用的区域替换 `us-west-2` 值。

   ```
   export REGION=us-west-2
   ```

1. 提供了一个 Makefile 来构建 AMI。从克隆存储库的根目录中，使用以下命令之一，这对应于要构建的经 Amazon ECS 优化 AMI 的 Linux 变体。
   + 经 Amazon ECS 优化的 Amazon Linux 2 AMI

     ```
     make al2
     ```
   + 经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI

     ```
     make al2arm
     ```
   + Amazon ECS GPU 优化型 AMI

     ```
     make al2gpu
     ```
   + 经 Amazon ECS 优化的 Amazon Linux 2（Neuron）AMI

     ```
     make al2inf
     ```
   + 经 Amazon ECS 优化的 Amazon Linux 2023 AMI

     ```
     make al2023
     ```
   + 经 Amazon ECS 优化的 Amazon Linux 2023（arm64）AMI

     ```
     make al2023arm
     ```
   + 经 Amazon ECS 优化的 Amazon Linux 2023 GPU AMI

     ```
     make al2023gpu
     ```
   + 经 Amazon ECS 优化的 Amazon Linux 2023（Neuron）AMI

     ```
     make al2023neu
     ```

# 经 Amazon ECS 优化的 Bottlerocket AMI
<a name="ecs-bottlerocket"></a>

Bottlerocket 是一个基于 Linux 的开源操作系统，由 AWS 专门为在虚拟机或裸机主机上运行容器而打造。经 Amazon ECS Bottlerocket 优化的 AMI 安全，只包含运行容器所需的最少软件包数量。此项可以提高资源使用率，减少安全攻击面，并有助于降低管理开销。Bottlerocket AMI 还与 Amazon ECS 集成，以帮助减少更新集群中的容器实例所涉及的操作开销。

Bottlerocket 与 Amazon Linux 存在以下差异：
+ Bottlerocket 不包括包管理器，其软件只能作为容器运行。对 Bottlerocket 的更新既可以应用，也可以通过一个步骤进行回滚，这样可以降低出现更新错误的可能性。
+ 管理 Bottlerocket 主机的主要机制是使用容器调度器。与 Amazon Linux 不同，登录单个 Bottlerocket 实例的操作并不频繁，仅用于高级调试和故障排除目的。

有关 Bottlerocket 的更多信息，请参阅 GitHub 上的[文档](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md)和[发布](https://github.com/bottlerocket-os/bottlerocket/releases)。

适用于内核 6.1 和内核 5.10 的经 Amazon ECS 优化的 Bottlerocket AMI 有多个变体。

以下变体使用内核 6.1：
+ `aws-ecs-2`
+ `aws-ecs-2-nvidia`

以下变体使用内核 5.10：
+ `aws-ecs-1`
+ `aws-ecs-1-nvidia`

  有关 `aws-ecs-1-nvidia` 变体的更多信息，请参阅[宣布对 Amazon ECS 上的 Bottlerocket 提供 NVIDIA GPU 支持](https://aws.amazon.com/blogs/containers/announcing-nvidia-gpu-support-for-bottlerocket-on-amazon-ecs/)。

## 注意事项
<a name="ecs-bottlerocket-considerations"></a>

将 Bottlerocket AMI 与 Amazon ECS 结合使用时，请考虑以下因素。
+ Bottlerocket 支持采用 `x86_64` 和 `arm64` 处理器的 Amazon EC2 实例。Bottlerocket 不建议将 Amazon EC2 实例与 Inferentia 芯片一起使用。
+ Bottlerocket 映像不附带 SSH 服务器或 Shell。但是，您可以使用带外管理工具获得 SSH 管理员访问权限并执行引导程序。

   有关更多信息，请参阅 GitHub 上的 [bottlerocket README.md](https://github.com/bottlerocket-os/bottlerocket)：
  + [Exploration (探索)](https://github.com/bottlerocket-os/bottlerocket#exploration)
  + [管理员容器](https://github.com/bottlerocket-os/bottlerocket#admin-container)
+ 预设情况下，Bottlerocket 启用了一个[控制容器](https://github.com/bottlerocket-os/bottlerocket-control-container)。该容器运行 [AWS Systems Manager 代理](https://github.com/aws/amazon-ssm-agent)，您可以用它在 Amazon EC2 Bottlerocket 实例上运行命令或启动 shell 会话。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的[设置会话管理器](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html)。
+ Bottlerocket 针对容器工作负载进行了优化，并专注于安全性。Bottlerocket 不包含软件包管理器，并且不可变。

  有关安全功能和指南的信息，请参阅 GitHub 上的[安全功能](https://github.com/bottlerocket-os/bottlerocket/blob/develop/SECURITY_FEATURES.md)和[安全指南](https://github.com/bottlerocket-os/bottlerocket/blob/develop/SECURITY_GUIDANCE.md)。
+ Bottlerocket AMI 版本 `1.1.0` 或更高版本支持 `awsvpc` 网络模式。
+ Bottlerocket AMI 版本 `1.15.0` 或更高版本支持任务定义中的 App Mesh。
+ Bottlerocket AMI 版本 `1.19.0` 或更高版本支持 `initProcessEnabled` 任务定义参数。
+ Bottlerocket AMI 也不支持以下服务和功能：
  + ECS Anywhere
  + Service Connect
  + Amazon EFS 处于加密模式
  + Amazon EFS 处于 `awsvpc` 网络模式
  + 无法装载 Amazon EBS 卷
  + Elastic Inference 加速器

# 检索经 Amazon ECS 优化的 Bottlerocket AMI 元数据
<a name="ecs-bottlerocket-retrieve-ami"></a>

您可以通过查询 AWS Systems Manager Parameter Store API 来检索经 Amazon EKS 优化的 AMI 的亚马逊机器映像（AMI）ID。使用此参数，您无需手动查找经 Amazon ECS 优化的 AMI ID。有关 Systems Manager Parameter Store API 的更多信息，请参阅 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html)。您使用的用户必须具有 `ssm:GetParameter` IAM 权限才能检索经 Amazon ECS 优化的 AMI 元数据。

## `aws-ecs-2` Bottlerocket AMI 变体
<a name="ecs-bottlerocket-aws-ecs-2-variant"></a>

您可以使用 AWS CLI 或 AWS 管理控制台 按 AWS 区域 和架构检索最新的稳定 `aws-ecs-2` Bottlerocket AMI 变体。
+ **AWS CLI** – 您可以使用子参数 `image_id`，通过以下 AWS CLI 命令检索推荐的最新的经 Amazon ECS 优化的 Bottlerocket AMI 的映像 ID。将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

  有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。要检索最新版本以外的版本，请将 `latest` 替换为相应的版本号。
  + 对于 64 位（`x86_64`）架构：

    ```
    aws ssm get-parameter --region us-east-2 --name "/aws/service/bottlerocket/aws-ecs-2/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    aws ssm get-parameter --region us-east-2 --name "/aws/service/bottlerocket/aws-ecs-2/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理控制台** – 您可以使用 AWS 管理控制台 中的 URL 查询推荐的经 Amazon ECS 优化的 AMI ID。该 URL 使用参数的 ID 的值打开 Amazon EC2 Systems Manager 控制台。在以下 URL 中，将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

   有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。
  + 对于 64 位（`x86_64`）架构：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2/x86_64/latest/image_id/description?region=region#
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2/arm64/latest/image_id/description?region=region#
    ```

## `aws-ecs-2-nvidia` Bottlerocket AMI 变体
<a name="ecs-bottlerocket-aws-ecs-1-nvidia-variants"></a>

您可以使用 AWS CLI 或 AWS 管理控制台 按区域和架构检索最新的稳定 `aws-ecs-2-nvdia` Bottlerocket AMI 变体。
+ **AWS CLI** – 您可以使用子参数 `image_id`，通过以下 AWS CLI 命令检索推荐的最新的经 Amazon ECS 优化的 Bottlerocket AMI 的映像 ID。将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

   有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。要检索最新版本以外的版本，请将 `latest` 替换为相应的版本号。
  + 对于 64 位（`x86_64`）架构：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-2-nvidia/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-2-nvidia/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理控制台** – 您可以使用 AWS 管理控制台 中的 URL 查询推荐的经 Amazon ECS 优化的 AMI ID。该 URL 使用参数的 ID 的值打开 Amazon EC2 Systems Manager 控制台。在以下 URL 中，将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

  有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。
  + 对于 64 位（`x86_64`）架构：

    ```
    https://regionconsole.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2-nvidia/x86_64/latest/image_id/description?region=region#
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    https://regionconsole.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2-nvidia/arm64/latest/image_id/description?region=region#
    ```

## `aws-ecs-1` Bottlerocket AMI 变体
<a name="ecs-bottlerocket-aws-ecs-1-variant"></a>

您可以使用 AWS CLI 或 AWS 管理控制台 按 AWS 区域 和架构检索最新的稳定 `aws-ecs-1` Bottlerocket AMI 变体。
+ **AWS CLI** – 您可以使用子参数 `image_id`，通过以下 AWS CLI 命令检索推荐的最新的经 Amazon ECS 优化的 Bottlerocket AMI 的映像 ID。将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

  有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。要检索最新版本以外的版本，请将 `latest` 替换为相应的版本号。
  + 对于 64 位（`x86_64`）架构：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理控制台** – 您可以使用 AWS 管理控制台 中的 URL 查询推荐的经 Amazon ECS 优化的 AMI ID。该 URL 使用参数的 ID 的值打开 Amazon EC2 Systems Manager 控制台。在以下 URL 中，将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

  有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。
  + 对于 64 位（`x86_64`）架构：

    ```
    https://region.console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1/x86_64/latest/image_id/description
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    https://region.console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1/arm64/latest/image_id/description
    ```

## `aws-ecs-1-nvidia` Bottlerocket AMI 变体
<a name="ecs-bottlerocket-aws-ecs-1-nvidia-variants"></a>

您可以使用 AWS CLI 或 AWS 管理控制台 按区域和架构检索最新的稳定 `aws-ecs-1-nvdia` Bottlerocket AMI 变体。
+ **AWS CLI** – 您可以使用子参数 `image_id`，通过以下 AWS CLI 命令检索推荐的最新的经 Amazon ECS 优化的 Bottlerocket AMI 的映像 ID。将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

  有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。
  + 对于 64 位（`x86_64`）架构：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1-nvidia/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1-nvidia/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理控制台** – 您可以使用 AWS 管理控制台 中的 URL 查询推荐的经 Amazon ECS 优化的 AMI ID。该 URL 使用参数的 ID 的值打开 Amazon EC2 Systems Manager 控制台。在以下 URL 中，将 `region` 替换为您想要的 AMI ID 所对应的区域代码。

  有关支持的 AWS 区域 的信息，请参阅 GitHub 上的[查找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。
  + 对于 64 位（`x86_64`）架构：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1-nvidia/x86_64/latest/image_id/description?region=region#
    ```
  + 对于 64 位 Arm（`arm64`）架构：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1-nvidia/arm64/latest/image_id/description?region=region#
    ```

## 后续步骤
<a name="bottlerocket-next-steps"></a>

有关如何在 Amazon ECS 上开始使用 Bottlerocket 操作系统的详细教程，请参阅 GitHub 上的[在 Amazon ECS 上使用 Bottlerocket AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md) 和 AWS 博客网站上的[开始使用 Bottlerocket 和 Amazon ECS](https://aws.amazon.com/blogs/containers/getting-started-with-bottlerocket-and-amazon-ecs/)。

有关如何启动 Bottlerocket 实例的信息，请参阅[启动 Amazon ECS 的 Bottlerocket 实例](bottlerocket-launch.md)

# 启动 Amazon ECS 的 Bottlerocket 实例
<a name="bottlerocket-launch"></a>

您可以启动 Bottlerocket 实例，以便运行容器工作负载。

您可以使用 AWS CLI 启动 Bottlerocket 实例。

1. 创建名为 `userdata.toml` 的文件。此文件会用于实例用户数据。将 *cluster-name* 替换为您集群的名称。

   ```
   [settings.ecs]
   cluster = "cluster-name"
   ```

1. 使用 [检索经 Amazon ECS 优化的 Bottlerocket AMI 元数据](ecs-bottlerocket-retrieve-ami.md) 中包含的命令之一获取 Bottlerocket AMI ID。您将在以下步骤中使用此 ID。

1. 运行以下命令来启动 Bottlerocket 实例。请记得替换以下参数：
   + 用您的实例将在其中启动的私有或公有子网的 ID 替换*子网*。
   + 将 *bottlerocket\$1ami* 替换为上一步中的 AMI ID。
   + 将 *t3.large* 替换为您要使用的实例类型。
   + 将 *region* 替换为区域代码。

   ```
   aws ec2 run-instances --key-name ecs-bottlerocket-example \
      --subnet-id subnet \
      --image-id bottlerocket_ami \
      --instance-type t3.large \
      --region region \
      --tag-specifications 'ResourceType=instance,Tags=[{Key=bottlerocket,Value=example}]' \
      --user-data file://userdata.toml \
      --iam-instance-profile Name=ecsInstanceRole
   ```

1. 运行以下命令，以验证容器实例是否注册到集群。在运行此命令时，请记得替换以下参数：
   + 将 *cluster* 替换为您的集群名称。
   + 将 *region* 替换为区域代码。

   ```
   aws ecs list-container-instances --cluster cluster-name --region region
   ```

有关如何在 Amazon ECS 上开始使用 Bottlerocket 操作系统的详细演练，请参阅 GitHub 上的[在 Amazon ECS 上使用 Bottlerocket AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md) 和 AWS 博客网站上的[开始使用 Bottlerocket 和 Amazon ECS](https://aws.amazon.com/blogs/containers/getting-started-with-bottlerocket-and-amazon-ecs/)。

# Amazon ECS Linux 容器实例管理
<a name="manage-linux"></a>

为 Amazon ECS 工作负载使用 EC2 实例时，您负责维护这些实例

**Topics**
+ [启动容器实例](launch_container_instance.md)
+ [引导启动 Linux 容器实例](bootstrap_container_instance.md)
+ [配置容器实例以接收竞价型实例通知](spot-instance-draining-linux-container.md)
+ [在启动容器实例时运行脚本](start_task_at_launch.md)
+ [增加 Amazon ECS Linux 容器实例网络接口](container-instance-eni.md)
+ [预留容器实例内存](memory-management.md)
+ [远程管理容器实例](ec2-run-command.md)
+ [为 Linux 容器实例使用 HTTP 代理](http_proxy_config.md)
+ [为您的自动扩缩组配置预初始化的实例](using-warm-pool.md)
+ [更新 Amazon ECS 容器代理](ecs-agent-update.md)

每个 Amazon ECS 容器代理版本都支持不同的功能集并提供了针对早期版本的错误修复。如果可能，我们始终建议使用最新版本的 Amazon ECS 容器代理。要将您的容器代理更新至最新版本，请参阅[更新 Amazon ECS 容器代理](ecs-agent-update.md)。

要查看每个代理版本包含了哪些功能和增强功能，请参阅 [https://github.com/aws/amazon-ecs-agent/releases](https://github.com/aws/amazon-ecs-agent/releases)。

**重要**  
可靠指标的最低 Docker 版本是 Docker 版本 `v20.10.13` 及更高版本，该版本包含在经 Amazon ECS 优化的 AMI `20220607` 及更高版本中。  
Amazon ECS 代理版本 `1.20.0` 及更高版本已弃用对早于 `18.01.0` 的 Docker 版本的支持。

# 启动 Amazon ECS Linux 容器实例
<a name="launch_container_instance"></a>

您可以使用 Amazon EC2 控制台创建 Amazon ECS 容器实例。

您可以使用各种方法启动实例，包括 Amazon EC2 控制台、AWS CLI 和 SDK。要了解启动实例的其他方法，请参阅《Amazon EC2 用户指南》中的[启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)**。

有关启动向导的更多信息，请参阅《Amazon EC2 用户指南》中的[使用新启动实例向导启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)**。

在开始之前，请完成 [设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md) 中的步骤。

您可以使用新 Amazon EC2 向导启动实例。启动实例向导指定启动实例所需的启动参数。

**Topics**
+ [过程](#linux-liw-initiate-instance-launch)
+ [名称和标签](#linux-liw-name-and-tags)
+ [应用程序和操作系统映像（亚马逊机器映像）](#linux-liw-ami)
+ [实例类型](#linux-liw-instance-type)
+ [密钥对（登录）](#linux-liw-key-pair)
+ [网络设置](#linux-liw-network-settings)
+ [配置存储](#linux-liw-storage)
+ [高级详细信息](#linux-liw-advanced-details)

## 过程
<a name="linux-liw-initiate-instance-launch"></a>

在开始之前，请完成 [设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md) 中的步骤。

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

1. 在屏幕顶部的导航栏中，会显示当前 AWS 区域，例如，美国东部美国东部（俄亥俄州）。选择要在其中启动实例的区域。

1. 从 Amazon EC2 控制台控制面板中，选择**启动实例**。

## 名称和标签
<a name="linux-liw-name-and-tags"></a>

实例名称是一个标签，其中密钥为**名称**，而值为您指定的名称。您可以为实例、卷和弹性图形添加标签。对于竞价型实例，您只能标记竞价型实例请求。

指定实例名称和其它标签为可选项。
+ 对于**名称**，为实例输入一个描述性名称。如果您没有指定名称，则可以通过其 ID 标识实例，该 ID 将在您启动实例时自动生成。
+ 要添加其它标签，请选择**添加其他标签**。选择**添加标签**，然后输入密钥和值，然后选择要标记的资源类型。为每个要添加的其它标签选择**添加标签**。

## 应用程序和操作系统映像（亚马逊机器映像）
<a name="linux-liw-ami"></a>

亚马逊机器映像（AMI）中包含了创建实例所需的信息。例如，AMI 可能包含充当 Web 服务器所需的软件，例如 Apache 和您的网站。

使用**搜索**栏查找由 AWS 发布的合适的经 Amazon ECS 优化的 AMI。

1. 在**搜索**栏中输入以下术语之一。
   + **ami-ecs**
   + 经 Amazon ECS 优化的 AMI 的**值**。

     有关最新的经 Amazon ECS 优化的 AMI 及其值，请参阅[经 Linux Amazon ECS 优化的 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#ecs-optimized-ami-linux)。

1. 按 **Enter** 键。

1. 在**选择亚马逊机器映像（AMI）**页面上，选择 **AWS Marketplace AMI** 选项卡。

1. 从左侧 **Refine results**（优化结果）窗格中，选择 **Amazon Web Services** 作为 **Publisher**（发布者）。

1. 在要使用的 AMI 行上选择 **Select**（选择）。

   或者，选择右上角的 **Cancel**（取消）以返回启动实例向导，而不选择 AMI。将选择默认 AMI。确保 AMI 满足[经 Amazon ECS 优化的 Linux AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html) 中概述的要求。

## 实例类型
<a name="linux-liw-instance-type"></a>

实例类型定义了实例的硬件配置和大小。更大的实例类型拥有更多的 CPU 和内存。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。如果您希望运行仅 IPv6 工作负载，则某些实例类型不支持 IPv6 地址。有关更多信息，请参阅 *Amazon EC2 用户指南*中的 [IPv6 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#ipv6-addressing)。
+ 对于**实例类型**，请为实例选择实例类型。

   您选择的实例类型决定了可用于运行您的任务的资源。

## 密钥对（登录）
<a name="linux-liw-key-pair"></a>

为**密钥对名称**选择一个现有密钥对，或选择**创建新的密钥对**来新建一个密钥对。

**重要**  
如果您选择**在没有密钥对的情况下继续（不推荐）**选项，则将无法连接到此实例，除非您选择配置为允许用户以其它方式登录的 AMI。

## 网络设置
<a name="linux-liw-network-settings"></a>

在表单的**网络设置**部分选择**编辑**按钮后，根据需要配置网络设置。
+ 对于 **VPC**，选择要将实例启动到的 VPC。要运行仅 IPv6 工作负载，请选择同时包含 IPv4 和 IPv6 CIDR 数据块的双堆栈 VPC。
+ 对于**子网**，选择要在其中启动实例的子网。您可以在与可用区、本地区域、Wavelength 区域或 Outpost 关联的子网中启动实例。

  要在可用区中启动实例，请选择要在其中启动实例的子网。要创建新子网，请选择**新建子网**转到 Amazon VPC 控制台。完成此操作后，返回到启动实例向导并选择“刷新”图标，以便将您的子网加载到列表中。

  要在本地区域中启动实例，请选择您在本地区域中创建的子网。

  要在 Outpost 中启动实例，请在 VPC 中选择与 Outpost 关联的子网。

  要运行仅 IPv6 工作负载，请选择仅包含 IPv6 CIDR 数据块的子网。
+ **自动分配公有 IP**：如果实例应可从互联网进行访问，请验证**自动分配公有 IP** 字段设置为**启用**。如果不是，请将此字段设置为**禁用**。
**注意**  
容器实例需要访问才能与 Amazon ECS 服务端点通信。这可以通过接口 VPC 端点或具有公共 IP 地址的容器实例实现。  
有关接口 VPC 端点的更多信息，请参阅 [Amazon ECS 接口 VPC 端点（AWS PrivateLink）](vpc-endpoints.md)  
如果您没有配置接口 VPC 端点，并且您的容器实例没有公有 IP 地址，必须使用网络地址转换（NATI）来提供此访问。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)和本指南中的 [为 Amazon ECS Linux 容器实例使用 HTTP 代理](http_proxy_config.md)。
+ 如果您选择双堆栈 VPC 和仅 IPv6 子网，对于**自动分配 IPv6 IP**，请选择**启用**。
+ **防火墙（安全组）**：使用安全组为容器实例定义防火墙规则。这些规则指定哪些传入的网络流量可传输到您的容器实例。所有其他的流量将被忽略。
  + 要选择现有安全组，请选择 **Select existing security group**（选择现有安全组），然后选择您在 [设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md) 中创建的安全组。
+ 如果要为仅 IPv6 工作负载启动实例，请选择**高级网络配置**，然后对于**分配主 IPv6 IP** 选择**是**。
**注意**  
如果没有主 IPv6 地址，则以主机或桥接网络模式在容器实例上运行的任务将无法向负载均衡器或 AWS Cloud Map 注册。

## 配置存储
<a name="linux-liw-storage"></a>

您选择的 AMI 包含一个或多个存储卷，包括根卷。您可以指定要附加到实例的其它卷。

您可以使用**简单**视图。
+ **存储类型**：为您的容器实例配置存储。

  如果您使用的是经 Amazon ECS 优化的 Amazon Linux 2 AMI，您的实例将配置单个 30GiB 卷，用于在操作系统和 Docker 之间共享。

  如果您使用的是 Amazon ECS 优化型 AMI，您的实例将配置两个卷。**根**卷适合操作系统使用，第二个 Amazon EBS 卷（已挂载到 `/dev/xvdcz`）适合 Docker 使用。

  您可以选择增大或减小实例的卷大小以满足您的应用程序需求。

## 高级详细信息
<a name="linux-liw-advanced-details"></a>

对于**高级详细信息**，请展开该部分以查看字段并为实例指定任何其他参数。
+ **购买选项**：选择**请求竞价型实例**以请求竞价型实例。您还需要设置与竞价型实例相关的其他字段。有关更多信息，请参阅竞价型实例[请求](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html)。
**注意**  
如果使用竞价型实例时看到 `Not available` 消息，则需要选择其他实例类型。
+ **IAM 实例配置文件**：选择您的容器实例 IAM 角色。其通常被命名为 `ecsInstanceRole`。
**重要**  
如果未使用适当的 IAM 权限启动容器实例，则 Amazon ECS 代理无法连接到集群。有关更多信息，请参阅 [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md)。
+ **用户数据**：使用用户数据（例如 [Amazon ECS 容器代理配置](ecs-agent-config.md) 中的代理环境变量）配置 Amazon ECS 容器实例。Amazon EC2 用户数据脚本仅在实例首次启动时执行一次。以下是用户数据的常用示例：
  + 默认情况下，您的容器实例将启动到您的默认集群中。要在非默认集群中启动，请选择 **Advanced Details** 列表。然后，将以下脚本粘贴到 **User data** 字段中，将 *your\$1cluster\$1name* 替换为您的集群的名称。

    ```
    #!/bin/bash
    echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
    ```
  + 如果 Amazon S3 中有 `ecs.config` 文件并且启用了对容器实例角色的 Amazon S3 只读访问权限，请选择**高级详细信息**列表。然后，将以下脚本粘贴到**用户数据**字段中，并将 *your\$1bucket\$1name* 替换为您的存储桶的名称以安装 AWS CLI 和在启动时写入您的配置文件。
**注意**  
有关此配置的更多信息，请参阅[将 Amazon ECS 容器实例配置存储在 Amazon S3 中](ecs-config-s3.md)。

    ```
    #!/bin/bash
    yum install -y aws-cli
    aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config
    ```
  + 使用 `ECS_CONTAINER_INSTANCE_TAGS` 配置参数为您的容器实例指定标签。这只创建与 Amazon ECS 关联的标签，无法使用 Amazon EC2 API 列出这些标签。
**重要**  
如果您使用 Amazon EC2 Auto Scaling 组启动容器实例，则应使用 ECS\$1CONTAINER\$1INSTANCE\$1TAGS 代理配置参数来添加标签。这是由于标签添加到使用 自动扩缩组启动的 Amazon EC2 实例的方式造成的。

    ```
    #!/bin/bash
    cat <<'EOF' >> /etc/ecs/ecs.config
    ECS_CLUSTER=your_cluster_name
    ECS_CONTAINER_INSTANCE_TAGS={"tag_key": "tag_value"}
    EOF
    ```
  + 为您的容器实例指定标签，然后使用 `ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROM` 配置参数将其从 Amazon EC2 传播到 Amazon ECS

    下面是一个用户数据脚本示例，该脚本将传播与容器实例关联的标签，以及向名为 `your_cluster_name` 的集群注册容器实例：

    ```
    #!/bin/bash
    cat <<'EOF' >> /etc/ecs/ecs.config
    ECS_CLUSTER=your_cluster_name
    ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROM=ec2_instance
    EOF
    ```
  + 默认情况下，Amazon ECS 容器代理会通过查看实例的默认 IPv4 和 IPv6 路由来尝试检测容器实例是否与仅 IPv6 配置兼容。要覆盖此行为，您可以在实例的 `/etc/ecs/ecs.config` 文件中将 ` ECS_INSTANCE_IP_COMPATIBILITY` 参数设置为 `ipv4` 或 `ipv6`。

    ```
    #!/bin/bash
    cat <<'EOF' >> /etc/ecs/ecs.config
    ECS_CLUSTER=your_cluster_name
    ECS_INSTANCE_IP_COMPATIBILITY=ipv6
    EOF
    ```

  有关更多信息，请参阅 [引导启动 Amazon ECS Linux 容器实例以传递数据](bootstrap_container_instance.md)。

# 引导启动 Amazon ECS Linux 容器实例以传递数据
<a name="bootstrap_container_instance"></a>

在启动 Amazon EC2 实例时，您可以将用户数据传递到 EC2 实例。数据可以用于执行常见的自动配置任务，甚至用于在实例启动时运行脚本。对于 Amazon ECS，最常见的用户数据使用案例是将配置信息传递到 Docker 进程守护程序和 Amazon ECS 容器实例。

您可以将多类用户数据传递到 Amazon EC2，其中包括云 boothook、Shell 脚本和 `cloud-init` 指令。有关这些和其他格式类型的更多信息，请参阅 [Cloud-Init 文档](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)。

要在使用 Amazon EC2 启动向导时传递此用户数据，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

您可以将容器实例配置为在容器代理配置或 Docker 进程守护程序配置中传递数据。

## Amazon ECS 容器代理
<a name="bootstrap_container_agent"></a>

当容器代理启动时，经 Amazon ECS 优化的 AMI的 Linux 变体将在 `/etc/ecs/ecs.config` 文件中查找代理配置数据。您可以在启动时使用 Amazon EC2 用户数据指定此配置数据。有关可用 Amazon ECS 容器代理配置变量的更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

若要仅设置一个代理配置变量（如集群名称），请使用 **echo** 将该变量复制到配置文件：

```
#!/bin/bash
echo "ECS_CLUSTER=MyCluster" >> /etc/ecs/ecs.config
```

如果您有多个变量要写入到 `/etc/ecs/ecs.config`，请使用以下 `heredoc` 格式。此格式会将以 **cat** 和 `EOF` 开头的行之间的所有内容写入到配置文件。

```
#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=MyCluster
ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
ECS_LOGLEVEL=debug
ECS_WARM_POOLS_CHECK=true
EOF
```

要设置自定义实例属性，请设置 `ECS_INSTANCE_ATTRIBUTES` 环境变量。

```
#!/bin/bash
cat <<'EOF' >> ecs.config
ECS_INSTANCE_ATTRIBUTES={"envtype":"prod"}
EOF
```

## Docker 进程守护程序
<a name="bootstrap_docker_daemon"></a>

您可以使用 Amazon EC2 用户数据指定 Docker 进程守护程序配置信息。有关配置选项的更多信息，请参阅 [Docker 进程守护程序文档](https://docs.docker.com/reference/cli/dockerd/)。

**注意**  
AWS 不支持自定义 Docker 配置，因为它们有时可能会与未来的 Amazon ECS 更改或功能发生冲突，而不会发出警告。

在以下示例中，自定义选项添加到 Docker 进程守护程序配置文件中，`/etc/docker/daemon.json`，然后在启动实例时在用户数据中指定。

```
#!/bin/bash
cat <<EOF >/etc/docker/daemon.json
{"debug": true}
EOF
systemctl restart docker --no-block
```

在以下示例中，自定义选项添加到 Docker 进程守护程序配置文件中，`/etc/docker/daemon.json`，然后在启动实例时在用户数据中指定。此示例说明如何在 Docker 进程守护程序配置文件中禁用 docker-proxy。

```
#!/bin/bash
cat <<EOF >/etc/docker/daemon.json
{"userland-proxy": false}
EOF
systemctl restart docker --no-block
```

# 配置 Amazon ECS Linux 容器实例以接收竞价型实例通知
<a name="spot-instance-draining-linux-container"></a>

当 Spot 价格超过您请求的最高价格或容量不再可用时，Amazon EC2 会终止、停止或休眠您的竞价型实例。Amazon EC2 为终止和停止操作提供两分钟的竞价型实例中断通知。它没有提供休眠操作的两分钟通知。如果在实例上开启了 Amazon ECS 竞价型实例耗尽功能，则 Amazon ECS 会收到竞价型实例中断通知，并将实例置于 `DRAINING` 状态。

**重要**  
当 Auto Scaling Capacity Rebalancing 移除实例时，Amazon ECS 不会收到来自 Amazon EC2 的通知。有关更多信息，请参阅 [Amazon EC2 Auto Scaling 容器重新平衡](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)。

当某个容器实例设置为 `DRAINING` 时，Amazon ECS 将阻止安排放置在该容器实例上的新任务。连接即将耗尽的容器实例上处于 `PENDING` 状态的服务任务将立即停止。如果集群中有可用的容器实例，则在这些容器实例上启动替换服务任务。

竞价型实例耗尽功能在默认情况下处于关闭状态。

您可以在启动实例时开启竞价型实例耗尽功能。将以下脚本添加到**用户数据**字段。将 *MyCluster* 替换为要向其注册容器实例的集群名称。

```
#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=MyCluster
ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
EOF
```

有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

**要为现有容器实例开启竞价型实例耗尽**

1. 通过 SSH 连接到竞价型实例。

1. 编辑 `/etc/ecs/ecs.config` 文件并添加以下内容：

   ```
   ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
   ```

1. 重新启动 `ecs` 服务。
   + 对于经 Amazon ECS 优化的 Amazon Linux 2 AMI：

     ```
     sudo systemctl restart ecs
     ```

1. （可选）您可以通过查询代理自检 API 操作，验证代理是否正在运行并查看有关新容器实例的一些信息。有关更多信息，请参阅 [Amazon ECS 容器自检](ecs-agent-introspection.md)。

   ```
   curl http://localhost:51678/v1/metadata
   ```

# 在启动 Amazon ECS Linux 容器实例时运行脚本
<a name="start_task_at_launch"></a>

您可能需要在每个容器实例上运行一个特定容器以处理操作或安全问题，例如监控、安全性、指标、服务发现或日志记录。

为此，可以将容器实例配置为在启动时或在某些 init 系统（如 Upstart 或 **systemd**）中使用用户数据脚本调用 **docker run** 命令。虽然此方法可行，但它有一些缺点，因为 Amazon ECS 不了解容器并且无法监控 CPU、内存、端口或已使用的任何其他资源。要确保 Amazon ECS 可正确了解所有任务资源，请为要在容器实例上运行的容器创建任务定义。然后，使用 Amazon ECS 在启动时利用 Amazon EC2 用户数据放置任务。

以下过程中的 Amazon EC2 用户数据脚本使用 Amazon ECS 自检 API 来确定容器实例。然后，它将使用 AWS CLI 和 **start-task** 命令在启动期间对自身运行指定任务。

**在容器实例启动时启动任务**

1. 修改您的 `ecsInstanceRole` IAM 角色以便为 `StartTask` API 操作添加权限。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[更新角色的权限](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_update-role-permissions.html)。

1. 使用经 Amazon ECS 优化的 Amazon Linux 2 AMI，启动一个或多个容器实例。启动新的容器实例，并在 EC2 用户数据中使用以下示例脚本。将 *your\$1cluster\$1name* 替换为要注册到的容器实例的集群，并将 *my\$1task\$1def* 替换为要在启动时在实例上运行的任务定义。

   有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。
**注意**  
以下 MIME 分段内容使用 Shell 脚本设置配置值和安装程序包。它还将使用 Upstart 作业在 **ecs** 服务已在运行且自检 API 可用后启动任务。

   ```
   Content-Type: multipart/mixed; boundary="==BOUNDARY=="
   MIME-Version: 1.0
   
   --==BOUNDARY==
   Content-Type: text/x-shellscript; charset="us-ascii"
   
   #!/bin/bash
   # Specify the cluster that the container instance should register into
   cluster=your_cluster_name
   
   # Write the cluster configuration variable to the ecs.config file
   # (add any other configuration variables here also)
   echo ECS_CLUSTER=$cluster >> /etc/ecs/ecs.config
   
   START_TASK_SCRIPT_FILE="/etc/ecs/ecs-start-task.sh"
   cat <<- 'EOF' > ${START_TASK_SCRIPT_FILE}
   	exec 2>>/var/log/ecs/ecs-start-task.log
   	set -x
   	
   	# Install prerequisite tools
   	yum install -y jq aws-cli
   	
   	# Wait for the ECS service to be responsive
   	until curl -s http://localhost:51678/v1/metadata
   	do
   		sleep 1
   	done
   
   	# Grab the container instance ARN and AWS Region from instance metadata
   	instance_arn=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F/ '{print $NF}' )
   	cluster=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster' | awk -F/ '{print $NF}' )
   	region=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F: '{print $4}')
   
   	# Specify the task definition to run at launch
   	task_definition=my_task_def
   
   	# Run the AWS CLI start-task command to start your task on this container instance
   	aws ecs start-task --cluster $cluster --task-definition $task_definition --container-instances $instance_arn --started-by $instance_arn --region $region
   EOF
   
   # Write systemd unit file
   UNIT="ecs-start-task.service"
   cat <<- EOF > /etc/systemd/system/${UNIT}
         [Unit]
         Description=ECS Start Task
         Requires=ecs.service
         After=ecs.service
    
         [Service]
         Restart=on-failure
         RestartSec=30
         ExecStart=/usr/bin/bash ${START_TASK_SCRIPT_FILE}
   
         [Install]
         WantedBy=default.target
   EOF
   
   # Enable our ecs.service dependent service with `--no-block` to prevent systemd deadlock
   # See https://github.com/aws/amazon-ecs-agent/issues/1707
   systemctl enable --now --no-block "${UNIT}"
   --==BOUNDARY==--
   ```

1. 验证您的容器实例是否启动到正确的集群中以及您的任务是否已启动。

   1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

   1. 在导航栏中，选择您的集群所在的区域。

   1. 在导航窗格中，选择 **Clusters** 并选择托管您的容器实例的集群。

   1. 在**集群**页面上，选择**任务**，然后选择您的任务。

      您启动的每个容器实例都应运行您的任务。

      如果没有看到任务，可以使用 SSH 登录容器实例，在 `/var/log/ecs/ecs-start-task.log` 文件中查看调试信息。

# 增加 Amazon ECS Linux 容器实例网络接口
<a name="container-instance-eni"></a>

**注意**  
此功能在 Fargate 上不可用。

使用 `awsvpc` 网络模式的每个任务都会获得自己的弹性网络接口（ENI），并将其挂载到托管该接口的容器实例。可以附加到 Amazon EC2 实例的网络接口的数量有原定设置限制，并且主网络接口计为一个。例如，默认情况下，最多可将三个 ENI 附加到一个 `c5.large` 实例。实例的主网络接口计为一个，因此您可以向该实例再附加 2 个 ENI。由于每个使用 `awsvpc` 网络模式的任务都需一个 ENI，因此，您通常只能在该实例类型上运行两个此类任务。

Amazon ECS 支持使用受支持的 Amazon EC2 实例类型启动已增加 ENI 密度的容器实例。当您使用这些实例类型并开启 `awsvpcTrunking` 账户设置时，其他 ENI 将在新启动的容器实例上可用。此配置允许您在每个容器实例上放置更多任务。要使用控制台开启该功能，请参阅[修改 Amazon ECS 账户设置](ecs-modifying-longer-id-settings.md)。要使用 AWS CLI 开启该功能，请参阅[使用 AWS CLI 管理 Amazon ECS 账户设置](account-setting-management-cli.md)。

例如，具有 `awsvpcTrunking` 的 `c5.large` 实例增加了十二个的 ENI 限制。容器实例将具有主网络接口，而 Amazon ECS 将创建一个“中继”网络接口并将此接口附加到容器实例。因此，此配置允许您在容器实例上启动 10 个任务，而不是当前的两个任务。

中继网络接口完全由 Amazon ECS 管理，并且会在您从集群中终止或注销容器实例时被删除。有关更多信息，请参阅 [EC2 的 Amazon ECS 任务联网选项](task-networking.md)。

## 注意事项
<a name="eni-trunking-considerations"></a>

在使用 ENI 中继功能时，注意以下事项。
+ 只有经 Amazon ECS 优化的 AMI 的 Linux 版本，或其他具有容器代理 `1.28.1` 版本或更高版本以及 ecs-init 软件包版本 `1.28.1-2` 或更高版本的 Amazon Linux 版本才能支持增加的 ENI 限制。只有您使用经 Amazon ECS 优化的 AMI 的 Linux 版本，则将满足这些要求。目前不支持 Windows 容器。
+ 仅在启用 `awsvpcTrunking` 后启动的新 Amazon EC2 实例将收到增加的 ENI 限制和中继网络接口。无论采取何种措施，以前启动的实例都不会收到这些功能。
+ Amazon EC2 实例必须关闭基于资源的 IPv4 DNS 请求。要禁用此选项，请在 Amazon EC2 控制台中创建新实例时取消选中**启用基于资源的 IPV4（A 记录）DNS 请求）**选项。要使用 AWS CLI 禁用此选项，使用以下命令：

  ```
  aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run
  ```
+ 不支持共享子网中的 Amazon EC2 实例。如果使用这些实例，则它们将无法注册到集群。
+ 您的任务必须使用 `awsvpc` 网络模式和 EC2。不管启动的实例数量如何，使用 Fargate 的任务都始终会收到专用 ENI，因此不需要此功能。
+ 您的任务必须在容器实例所在的 Amazon VPC 中启动。如果您的任务与容器实例不在同一 VPC 中，则任务将无法启动并显示属性错误。
+ 在启动新的容器实例时，实例将转换为 `REGISTERING` 状态，同时为实例预配置中继弹性网络接口。如果注册失败，则实例将转换为 `REGISTRATION_FAILED` 状态。您可以通过描述容器实例以查看 `statusReason` 字段，该字段描述失败的原因。然后可以手动注销或终止容器实例。一旦容器实例成功注销或终止，Amazon ECS 将删除中继 ENI。
**注意**  
Amazon ECS 会发出容器实例状态更改事件，您可以监控这些事件，以查看过渡到 `REGISTRATION_FAILED` 状态。有关更多信息，请参阅 [Amazon ECS 容器实例状态更改事件](ecs_container_instance_events.md)。
+ 一旦终止容器实例，该实例就会转换为 `DEREGISTERING` 状态，同时取消预配置中继弹性网络接口。随后，实例将转换为 `INACTIVE` 状态。
+ 如果停止然后重新启动具有增加的 ENI 限制的公有子网中的容器实例，则实例将丢失其公有 IP 地址，并且容器代理将丢失其连接。
+ 启用 `awsvpcTrunking` 后，容器实例会收到一个额外的 ENI，其使用 VPC 的默认安全组，并由 Amazon ECS 管理。

  原定设置 VPC 在每个可用区中都有一个公有子网、一个互联网网关以及用于启用 DNS 解析的设置。此子网属于公有子网，因为主路由表会将指向互联网的子网流量发送到互联网网关。您可以从到互联网网关的目标 0.0.0.0/0 中删除路由，以使默认子网变为私有子网。但如果您执行此操作，则在该子网中运行的所有容器实例都无法访问互联网。您可以通过添加或删除安全组规则来控制进出子网的流量。有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》中的[安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)**。

## 先决条件
<a name="eni-trunking-launching"></a>

在启动具有增加的 ENI 限制的容器实例之前，必须完成以下先决条件。
+ 必须创建 Amazon ECS 的服务相关角色。Amazon ECS 服务链接角色为 Amazon ECS 提供代表您调用其他 AWS 服务的权限。此角色是在创建集群时（或者在 AWS 管理控制台 中创建或更新服务时）自动为您创建的。有关更多信息，请参阅 [对 Amazon ECS 使用服务相关角色](using-service-linked-roles.md)。您也可以使用以下 AWS CLI 命令创建服务相关角色。

  ```
  aws iam [create-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-linked-role.html) --aws-service-name ecs.amazonaws.com
  ```
+ 您的账户或容器实例 IAM 角色必须启用 `awsvpcTrunking` 账户设置。我们建议您创建两个容器实例角色（`ecsInstanceRole`）。然后，您可以为一个角色启用 `awsvpcTrunking` 账户设置，并将该角色用于需要 ENI 中继的任务。有关容器实例的更多信息，请参阅[Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md)。

在满足先决条件后，您可以使用受支持的 Amazon EC2 实例类型之一来启动新容器实例，并且实例将具有增加的 ENI 限制。有关受支持实例类型的列表，请参阅 [增加的 Amazon ECS 容器网络接口支持的实例](eni-trunking-supported-instance-types.md)。容器实例必须具有 `1.28.1` 版本或更高版本的容器代理以及 `1.28.1-2` 版本或更高版本的 ecs-init 程序包。只有您使用经 Amazon ECS 优化的 AMI 的 Linux 版本，则将满足这些要求。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

**重要**  
Amazon EC2 实例必须关闭基于资源的 IPv4 DNS 请求。要禁用此选项，请确保在使用 Amazon EC2 控制台中创建新实例时取消选中**启用基于资源的 IPV4（A 记录）DNS 请求**选项。要使用 AWS CLI 禁用此选项，使用以下命令：  

```
aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run
```

**使用 AWS CLI 查看具有增加的 ENI 限制的容器实例**

每个容器实例都有一个默认网络接口，该接口称为中继网络接口。使用以下命令通过查询 `ecs.awsvpc-trunk-id` 属性来列出具有增加的 ENI 限制的容器实例，这表明其具有中继网络接口。
+ [list-attributes](https://docs.aws.amazon.com/cli/latest/reference/ecs/list-attributes.html) (AWS CLI)

  ```
  aws ecs list-attributes \
        --target-type container-instance \
        --attribute-name ecs.awsvpc-trunk-id \
        --cluster cluster_name \
        --region us-east-1
  ```
+ [Get-ECSAttributeList](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ECSAttributeList.html) (AWS Tools for Windows PowerShell)

  ```
  Get-ECSAttributeList -TargetType container-instance -AttributeName ecs.awsvpc-trunk-id -Region us-east-1
  ```

# 增加的 Amazon ECS 容器网络接口支持的实例
<a name="eni-trunking-supported-instance-types"></a>

下面显示了受支持的 Amazon EC2 实例类型，以及在启用 `awsvpcTrunking` 账户设置之前和之后，可以在每个实例类型上启动使用 `awsvpc` 网络模式的任务的数目。

**重要**  
虽然同一实例系列中支持其他实例类型，但不支持 `a1.metal`、`c5.metal`、`c5a.8xlarge`、`c5ad.8xlarge`、`c5d.metal`、`m5.metal`、`p3dn.24xlarge`、`r5.metal`、`r5.8xlarge` 和 `r5d.metal` 实例类型。  
不支持 `c5n`、`d3`、`d3en`、`g3`、`g3s`、`g4dn`、`i3`、`i3en`、`inf1`、`m5dn`、`m5n`、`m5zn`、`mac1`、`r5b`、`r5n`、`r5dn`、`u-12tb1`、`u-6tb1`、`u-9tb1` 和 `z1d` 实例系列。

**Topics**
+ [通用型](#eni-branch-gp)
+ [计算优化型](#eni-branch-co)
+ [内存优化型](#eni-branch-mo)
+ [存储优化](#eni-branch-so)
+ [加速计算型](#eni-branch-ac)
+ [高性能计算](#eni-branch-hpc)

## 通用型
<a name="eni-branch-gp"></a>


| 实例类型 | 没有 ENI 中继的任务限制 | 有 ENI 中继的任务限制 | 
| --- | --- | --- | 
| a1.medium | 1 | 10 | 
| a1.large | 2 | 10 | 
| a1.xlarge | 3 | 20 | 
| a1.2xlarge | 3 | 40 | 
| a1.4xlarge | 7 | 60 | 
| m5.large | 2 | 10 | 
| m5.xlarge | 3 | 20 | 
| m5.2xlarge | 3 | 40 | 
| m5.4xlarge | 7 | 60 | 
| m5.8xlarge | 7 | 60 | 
| m5.12xlarge | 7 | 60 | 
| m5.16xlarge | 14 | 120 | 
| m5.24xlarge | 14 | 120 | 
| m5a.large | 2 | 10 | 
| m5a.xlarge | 3 | 20 | 
| m5a.2xlarge | 3 | 40 | 
| m5a.4xlarge | 7 | 60 | 
| m5a.8xlarge | 7 | 60 | 
| m5a.12xlarge | 7 | 60 | 
| m5a.16xlarge | 14 | 120 | 
| m5a.24xlarge | 14 | 120 | 
| m5ad.large | 2 | 10 | 
| m5ad.xlarge | 3 | 20 | 
| m5ad.2xlarge | 3 | 40 | 
| m5ad.4xlarge | 7 | 60 | 
| m5ad.8xlarge | 7 | 60 | 
| m5ad.12xlarge | 7 | 60 | 
| m5ad.16xlarge | 14 | 120 | 
| m5ad.24xlarge | 14 | 120 | 
| m5d.large | 2 | 10 | 
| m5d.xlarge | 3 | 20 | 
| m5d.2xlarge | 3 | 40 | 
| m5d.4xlarge | 7 | 60 | 
| m5d.8xlarge | 7 | 60 | 
| m5d.12xlarge | 7 | 60 | 
| m5d.16xlarge | 14 | 120 | 
| m5d.24xlarge | 14 | 120 | 
| m5d.metal | 14 | 120 | 
| m6a.large | 2 | 10 | 
| m6a.xlarge | 3 | 20 | 
| m6a.2xlarge | 3 | 40 | 
| m6a.4xlarge | 7 | 60 | 
| m6a.8xlarge | 7 | 90 | 
| m6a.12xlarge | 7 | 120 | 
| m6a.16xlarge | 14 | 120 | 
| m6a.24xlarge | 14 | 120 | 
| m6a.32xlarge | 14 | 120 | 
| m6a.48xlarge | 14 | 120 | 
| m6a.metal | 14 | 120 | 
| m6g.medium | 1 | 4 | 
| m6g.large | 2 | 10 | 
| m6g.xlarge | 3 | 20 | 
| m6g.2xlarge | 3 | 40 | 
| m6g.4xlarge | 7 | 60 | 
| m6g.8xlarge | 7 | 60 | 
| m6g.12xlarge | 7 | 60 | 
| m6g.16xlarge | 14 | 120 | 
| m6g.metal | 14 | 120 | 
| m6gd.medium | 1 | 4 | 
| m6gd.large | 2 | 10 | 
| m6gd.xlarge | 3 | 20 | 
| m6gd.2xlarge | 3 | 40 | 
| m6gd.4xlarge | 7 | 60 | 
| m6gd.8xlarge | 7 | 60 | 
| m6gd.12xlarge | 7 | 60 | 
| m6gd.16xlarge | 14 | 120 | 
| m6gd.metal | 14 | 120 | 
| m6i.large | 2 | 10 | 
| m6i.xlarge | 3 | 20 | 
| m6i.2xlarge | 3 | 40 | 
| m6i.4xlarge | 7 | 60 | 
| m6i.8xlarge | 7 | 90 | 
| m6i.12xlarge | 7 | 120 | 
| m6i.16xlarge | 14 | 120 | 
| m6i.24xlarge | 14 | 120 | 
| m6i.32xlarge | 14 | 120 | 
| m6i.metal | 14 | 120 | 
| m6id.large | 2 | 10 | 
| m6id.xlarge | 3 | 20 | 
| m6id.2xlarge | 3 | 40 | 
| m6id.4xlarge | 7 | 60 | 
| m6id.8xlarge | 7 | 90 | 
| m6id.12xlarge | 7 | 120 | 
| m6id.16xlarge | 14 | 120 | 
| m6id.24xlarge | 14 | 120 | 
| m6id.32xlarge | 14 | 120 | 
| m6id.metal | 14 | 120 | 
| m6idn.large | 2 | 10 | 
| m6idn.xlarge | 3 | 20 | 
| m6idn.2xlarge | 3 | 40 | 
| m6idn.4xlarge | 7 | 60 | 
| m6idn.8xlarge | 7 | 90 | 
| m6idn.12xlarge | 7 | 120 | 
| m6idn.16xlarge | 14 | 120 | 
| m6idn.24xlarge | 14 | 120 | 
| m6idn.32xlarge | 15 | 120 | 
| m6idn.metal | 15 | 120 | 
| m6in.large | 2 | 10 | 
| m6in.xlarge | 3 | 20 | 
| m6in.2xlarge | 3 | 40 | 
| m6in.4xlarge | 7 | 60 | 
| m6in.8xlarge | 7 | 90 | 
| m6in.12xlarge | 7 | 120 | 
| m6in.16xlarge | 14 | 120 | 
| m6in.24xlarge | 14 | 120 | 
| m6in.32xlarge | 15 | 120 | 
| m6in.metal | 15 | 120 | 
| m7a.medium | 1 | 4 | 
| m7a.large | 2 | 10 | 
| m7a.xlarge | 3 | 20 | 
| m7a.2xlarge | 3 | 40 | 
| m7a.4xlarge | 7 | 60 | 
| m7a.8xlarge | 7 | 90 | 
| m7a.12xlarge | 7 | 120 | 
| m7a.16xlarge | 14 | 120 | 
| m7a.24xlarge | 14 | 120 | 
| m7a.32xlarge | 14 | 120 | 
| m7a.48xlarge | 14 | 120 | 
| m7a.metal-48xl | 14 | 120 | 
| m7g.medium | 1 | 4 | 
| m7g.large | 2 | 10 | 
| m7g.xlarge | 3 | 20 | 
| m7g.2xlarge | 3 | 40 | 
| m7g.4xlarge | 7 | 60 | 
| m7g.8xlarge | 7 | 60 | 
| m7g.12xlarge | 7 | 60 | 
| m7g.16xlarge | 14 | 120 | 
| m7g.metal | 14 | 120 | 
| m7gd.medium | 1 | 4 | 
| m7gd.large | 2 | 10 | 
| m7gd.xlarge | 3 | 20 | 
| m7gd.2xlarge | 3 | 40 | 
| m7gd.4xlarge | 7 | 60 | 
| m7gd.8xlarge | 7 | 60 | 
| m7gd.12xlarge | 7 | 60 | 
| m7gd.16xlarge | 14 | 120 | 
| m7gd.metal | 14 | 120 | 
| m7i.large | 2 | 10 | 
| m7i.xlarge | 3 | 20 | 
| m7i.2xlarge | 3 | 40 | 
| m7i.4xlarge | 7 | 60 | 
| m7i.8xlarge | 7 | 90 | 
| m7i.12xlarge | 7 | 120 | 
| m7i.16xlarge | 14 | 120 | 
| m7i.24xlarge | 14 | 120 | 
| m7i.48xlarge | 14 | 120 | 
| m7i.metal-24xl | 14 | 120 | 
| m7i.metal-48xl | 14 | 120 | 
| m7i-flex.large | 2 | 4 | 
| m7i-flex.xlarge | 3 | 10 | 
| m7i-flex.2xlarge | 3 | 20 | 
| m7i-flex.4xlarge | 7 | 40 | 
| m7i-flex.8xlarge | 7 | 60 | 
| m7i-flex.12xlarge | 7 | 120 | 
| m7i-flex.16xlarge | 14 | 120 | 
| m8a.medium | 1 | 4 | 
| m8a.large | 2 | 10 | 
| m8a.xlarge | 3 | 20 | 
| m8a.2xlarge | 3 | 40 | 
| m8a.4xlarge | 7 | 60 | 
| m8a.8xlarge | 9 | 90 | 
| m8a.12xlarge | 11 | 120 | 
| m8a.16xlarge | 15 | 120 | 
| m8a.24xlarge | 15 | 120 | 
| m8a.48xlarge | 23 | 120 | 
| m8a.metal-24xl | 15 | 120 | 
| m8a.metal-48xl | 23 | 120 | 
| m8azn.medium | 2 | 4 | 
| m8azn.large | 3 | 10 | 
| m8azn.xlarge | 3 | 20 | 
| m8azn.3xlarge | 7 | 40 | 
| m8azn.6xlarge | 7 | 60 | 
| m8azn.12xlarge | 15 | 120 | 
| m8azn.24xlarge | 15 | 120 | 
| m8azn.metal-12xl | 15 | 120 | 
| m8azn.metal-24xl | 15 | 120 | 
| m8g.medium | 1 | 4 | 
| m8g.large | 2 | 10 | 
| m8g.xlarge | 3 | 20 | 
| m8g.2xlarge | 3 | 40 | 
| m8g.4xlarge | 7 | 60 | 
| m8g.8xlarge | 7 | 60 | 
| m8g.12xlarge | 7 | 60 | 
| m8g.16xlarge | 14 | 120 | 
| m8g.24xlarge | 14 | 120 | 
| m8g.48xlarge | 14 | 120 | 
| m8g.metal-24xl | 14 | 120 | 
| m8g.metal-48xl | 14 | 120 | 
| m8gb.medium | 1 | 4 | 
| m8gb.large | 2 | 10 | 
| m8gb.xlarge | 3 | 20 | 
| m8gb.2xlarge | 3 | 40 | 
| m8gb.4xlarge | 7 | 60 | 
| m8gb.8xlarge | 9 | 60 | 
| m8gb.12xlarge | 11 | 60 | 
| m8gb.16xlarge | 15 | 120 | 
| m8gb.24xlarge | 23 | 120 | 
| m8gb.48xlarge | 23 | 120 | 
| m8gb.metal-24xl | 23 | 120 | 
| m8gb.metal-48xl | 23 | 120 | 
| m8gd.medium | 1 | 4 | 
| m8gd.large | 2 | 10 | 
| m8gd.xlarge | 3 | 20 | 
| m8gd.2xlarge | 3 | 40 | 
| m8gd.4xlarge | 7 | 60 | 
| m8gd.8xlarge | 7 | 60 | 
| m8gd.12xlarge | 7 | 60 | 
| m8gd.16xlarge | 14 | 120 | 
| m8gd.24xlarge | 14 | 120 | 
| m8gd.48xlarge | 14 | 120 | 
| m8gd.metal-24xl | 14 | 120 | 
| m8gd.metal-48xl | 14 | 120 | 
| m8gn.medium | 1 | 4 | 
| m8gn.large | 2 | 10 | 
| m8gn.xlarge | 3 | 20 | 
| m8gn.2xlarge | 3 | 40 | 
| m8gn.4xlarge | 7 | 60 | 
| m8gn.8xlarge | 9 | 60 | 
| m8gn.12xlarge | 11 | 60 | 
| m8gn.16xlarge | 15 | 120 | 
| m8gn.24xlarge | 23 | 120 | 
| m8gn.48xlarge | 23 | 120 | 
| m8gn.metal-24xl | 23 | 120 | 
| m8gn.metal-48xl | 23 | 120 | 
| m8i.large | 2 | 10 | 
| m8i.xlarge | 3 | 20 | 
| m8i.2xlarge | 3 | 40 | 
| m8i.4xlarge | 7 | 60 | 
| m8i.8xlarge | 9 | 90 | 
| m8i.12xlarge | 11 | 120 | 
| m8i.16xlarge | 15 | 120 | 
| m8i.24xlarge | 15 | 120 | 
| m8i.32xlarge | 23 | 120 | 
| m8i.48xlarge | 23 | 120 | 
| m8i.96xlarge | 23 | 120 | 
| m8i.metal-48xl | 23 | 120 | 
| m8i.metal-96xl | 23 | 120 | 
| m8id.large | 2 | 10 | 
| m8id.xlarge | 3 | 20 | 
| m8id.2xlarge | 3 | 40 | 
| m8id.4xlarge | 7 | 60 | 
| m8id.8xlarge | 9 | 90 | 
| m8id.12xlarge | 11 | 120 | 
| m8id.16xlarge | 15 | 120 | 
| m8id.24xlarge | 15 | 120 | 
| m8id.32xlarge | 23 | 120 | 
| m8id.48xlarge | 23 | 120 | 
| m8id.96xlarge | 23 | 120 | 
| m8id.metal-48xl | 23 | 120 | 
| m8id.metal-96xl | 23 | 120 | 
| m8i-flex.large | 2 | 4 | 
| m8i-flex.xlarge | 3 | 10 | 
| m8i-flex.2xlarge | 3 | 20 | 
| m8i-flex.4xlarge | 7 | 40 | 
| m8i-flex.8xlarge | 9 | 60 | 
| m8i-flex.12xlarge | 11 | 120 | 
| m8i-flex.16xlarge | 15 | 120 | 
| mac2.metal | 7 | 12 | 
| mac2-m1ultra.metal | 7 | 12 | 
| mac2-m2.metal | 7 | 12 | 
| mac2-m2pro.metal | 7 | 12 | 
| mac-m4.metal | 7 | 12 | 
| mac-m4pro.metal | 7 | 12 | 

## 计算优化型
<a name="eni-branch-co"></a>


| 实例类型 | 没有 ENI 中继的任务限制 | 有 ENI 中继的任务限制 | 
| --- | --- | --- | 
| c5.large | 2 | 10 | 
| c5.xlarge | 3 | 20 | 
| c5.2xlarge | 3 | 40 | 
| c5.4xlarge | 7 | 60 | 
| c5.9xlarge | 7 | 60 | 
| c5.12xlarge | 7 | 60 | 
| c5.18xlarge | 14 | 120 | 
| c5.24xlarge | 14 | 120 | 
| c5a.large | 2 | 10 | 
| c5a.xlarge | 3 | 20 | 
| c5a.2xlarge | 3 | 40 | 
| c5a.4xlarge | 7 | 60 | 
| c5a.12xlarge | 7 | 60 | 
| c5a.16xlarge | 14 | 120 | 
| c5a.24xlarge | 14 | 120 | 
| c5ad.large | 2 | 10 | 
| c5ad.xlarge | 3 | 20 | 
| c5ad.2xlarge | 3 | 40 | 
| c5ad.4xlarge | 7 | 60 | 
| c5ad.12xlarge | 7 | 60 | 
| c5ad.16xlarge | 14 | 120 | 
| c5ad.24xlarge | 14 | 120 | 
| c5d.large | 2 | 10 | 
| c5d.xlarge | 3 | 20 | 
| c5d.2xlarge | 3 | 40 | 
| c5d.4xlarge | 7 | 60 | 
| c5d.9xlarge | 7 | 60 | 
| c5d.12xlarge | 7 | 60 | 
| c5d.18xlarge | 14 | 120 | 
| c5d.24xlarge | 14 | 120 | 
| c6a.large | 2 | 10 | 
| c6a.xlarge | 3 | 20 | 
| c6a.2xlarge | 3 | 40 | 
| c6a.4xlarge | 7 | 60 | 
| c6a.8xlarge | 7 | 90 | 
| c6a.12xlarge | 7 | 120 | 
| c6a.16xlarge | 14 | 120 | 
| c6a.24xlarge | 14 | 120 | 
| c6a.32xlarge | 14 | 120 | 
| c6a.48xlarge | 14 | 120 | 
| c6a.metal | 14 | 120 | 
| c6g.medium | 1 | 4 | 
| c6g.large | 2 | 10 | 
| c6g.xlarge | 3 | 20 | 
| c6g.2xlarge | 3 | 40 | 
| c6g.4xlarge | 7 | 60 | 
| c6g.8xlarge | 7 | 60 | 
| c6g.12xlarge | 7 | 60 | 
| c6g.16xlarge | 14 | 120 | 
| c6g.metal | 14 | 120 | 
| c6gd.medium | 1 | 4 | 
| c6gd.large | 2 | 10 | 
| c6gd.xlarge | 3 | 20 | 
| c6gd.2xlarge | 3 | 40 | 
| c6gd.4xlarge | 7 | 60 | 
| c6gd.8xlarge | 7 | 60 | 
| c6gd.12xlarge | 7 | 60 | 
| c6gd.16xlarge | 14 | 120 | 
| c6gd.metal | 14 | 120 | 
| c6gn.medium | 1 | 4 | 
| c6gn.large | 2 | 10 | 
| c6gn.xlarge | 3 | 20 | 
| c6gn.2xlarge | 3 | 40 | 
| c6gn.4xlarge | 7 | 60 | 
| c6gn.8xlarge | 7 | 60 | 
| c6gn.12xlarge | 7 | 60 | 
| c6gn.16xlarge | 14 | 120 | 
| c6i.large | 2 | 10 | 
| c6i.xlarge | 3 | 20 | 
| c6i.2xlarge | 3 | 40 | 
| c6i.4xlarge | 7 | 60 | 
| c6i.8xlarge | 7 | 90 | 
| c6i.12xlarge | 7 | 120 | 
| c6i.16xlarge | 14 | 120 | 
| c6i.24xlarge | 14 | 120 | 
| c6i.32xlarge | 14 | 120 | 
| c6i.metal | 14 | 120 | 
| c6id.large | 2 | 10 | 
| c6id.xlarge | 3 | 20 | 
| c6id.2xlarge | 3 | 40 | 
| c6id.4xlarge | 7 | 60 | 
| c6id.8xlarge | 7 | 90 | 
| c6id.12xlarge | 7 | 120 | 
| c6id.16xlarge | 14 | 120 | 
| c6id.24xlarge | 14 | 120 | 
| c6id.32xlarge | 14 | 120 | 
| c6id.metal | 14 | 120 | 
| c6in.large | 2 | 10 | 
| c6in.xlarge | 3 | 20 | 
| c6in.2xlarge | 3 | 40 | 
| c6in.4xlarge | 7 | 60 | 
| c6in.8xlarge | 7 | 90 | 
| c6in.12xlarge | 7 | 120 | 
| c6in.16xlarge | 14 | 120 | 
| c6in.24xlarge | 14 | 120 | 
| c6in.32xlarge | 15 | 120 | 
| c6in.metal | 15 | 120 | 
| c7a.medium | 1 | 4 | 
| c7a.large | 2 | 10 | 
| c7a.xlarge | 3 | 20 | 
| c7a.2xlarge | 3 | 40 | 
| c7a.4xlarge | 7 | 60 | 
| c7a.8xlarge | 7 | 90 | 
| c7a.12xlarge | 7 | 120 | 
| c7a.16xlarge | 14 | 120 | 
| c7a.24xlarge | 14 | 120 | 
| c7a.32xlarge | 14 | 120 | 
| c7a.48xlarge | 14 | 120 | 
| c7a.metal-48xl | 14 | 120 | 
| c7g.medium | 1 | 4 | 
| c7g.large | 2 | 10 | 
| c7g.xlarge | 3 | 20 | 
| c7g.2xlarge | 3 | 40 | 
| c7g.4xlarge | 7 | 60 | 
| c7g.8xlarge | 7 | 60 | 
| c7g.12xlarge | 7 | 60 | 
| c7g.16xlarge | 14 | 120 | 
| c7g.metal | 14 | 120 | 
| c7gd.medium | 1 | 4 | 
| c7gd.large | 2 | 10 | 
| c7gd.xlarge | 3 | 20 | 
| c7gd.2xlarge | 3 | 40 | 
| c7gd.4xlarge | 7 | 60 | 
| c7gd.8xlarge | 7 | 60 | 
| c7gd.12xlarge | 7 | 60 | 
| c7gd.16xlarge | 14 | 120 | 
| c7gd.metal | 14 | 120 | 
| c7gn.medium | 1 | 4 | 
| c7gn.large | 2 | 10 | 
| c7gn.xlarge | 3 | 20 | 
| c7gn.2xlarge | 3 | 40 | 
| c7gn.4xlarge | 7 | 60 | 
| c7gn.8xlarge | 7 | 60 | 
| c7gn.12xlarge | 7 | 60 | 
| c7gn.16xlarge | 14 | 120 | 
| c7gn.metal | 14 | 120 | 
| c7i.large | 2 | 10 | 
| c7i.xlarge | 3 | 20 | 
| c7i.2xlarge | 3 | 40 | 
| c7i.4xlarge | 7 | 60 | 
| c7i.8xlarge | 7 | 90 | 
| c7i.12xlarge | 7 | 120 | 
| c7i.16xlarge | 14 | 120 | 
| c7i.24xlarge | 14 | 120 | 
| c7i.48xlarge | 14 | 120 | 
| c7i.metal-24xl | 14 | 120 | 
| c7i.metal-48xl | 14 | 120 | 
| c7i-flex.large | 2 | 4 | 
| c7i-flex.xlarge | 3 | 10 | 
| c7i-flex.2xlarge | 3 | 20 | 
| c7i-flex.4xlarge | 7 | 40 | 
| c7i-flex.8xlarge | 7 | 60 | 
| c7i-flex.12xlarge | 7 | 120 | 
| c7i-flex.16xlarge | 14 | 120 | 
| c8a.medium | 1 | 4 | 
| c8a.large | 2 | 10 | 
| c8a.xlarge | 3 | 20 | 
| c8a.2xlarge | 3 | 40 | 
| c8a.4xlarge | 7 | 60 | 
| c8a.8xlarge | 9 | 90 | 
| c8a.12xlarge | 11 | 120 | 
| c8a.16xlarge | 15 | 120 | 
| c8a.24xlarge | 15 | 120 | 
| c8a.48xlarge | 23 | 120 | 
| c8a.metal-24xl | 15 | 120 | 
| c8a.metal-48xl | 23 | 120 | 
| c8g.medium | 1 | 4 | 
| c8g.large | 2 | 10 | 
| c8g.xlarge | 3 | 20 | 
| c8g.2xlarge | 3 | 40 | 
| c8g.4xlarge | 7 | 60 | 
| c8g.8xlarge | 7 | 60 | 
| c8g.12xlarge | 7 | 60 | 
| c8g.16xlarge | 14 | 120 | 
| c8g.24xlarge | 14 | 120 | 
| c8g.48xlarge | 14 | 120 | 
| c8g.metal-24xl | 14 | 120 | 
| c8g.metal-48xl | 14 | 120 | 
| c8gb.medium | 1 | 4 | 
| c8gb.large | 2 | 10 | 
| c8gb.xlarge | 3 | 20 | 
| c8gb.2xlarge | 3 | 40 | 
| c8gb.4xlarge | 7 | 60 | 
| c8gb.8xlarge | 9 | 60 | 
| c8gb.12xlarge | 11 | 60 | 
| c8gb.16xlarge | 15 | 120 | 
| c8gb.24xlarge | 23 | 120 | 
| c8gb.48xlarge | 23 | 120 | 
| c8gb.metal-24xl | 23 | 120 | 
| c8gb.metal-48xl | 23 | 120 | 
| c8gd.medium | 1 | 4 | 
| c8gd.large | 2 | 10 | 
| c8gd.xlarge | 3 | 20 | 
| c8gd.2xlarge | 3 | 40 | 
| c8gd.4xlarge | 7 | 60 | 
| c8gd.8xlarge | 7 | 60 | 
| c8gd.12xlarge | 7 | 60 | 
| c8gd.16xlarge | 14 | 120 | 
| c8gd.24xlarge | 14 | 120 | 
| c8gd.48xlarge | 14 | 120 | 
| c8gd.metal-24xl | 14 | 120 | 
| c8gd.metal-48xl | 14 | 120 | 
| c8gn.medium | 1 | 4 | 
| c8gn.large | 2 | 10 | 
| c8gn.xlarge | 3 | 20 | 
| c8gn.2xlarge | 3 | 40 | 
| c8gn.4xlarge | 7 | 60 | 
| c8gn.8xlarge | 9 | 60 | 
| c8gn.12xlarge | 11 | 60 | 
| c8gn.16xlarge | 15 | 120 | 
| c8gn.24xlarge | 23 | 120 | 
| c8gn.48xlarge | 23 | 120 | 
| c8gn.metal-24xl | 23 | 120 | 
| c8gn.metal-48xl | 23 | 120 | 
| c8i.large | 2 | 10 | 
| c8i.xlarge | 3 | 20 | 
| c8i.2xlarge | 3 | 40 | 
| c8i.4xlarge | 7 | 60 | 
| c8i.8xlarge | 9 | 90 | 
| c8i.12xlarge | 11 | 120 | 
| c8i.16xlarge | 15 | 120 | 
| c8i.24xlarge | 15 | 120 | 
| c8i.32xlarge | 23 | 120 | 
| c8i.48xlarge | 23 | 120 | 
| c8i.96xlarge | 23 | 120 | 
| c8i.metal-48xl | 23 | 120 | 
| c8i.metal-96xl | 23 | 120 | 
| c8id.large | 2 | 10 | 
| c8id.xlarge | 3 | 20 | 
| c8id.2xlarge | 3 | 40 | 
| c8id.4xlarge | 7 | 60 | 
| c8id.8xlarge | 9 | 90 | 
| c8id.12xlarge | 11 | 120 | 
| c8id.16xlarge | 15 | 120 | 
| c8id.24xlarge | 15 | 120 | 
| c8id.32xlarge | 23 | 120 | 
| c8id.48xlarge | 23 | 120 | 
| c8id.96xlarge | 23 | 120 | 
| c8id.metal-48xl | 23 | 120 | 
| c8id.metal-96xl | 23 | 120 | 
| c8i-flex.large | 2 | 4 | 
| c8i-flex.xlarge | 3 | 10 | 
| c8i-flex.2xlarge | 3 | 20 | 
| c8i-flex.4xlarge | 7 | 40 | 
| c8i-flex.8xlarge | 9 | 60 | 
| c8i-flex.12xlarge | 11 | 120 | 
| c8i-flex.16xlarge | 15 | 120 | 

## 内存优化型
<a name="eni-branch-mo"></a>


| 实例类型 | 没有 ENI 中继的任务限制 | 有 ENI 中继的任务限制 | 
| --- | --- | --- | 
| r5.large | 2 | 10 | 
| r5.xlarge | 3 | 20 | 
| r5.2xlarge | 3 | 40 | 
| r5.4xlarge | 7 | 60 | 
| r5.12xlarge | 7 | 60 | 
| r5.16xlarge | 14 | 120 | 
| r5.24xlarge | 14 | 120 | 
| r5a.large | 2 | 10 | 
| r5a.xlarge | 3 | 20 | 
| r5a.2xlarge | 3 | 40 | 
| r5a.4xlarge | 7 | 60 | 
| r5a.8xlarge | 7 | 60 | 
| r5a.12xlarge | 7 | 60 | 
| r5a.16xlarge | 14 | 120 | 
| r5a.24xlarge | 14 | 120 | 
| r5ad.large | 2 | 10 | 
| r5ad.xlarge | 3 | 20 | 
| r5ad.2xlarge | 3 | 40 | 
| r5ad.4xlarge | 7 | 60 | 
| r5ad.8xlarge | 7 | 60 | 
| r5ad.12xlarge | 7 | 60 | 
| r5ad.16xlarge | 14 | 120 | 
| r5ad.24xlarge | 14 | 120 | 
| r5b.16xlarge | 14 | 120 | 
| r5d.large | 2 | 10 | 
| r5d.xlarge | 3 | 20 | 
| r5d.2xlarge | 3 | 40 | 
| r5d.4xlarge | 7 | 60 | 
| r5d.8xlarge | 7 | 60 | 
| r5d.12xlarge | 7 | 60 | 
| r5d.16xlarge | 14 | 120 | 
| r5d.24xlarge | 14 | 120 | 
| r5dn.16xlarge | 14 | 120 | 
| r6a.large | 2 | 10 | 
| r6a.xlarge | 3 | 20 | 
| r6g.2xlarge | 3 | 40 | 
| r6a.4xlarge | 7 | 60 | 
| r6a.8xlarge | 7 | 90 | 
| r6a.12xlarge | 7 | 120 | 
| r6a.16xlarge | 14 | 120 | 
| r6a.24xlarge | 14 | 120 | 
| r6a.32xlarge | 14 | 120 | 
| r6a.48xlarge | 14 | 120 | 
| r6a.metal | 14 | 120 | 
| r6g.medium | 1 | 4 | 
| r6g.large | 2 | 10 | 
| r6g.xlarge | 3 | 20 | 
| r6g.2xlarge | 3 | 40 | 
| r6g.4xlarge | 7 | 60 | 
| r6g.8xlarge | 7 | 60 | 
| r6g.12xlarge | 7 | 60 | 
| r6g.16xlarge | 14 | 120 | 
| r6g.metal | 14 | 120 | 
| r6gd.medium | 1 | 4 | 
| r6gd.large | 2 | 10 | 
| r6gd.xlarge | 3 | 20 | 
| r6gd.2xlarge | 3 | 40 | 
| r6gd.4xlarge | 7 | 60 | 
| r6gd.8xlarge | 7 | 60 | 
| r6gd.12xlarge | 7 | 60 | 
| r6gd.16xlarge | 14 | 120 | 
| r6gd.metal | 14 | 120 | 
| r6i.large | 2 | 10 | 
| r6i.xlarge | 3 | 20 | 
| r6i.2xlarge | 3 | 40 | 
| r6i.4xlarge | 7 | 60 | 
| r6i.8xlarge | 7 | 90 | 
| r6i.12xlarge | 7 | 120 | 
| r6i.16xlarge | 14 | 120 | 
| r6i.24xlarge | 14 | 120 | 
| r6i.32xlarge | 14 | 120 | 
| r6i.metal | 14 | 120 | 
| r6id.large | 2 | 10 | 
| r6id.xlarge | 3 | 20 | 
| r6gd.2xlarge | 3 | 40 | 
| r6id.4xlarge | 7 | 60 | 
| r6id.8xlarge | 7 | 90 | 
| r6id.12xlarge | 7 | 120 | 
| r6id.16xlarge | 14 | 120 | 
| r6id.24xlarge | 14 | 120 | 
| r6id.32xlarge | 14 | 120 | 
| r6id.metal | 14 | 120 | 
| r6idn.large | 2 | 10 | 
| r6idn.xlarge | 3 | 20 | 
| r6idn.2xlarge | 3 | 40 | 
| r6idn.4xlarge | 7 | 60 | 
| r6idn.8xlarge | 7 | 90 | 
| r6idn.12xlarge | 7 | 120 | 
| r6idn.16xlarge | 14 | 120 | 
| r6idn.24xlarge | 14 | 120 | 
| r6idn.32xlarge | 15 | 120 | 
| r6idn.metal | 15 | 120 | 
| r6in.large | 2 | 10 | 
| r6in.xlarge | 3 | 20 | 
| r6in.2xlarge | 3 | 40 | 
| r6in.4xlarge | 7 | 60 | 
| r6in.8xlarge | 7 | 90 | 
| r6in.12xlarge | 7 | 120 | 
| r6in.16xlarge | 14 | 120 | 
| r6in.24xlarge | 14 | 120 | 
| r6in.32xlarge | 15 | 120 | 
| r6in.metal | 15 | 120 | 
| r7a.medium | 1 | 4 | 
| r7a.large | 2 | 10 | 
| r7a.xlarge | 3 | 20 | 
| r7a.2xlarge | 3 | 40 | 
| r7a.4xlarge | 7 | 60 | 
| r7a.8xlarge | 7 | 90 | 
| r7a.12xlarge | 7 | 120 | 
| r7a.16xlarge | 14 | 120 | 
| r7a.24xlarge | 14 | 120 | 
| r7a.32xlarge | 14 | 120 | 
| r7a.48xlarge | 14 | 120 | 
| r7a.metal-48xl | 14 | 120 | 
| r7g.medium | 1 | 4 | 
| r7g.large | 2 | 10 | 
| r7g.xlarge | 3 | 20 | 
| r7g.2xlarge | 3 | 40 | 
| r7g.4xlarge | 7 | 60 | 
| r7g.8xlarge | 7 | 60 | 
| r7g.12xlarge | 7 | 60 | 
| r7g.16xlarge | 14 | 120 | 
| r7g.metal | 14 | 120 | 
| r7gd.medium | 1 | 4 | 
| r7gd.large | 2 | 10 | 
| r7gd.xlarge | 3 | 20 | 
| r7gd.2xlarge | 3 | 40 | 
| r7gd.4xlarge | 7 | 60 | 
| r7gd.8xlarge | 7 | 60 | 
| r7gd.12xlarge | 7 | 60 | 
| r7gd.16xlarge | 14 | 120 | 
| r7gd.metal | 14 | 120 | 
| r7i.large | 2 | 10 | 
| r7i.xlarge | 3 | 20 | 
| r7i.2xlarge | 3 | 40 | 
| r7i.4xlarge | 7 | 60 | 
| r7i.8xlarge | 7 | 90 | 
| r7i.12xlarge | 7 | 120 | 
| r7i.16xlarge | 14 | 120 | 
| r7i.24xlarge | 14 | 120 | 
| r7i.48xlarge | 14 | 120 | 
| r7i.metal-24xl | 14 | 120 | 
| r7i.metal-48xl | 14 | 120 | 
| r7iz.large | 2 | 10 | 
| r7iz.xlarge | 3 | 20 | 
| r7iz.2xlarge | 3 | 40 | 
| r7iz.4xlarge | 7 | 60 | 
| r7iz.8xlarge | 7 | 90 | 
| r7iz.12xlarge | 7 | 120 | 
| r7iz.16xlarge | 14 | 120 | 
| r7iz.32xlarge | 14 | 120 | 
| r7iz.metal-16xl | 14 | 120 | 
| r7iz.metal-32xl | 14 | 120 | 
| r8a.medium | 1 | 4 | 
| r8a.large | 2 | 10 | 
| r8a.xlarge | 3 | 20 | 
| r8a.2xlarge | 3 | 40 | 
| r8a.4xlarge | 7 | 60 | 
| r8a.8xlarge | 9 | 90 | 
| r8a.12xlarge | 11 | 120 | 
| r8a.16xlarge | 15 | 120 | 
| r8a.24xlarge | 15 | 120 | 
| r8a.48xlarge | 23 | 120 | 
| r8a.metal-24xl | 15 | 120 | 
| r8a.metal-48xl | 23 | 120 | 
| r8g.medium | 1 | 4 | 
| r8g.large | 2 | 10 | 
| r8g.xlarge | 3 | 20 | 
| r8g.2xlarge | 3 | 40 | 
| r8g.4xlarge | 7 | 60 | 
| r8g.8xlarge | 7 | 60 | 
| r8g.12xlarge | 7 | 60 | 
| r8g.16xlarge | 14 | 120 | 
| r8g.24xlarge | 14 | 120 | 
| r8g.48xlarge | 14 | 120 | 
| r8g.metal-24xl | 14 | 120 | 
| r8g.metal-48xl | 14 | 120 | 
| r8gb.medium | 1 | 4 | 
| r8gb.large | 2 | 10 | 
| r8gb.xlarge | 3 | 20 | 
| r8gb.2xlarge | 3 | 40 | 
| r8gb.4xlarge | 7 | 60 | 
| r8gb.8xlarge | 9 | 60 | 
| r8gb.12xlarge | 11 | 60 | 
| r8gb.16xlarge | 15 | 120 | 
| r8gb.24xlarge | 23 | 120 | 
| r8gb.48xlarge | 23 | 120 | 
| r8gb.metal-24xl | 23 | 120 | 
| r8gb.metal-48xl | 23 | 120 | 
| r8gd.medium | 1 | 4 | 
| r8gd.large | 2 | 10 | 
| r8gd.xlarge | 3 | 20 | 
| r8gd.2xlarge | 3 | 40 | 
| r8gd.4xlarge | 7 | 60 | 
| r8gd.8xlarge | 7 | 60 | 
| r8gd.12xlarge | 7 | 60 | 
| r8gd.16xlarge | 14 | 120 | 
| r8gd.24xlarge | 14 | 120 | 
| r8gd.48xlarge | 14 | 120 | 
| r8gd.metal-24xl | 14 | 120 | 
| r8gd.metal-48xl | 14 | 120 | 
| r8gn.medium | 1 | 4 | 
| r8gn.large | 2 | 10 | 
| r8gn.xlarge | 3 | 20 | 
| r8gn.2xlarge | 3 | 40 | 
| r8gn.4xlarge | 7 | 60 | 
| r8gn.8xlarge | 9 | 60 | 
| r8gn.12xlarge | 11 | 60 | 
| r8gn.16xlarge | 15 | 120 | 
| r8gn.24xlarge | 23 | 120 | 
| r8gn.48xlarge | 23 | 120 | 
| r8gn.metal-24xl | 23 | 120 | 
| r8gn.metal-48xl | 23 | 120 | 
| r8i.large | 2 | 10 | 
| r8i.xlarge | 3 | 20 | 
| r8i.2xlarge | 3 | 40 | 
| r8i.4xlarge | 7 | 60 | 
| r8i.8xlarge | 9 | 90 | 
| r8i.12xlarge | 11 | 120 | 
| r8i.16xlarge | 15 | 120 | 
| r8i.24xlarge | 15 | 120 | 
| r8i.32xlarge | 23 | 120 | 
| r8i.48xlarge | 23 | 120 | 
| r8i.96xlarge | 23 | 120 | 
| r8i.metal-48xl | 23 | 120 | 
| r8i.metal-96xl | 23 | 120 | 
| r8id.large | 2 | 10 | 
| r8id.xlarge | 3 | 20 | 
| r8id.2xlarge | 3 | 40 | 
| r8id.4xlarge | 7 | 60 | 
| r8id.8xlarge | 9 | 90 | 
| r8id.12xlarge | 11 | 120 | 
| r8id.16xlarge | 15 | 120 | 
| r8id.24xlarge | 15 | 120 | 
| r8id.32xlarge | 23 | 120 | 
| r8id.48xlarge | 23 | 120 | 
| r8id.96xlarge | 23 | 120 | 
| r8id.metal-48xl | 23 | 120 | 
| r8id.metal-96xl | 23 | 120 | 
| r8i-flex.large | 2 | 4 | 
| r8i-flex.xlarge | 3 | 10 | 
| r8i-flex.2xlarge | 3 | 20 | 
| r8i-flex.4xlarge | 7 | 40 | 
| r8i-flex.8xlarge | 9 | 60 | 
| r8i-flex.12xlarge | 11 | 120 | 
| r8i-flex.16xlarge | 15 | 120 | 
| u-3tb1.56xlarge | 7 | 12 | 
| u-6tb1.56xlarge | 14 | 12 | 
| u-18tb1.112xlarge | 14 | 12 | 
| u-18tb1.metal | 14 | 12 | 
| u-24tb1.112xlarge | 14 | 12 | 
| u-24tb1.metal | 14 | 12 | 
| u7i-6tb.112xlarge | 14 | 120 | 
| u7i-8tb.112xlarge | 14 | 120 | 
| u7i-12tb.224xlarge | 14 | 120 | 
| u7in-16tb.224xlarge | 15 | 120 | 
| u7in-24tb.224xlarge | 15 | 120 | 
| u7in-32tb.224xlarge | 15 | 120 | 
| u7inh-32tb.480xlarge | 15 | 120 | 
| x2gd.medium | 1 | 10 | 
| x2gd.large | 2 | 10 | 
| x2gd.xlarge | 3 | 20 | 
| x2gd.2xlarge | 3 | 40 | 
| x2gd.4xlarge | 7 | 60 | 
| x2gd.8xlarge | 7 | 60 | 
| x2gd.12xlarge | 7 | 60 | 
| x2gd.16xlarge | 14 | 120 | 
| x2gd.metal | 14 | 120 | 
| x2idn.16xlarge | 14 | 120 | 
| x2idn.24xlarge | 14 | 120 | 
| x2idn.32xlarge | 14 | 120 | 
| x2idn.metal | 14 | 120 | 
| x2iedn.xlarge | 3 | 13 | 
| x2iedn.2xlarge | 3 | 29 | 
| x2iedn.4xlarge | 7 | 60 | 
| x2iedn.8xlarge | 7 | 120 | 
| x2iedn.16xlarge | 14 | 120 | 
| x2iedn.24xlarge | 14 | 120 | 
| x2iedn.32xlarge | 14 | 120 | 
| x2iedn.metal | 14 | 120 | 
| x2iezn.2xlarge | 3 | 64 | 
| x2iezn.4xlarge | 7 | 120 | 
| x2iezn.6xlarge | 7 | 120 | 
| x2iezn.8xlarge | 7 | 120 | 
| x2iezn.12xlarge | 14 | 120 | 
| x2iezn.metal | 14 | 120 | 
| x8g.medium | 1 | 4 | 
| x8g.large | 2 | 10 | 
| x8g.xlarge | 3 | 20 | 
| x8g.2xlarge | 3 | 40 | 
| x8g.4xlarge | 7 | 60 | 
| x8g.8xlarge | 7 | 60 | 
| x8g.12xlarge | 7 | 60 | 
| x8g.16xlarge | 14 | 120 | 
| x8g.24xlarge | 14 | 120 | 
| x8g.48xlarge | 14 | 120 | 
| x8g.metal-24xl | 14 | 120 | 
| x8g.metal-48xl | 14 | 120 | 
| x8aedz.large | 3 | 10 | 
| x8aedz.xlarge | 3 | 20 | 
| x8aedz.3xlarge | 7 | 40 | 
| x8aedz.6xlarge | 7 | 60 | 
| x8aedz.12xlarge | 15 | 120 | 
| x8aedz.24xlarge | 15 | 120 | 
| x8aedz.metal-12xl | 15 | 120 | 
| x8aedz.metal-24xl | 15 | 120 | 
| x8i.large | 2 | 10 | 
| x8i.xlarge | 3 | 20 | 
| x8i.2xlarge | 3 | 40 | 
| x8i.4xlarge | 7 | 60 | 
| x8i.8xlarge | 9 | 90 | 
| x8i.12xlarge | 11 | 120 | 
| x8i.16xlarge | 15 | 120 | 
| x8i.24xlarge | 15 | 120 | 
| x8i.32xlarge | 23 | 120 | 
| x8i.48xlarge | 23 | 120 | 
| x8i.64xlarge | 23 | 120 | 
| x8i.96xlarge | 23 | 120 | 
| x8i.metal-48xl | 23 | 120 | 
| x8i.metal-96xl | 23 | 120 | 

## 存储优化
<a name="eni-branch-so"></a>


| 实例类型 | 没有 ENI 中继的任务限制 | 有 ENI 中继的任务限制 | 
| --- | --- | --- | 
| i4g.large | 2 | 10 | 
| i4g.xlarge | 3 | 20 | 
| i4g.2xlarge | 3 | 40 | 
| i4g.4xlarge | 7 | 60 | 
| i4g.8xlarge | 7 | 60 | 
| i4g.16xlarge | 14 | 120 | 
| i4i.xlarge | 3 | 8 | 
| i4i.2xlarge | 3 | 28 | 
| i4i.4xlarge | 7 | 58 | 
| i4i.8xlarge | 7 | 118 | 
| i4i.12xlarge | 7 | 118 | 
| i4i.16xlarge | 14 | 248 | 
| i4i.24xlarge | 14 | 118 | 
| i4i.32xlarge | 14 | 498 | 
| i4i.metal | 14 | 498 | 
| i7i.large | 2 | 10 | 
| i7i.xlarge | 3 | 20 | 
| i7i.2xlarge | 3 | 40 | 
| i7i.4xlarge | 7 | 60 | 
| i7i.8xlarge | 7 | 90 | 
| i7i.12xlarge | 7 | 90 | 
| i7i.16xlarge | 14 | 120 | 
| i7i.24xlarge | 14 | 120 | 
| i7i.48xlarge | 14 | 120 | 
| i7i.metal-24xl | 14 | 120 | 
| i7i.metal-48xl | 14 | 120 | 
| i7ie.large | 2 | 20 | 
| i7ie.xlarge | 3 | 29 | 
| i7ie.2xlarge | 3 | 29 | 
| i7ie.3xlarge | 3 | 29 | 
| i7ie.6xlarge | 7 | 60 | 
| i7ie.12xlarge | 7 | 60 | 
| i7ie.18xlarge | 14 | 120 | 
| i7ie.24xlarge | 14 | 120 | 
| i7ie.48xlarge | 14 | 120 | 
| i7ie.metal-24xl | 14 | 120 | 
| i7ie.metal-48xl | 14 | 120 | 
| i8g.large | 2 | 10 | 
| i8g.xlarge | 3 | 20 | 
| i8g.2xlarge | 3 | 40 | 
| i8g.4xlarge | 7 | 60 | 
| i8g.8xlarge | 7 | 60 | 
| i8g.12xlarge | 7 | 60 | 
| i8g.16xlarge | 14 | 120 | 
| i8g.24xlarge | 14 | 120 | 
| i8g.48xlarge | 14 | 120 | 
| i8g.metal-24xl | 14 | 120 | 
| i8g.metal-48xl | 14 | 120 | 
| i8ge.large | 2 | 20 | 
| i8ge.xlarge | 3 | 29 | 
| i8ge.2xlarge | 3 | 29 | 
| i8ge.3xlarge | 5 | 29 | 
| i8ge.6xlarge | 9 | 60 | 
| i8ge.12xlarge | 11 | 60 | 
| i8ge.18xlarge | 15 | 120 | 
| i8ge.24xlarge | 15 | 120 | 
| i8ge.48xlarge | 23 | 120 | 
| i8ge.metal-24xl | 15 | 120 | 
| i8ge.metal-48xl | 23 | 120 | 
| im4gn.large | 2 | 10 | 
| im4gn.xlarge | 3 | 20 | 
| im4gn.2xlarge | 3 | 40 | 
| im4gn.4xlarge | 7 | 60 | 
| im4gn.8xlarge | 7 | 60 | 
| im4gn.16xlarge | 14 | 120 | 
| is4gen.medium | 1 | 4 | 
| is4gen.large | 2 | 10 | 
| is4gen.xlarge | 3 | 20 | 
| is4gen.2xlarge | 3 | 40 | 
| is4gen.4xlarge | 7 | 60 | 
| is4gen.8xlarge | 7 | 60 | 

## 加速计算型
<a name="eni-branch-ac"></a>


| 实例类型 | 没有 ENI 中继的任务限制 | 有 ENI 中继的任务限制 | 
| --- | --- | --- | 
| dl1.24xlarge | 59 | 120 | 
| dl2q.24xlarge | 14 | 120 | 
| f2.6xlarge | 7 | 90 | 
| f2.12xlarge | 7 | 120 | 
| f2.48xlarge | 14 | 120 | 
| g4ad.xlarge | 1 | 12 | 
| g4ad.2xlarge | 1 | 12 | 
| g4ad.4xlarge | 2 | 12 | 
| g4ad.8xlarge | 3 | 12 | 
| g4ad.16xlarge | 7 | 12 | 
| g5.xlarge | 3 | 6 | 
| g5.2xlarge | 3 | 19 | 
| g5.4xlarge | 7 | 40 | 
| g5.8xlarge | 7 | 90 | 
| g5.12xlarge | 14 | 120 | 
| g5.16xlarge | 7 | 120 | 
| g5.24xlarge | 14 | 120 | 
| g5.48xlarge | 6 | 120 | 
| g5g.xlarge | 3 | 20 | 
| g5g.2xlarge | 3 | 40 | 
| g5g.4xlarge | 7 | 60 | 
| g5g.8xlarge | 7 | 60 | 
| g5g.16xlarge | 14 | 120 | 
| g5g.metal | 14 | 120 | 
| g6.xlarge | 3 | 20 | 
| g6.2xlarge | 3 | 40 | 
| g6.4xlarge | 7 | 60 | 
| g6.8xlarge | 7 | 90 | 
| g6.12xlarge | 7 | 120 | 
| g6.16xlarge | 14 | 120 | 
| g6.24xlarge | 14 | 120 | 
| g6.48xlarge | 14 | 120 | 
| g6e.xlarge | 3 | 20 | 
| g6e.2xlarge | 3 | 40 | 
| g6e.4xlarge | 7 | 60 | 
| g6e.8xlarge | 7 | 90 | 
| g6e.12xlarge | 9 | 120 | 
| g6e.16xlarge | 14 | 120 | 
| g6e.24xlarge | 19 | 120 | 
| g6e.48xlarge | 39 | 120 | 
| g6f.large | 1 | 10 | 
| g6f.xlarge | 3 | 20 | 
| g6f.2xlarge | 3 | 40 | 
| g6f.4xlarge | 7 | 60 | 
| gr6.4xlarge | 7 | 60 | 
| gr6.8xlarge | 7 | 90 | 
| gr6f.4xlarge | 7 | 60 | 
| g7e.2xlarge | 3 | 242 | 
| g7e.4xlarge | 7 | 242 | 
| g7e.8xlarge | 7 | 242 | 
| g7e.12xlarge | 9 | 242 | 
| g7e.24xlarge | 19 | 242 | 
| g7e.48xlarge | 39 | 242 | 
| inf2.xlarge | 3 | 20 | 
| inf2.8xlarge | 7 | 90 | 
| inf2.24xlarge | 14 | 120 | 
| inf2.48xlarge | 14 | 120 | 
| p4d.24xlarge | 59 | 120 | 
| p4de.24xlarge | 59 | 120 | 
| p5.4xLarge | 3 | 60 | 
| p5.48xlarge | 63 | 242 | 
| p5e.48xlarge | 63 | 242 | 
| p5en.48xlarge | 63 | 242 | 
| p6-b200.48xlarge | 31 | 242 | 
| p6-b300.48xlarge | 67 | 242 | 
| p6e-gb200.36xlarge | 38 | 120 | 
| trn1.2xlarge | 3 | 19 | 
| trn1.32xlarge | 39 | 120 | 
| trn1n.32xlarge | 79 | 242 | 
| trn2.3xlarge | 1 | 14 | 
| trn2.48xlarge | 31 | 242 | 
| trn2u.48xlarge | 31 | 242 | 
| vt1.3xlarge | 3 | 40 | 
| vt1.6xlarge | 7 | 60 | 
| vt1.24xlarge | 14 | 120 | 

## 高性能计算
<a name="eni-branch-hpc"></a>


| 实例类型 | 没有 ENI 中继的任务限制 | 有 ENI 中继的任务限制 | 
| --- | --- | --- | 
| hpc6a.48xlarge | 1 | 120 | 
| hpc6id.32xlarge | 1 | 120 | 
| hpc7g.4xlarge | 3 | 120 | 
| hpc7g.8xlarge | 3 | 120 | 
| hpc7g.16xlarge | 3 | 120 | 
| hpc8a.96xlarge | 3 | -2 | 

# 预留 Amazon ECS Linux 容器实例内存
<a name="memory-management"></a>

当 Amazon ECS 容器代理将容器实例注册到集群中时，代理必须确定容器实例可为任务预留的内存量。由于平台内存开销和系统内核占用的内存，此数量不同于 Amazon EC2 实例所标示的已安装内存量。例如，`m4.large` 实例具有 8GiB 的已安装内存。但是，当容器实例注册时，这并不总是转换为可用于任务的 8192MiB 内存。

## ECS 托管实例内存资源确定
<a name="ecs-mi-memory-calculation"></a>

Amazon ECS 托管实例采用分层方法来确定任务的内存资源要求。与依赖 Docker 内存自省的 ECS on EC2 不同，ECS 托管实例在调度决策期间直接从任务有效载荷计算内存需求。

当 ECS 托管实例代理收到任务时，它会按照以下优先级顺序计算内存需求：

1. **任务级内存（最高优先级）**：如果在任务定义中指定了任务级内存，则代理直接使用此值。这优先于所有容器级内存设置。

1. **容器级内存总和（回退）**：如果未指定任务级内存（或为 0），代理会对任务中所有容器的内存需求进行求和。对于每个容器，它使用：

   1. *内存预留（软限制）*：如果容器在其配置中指定了 `memoryReservation`，则代理会使用此值。

   1. *容器内存（硬限制）*：如果未指定 `memoryReservation`，则 代理将使用容器的 `memory` 字段。

**Example 指定的任务级内存**  
当指定任务级内存时，其优先级高于容器级设置：  

```
{
  "family": "my-task",
  "memory": "2048",
  "containerDefinitions": [
    {
      "name": "container1",
      "memory": 1024,
      "memoryReservation": 512
    }
  ]
}
```
代理预留 2048 MiB（任务级内存优先）。

**Example 具有预留的容器级内存**  
当未指定任务级内存时，代理会计算容器内存需求的总和：  

```
{
  "family": "my-task",
  "containerDefinitions": [
    {
      "name": "container1",
      "memory": 1024,
      "memoryReservation": 512
    },
    {
      "name": "container2",
      "memory": 512
    }
  ]
}
```
代理预留 512 MiB（容器 1 预留）\$1 512 MiB（容器 2 内存）= 总计 1024 MiB。

ECS 托管实例代理分三个阶段执行内存计算：

1. **任务接收**：当来自 ECS 控制面板的任务有效载荷到达时，代理会立即计算所需的内存。

1. **资源存储**：计算出的内存需求存储在任务模型中，以便稍后在资源核算操作中使用。

1. **计划决策**：在接受任务之前，代理会检查是否有足够的内存可用。如果可用内存不足，则任务将被拒绝，并保留在 ECS 服务队列中，直到资源可用为止。

**注意**  
与 ECS on EC2 不同，ECS 托管实例不使用 `ECS_RESERVED_MEMORY` 配置变量。系统进程的内存预留通过底层平台的资源管理处理，代理根据任务定义执行准确的资源核算。

 对于 ECS on EC2，Amazon ECS 容器代理提供配置变量 `ECS_RESERVED_MEMORY`，您可以使用该变量从分配给您任务的池中移除指定 MiB 数的内存。这可以有效地为关键系统进程预留该内存。

如果您的任务占用容器实例上的所有内存，则您的任务可能会与关键系统进程争夺内存，并可能引起系统故障。

例如，如果您在容器代理配置文件中指定 `ECS_RESERVED_MEMORY=256`，则代理会为该实例注册总内存减去 256 MiB 后得到的内存量，这 256 MiB 内存无法由 ECS 任务分配。有关代理配置变量以及如何设置这些变量的更多信息，请参阅[Amazon ECS 容器代理配置](ecs-agent-config.md)和[引导启动 Amazon ECS Linux 容器实例以传递数据](bootstrap_container_instance.md)。

如果为任务指定 8192 MiB，并且没有任何容器实例具有 8192 MiB 或以上的可用内存来满足此要求，则任务无法放置在您的集群中。如果使用托管计算环境，则 AWS Batch 必须启动更大的实例类型来满足该要求。

Amazon ECS 容器代理使用 Docker `ReadMemInfo()` 函数来查询可用于操作系统的总内存。Linux 和 Windows 都提供了用来确定总内存的命令行实用程序。

**Example ：确定 Linux 总内存**  
**free** 命令可返回操作系统识别的总内存。  

```
$ free -b
```
运行经 Amazon ECS 优化的 Amazon Linux AMI 的 `m4.large` 实例的示例输出。  

```
             total       used       free     shared    buffers     cached
Mem:    8373026816  348180480 8024846336      90112   25534464  205418496
-/+ buffers/cache:  117227520 8255799296
```
此实例具有 8373026816 字节的总内存，这表示有 7985MiB 内存可用于任务。

**Example ：确定 Windows 总内存**  
**wmic** 命令可返回操作系统识别的总内存。  

```
C:\> wmic ComputerSystem get TotalPhysicalMemory
```
运行经 Amazon ECS 优化的 Windows Server AMI 的 `m4.large` 实例的示例输出。  

```
TotalPhysicalMemory
8589524992
```
此实例具有 8589524992 字节的总内存，这表示有 8191MiB 内存可用于任务。

## 查看容器实例内存
<a name="viewing-memory"></a>

您可以在 Amazon ECS 控制台中（或使用 [DescribeContainerInstances](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html) API 操作）查看容器实例注册的内存量。如果您试图通过为特定实例类型的任务提供尽可能多的内存来最大限度地提高资源利用率，则可以观察容器实例的可用内存，然后为您的任务分配足够的内存。

**查看容器实例内存**

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**，然后选择托管您的容器实例的集群。

1. 选择**基础设施**，然后在容器实例下选择容器实例。

1. **资源**部分显示了容器实例的已注册内存和可用内存。

   **注册的**内存值是容器实例首次启动时向 Amazon ECS 注册的值，**可用**内存值是尚未分配给任务的值。

# 使用 AWS Systems Manager 远程管理 Amazon ECS 容器实例
<a name="ec2-run-command"></a>

您可以使用 AWS Systems Manager (Systems Manager) 中的 Run Command 功能安全地远程管理 Amazon ECS 容器实例的配置。Run Command 提供了一种无需在本地登录实例即可执行常见管理任务的简单方法。您可以通过同时对多个容器实例执行命令来管理集群中的配置更改。Run Command 将报告每个命令的状态和结果。

下面是您可使用 Run Command 执行的任务类型的一些示例：
+ 安装或卸载程序包。
+ 执行安全更新。
+ 清除 Docker 映像。
+ 停止或启动服务。
+ 查看系统资源。
+ 查看日志文件。
+ 执行文件操作。

有关 Run Command 的更多信息，请参阅 *AWS Systems Manager 用户指南*中的 [AWS Systems ManagerRun Command](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)。

以下是将 Systems Manager 与 Amazon ECS 结合使用的先决条件。

1. 您必须向容器实例角色（**ecsInstanceRole**）授予访问 Systems Manager API 的权限。为此，您可以将 **AmazonSSMManagedInstanceCore** 分配给 `ecsInstanceRole` 角色。有关如何将策略附加到角色的信息，请参阅《AWS Identity and Access Management 用户指南》**中的[更新角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)

1. 验证您的容器实例上是否安装了 SSM Agent。有关更多信息，请参阅[在适用于 Linux 的 EC2 实例上手动安装和卸载 SSM Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)。

将 Systems Manager 托管策略附加到您的 `ecsInstanceRole` 并验证容器实例上是否安装了 AWS Systems Manager Agent（SSM Agent）后，可以开始使用 Run Command 向容器实例发送命令。有关在实例上运行命令和 shell 脚本以及查看结果输出的信息，请参见 *AWS Systems Manager用户手册*中的[使用 Systems Manager Run Command 运行命令](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)和 [Run Command 演练](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command-walkthroughs.html) 。

常见的使用案例是使用 Run Command 更新容器实例软件。您可以使用以下参数按照《AWS Systems Manager 用户指南》中的步骤进行操作。


| 参数 | 值 | 
| --- | --- | 
|  **命令文档**  | AWS-RunShellScript | 
| 命令 |  <pre>$ yum update -y</pre> | 
| 目标实例 | 您的容器实例 | 

# 为 Amazon ECS Linux 容器实例使用 HTTP 代理
<a name="http_proxy_config"></a>

您可以将 Amazon ECS 容器实例配置为对 Amazon ECS 容器代理和 Docker 进程守护程序使用 HTTP 代理。如果您的容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络，则这非常有用。

要将 Amazon ECS Linux 容器实例配置为使用 HTTP 代理，请在启动时在相关文件中设置以下变量（利用 Amazon EC2 用户数据）。您也可以手动编辑配置文件，然后重新启动代理。

`/etc/ecs/ecs.config`（Amazon Linux 2 和 AmazonLinux AMI）    
`HTTP_PROXY=10.0.0.131:3128`  
将此值设置为某个 HTTP 代理的主机名（或 IP 地址）和端口号，供 Amazon ECS 代理用来连接到互联网。例如，在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。  
`NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock`  
将此值设置为 `169.254.169.254,169.254.170.2,/var/run/docker.sock` 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 进程守护程序流量。

`/etc/systemd/system/ecs.service.d/http-proxy.conf`（仅 Amazon Linux 2）    
`Environment="HTTP_PROXY=10.0.0.131:3128/"`  
将此值设置为某个 HTTP 代理的主机名（或 IP 地址）和端口号，供 `ecs-init` 代理用来连接到互联网。例如，在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。  
`Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock"`  
将此值设置为 `169.254.169.254,169.254.170.2,/var/run/docker.sock` 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 进程守护程序流量。

`/etc/init/ecs.override`（仅限 Amazon Linux AMI）    
`env HTTP_PROXY=10.0.0.131:3128`  
将此值设置为某个 HTTP 代理的主机名（或 IP 地址）和端口号，供 `ecs-init` 代理用来连接到互联网。例如，在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。  
`env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock`  
将此值设置为 `169.254.169.254,169.254.170.2,/var/run/docker.sock` 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 进程守护程序流量。

`/etc/systemd/system/docker.service.d/http-proxy.conf`（仅 Amazon Linux 2）    
`Environment="HTTP_PROXY=http://10.0.0.131:3128"`  
将此值设置为某个 HTTP 代理的主机名（或 IP 地址）和端口号，供 Docker 进程守护程序用来连接到互联网。例如，在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。  
`Environment="NO_PROXY=169.254.169.254,169.254.170.2"`  
将此值设置为 `169.254.169.254,169.254.170.2` 可筛选来自代理的 EC2 实例元数据。

`/etc/sysconfig/docker`（仅限 Amazon Linux AMI 和 Amazon Linux 2）    
`export HTTP_PROXY=http://10.0.0.131:3128`  
将此值设置为某个 HTTP 代理的主机名（或 IP 地址）和端口号，供 Docker 进程守护程序用来连接到互联网。例如，在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。  
`export NO_PROXY=169.254.169.254,169.254.170.2`  
将此值设置为 `169.254.169.254,169.254.170.2` 可筛选来自代理的 EC2 实例元数据。

在以上文件中设置这些环境变量仅影响 Amazon ECS 容器代理、`ecs-init` 和 Docker 进程守护程序。它们不配置任何其他服务（如 **yum**）使用代理。

有关如何配置代理的信息，请参阅[如何在 Amazon Linux 2 或 AL2023 中为 Docker 和 Amazon ECS 容器代理设置 HTTP 代理？](https://repost.aws/knowledge-center/ecs-http-proxy-docker-linux2)。

# 为您的 Amazon ECS Auto Scaling 组配置预初始化的实例
<a name="using-warm-pool"></a>

Amazon ECS 支持 Amazon EC2 Auto Scaling 暖池。暖池是一组准备投入使用的预初始化 Amazon EC2 实例。每当您的应用程序需要横向扩展时，Amazon EC2 Auto Scaling 都会使用暖池中的预初始化实例，而不是启动冷实例，允许运行任何最终初始化过程，然后将实例投入使用。

要了解有关暖池以及如何将暖池添加到 自动扩缩组的更多信息，请参阅 *Amazon EC2 Auto Scaling 用户指南*中的 [Amazon EC2 Auto Scaling 的暖池](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html)。

当您为 Amazon ECS 的自动扩缩组创建或更新温池时，无法设置在横向缩减时将实例退回暖池的选项（`ReuseOnScaleIn`）。有关更多信息，请参阅*《AWS Command Line Interface 参考》*中的 [put-warm-pool](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-warm-pool.html)。

要将暖池与您的 Amazon ECS 集群一起使用，请在 Amazon EC2 Auto Scaling 组启动模板的 **User data**（用户数据）字段中将 `ECS_WARM_POOLS_CHECK` 代理配置变量设置为 `true`。

以下示例介绍如何在 Amazon EC2 启动模板的 **User data**（用户数据）字段中指定代理配置变量。将 *MyCluster* 替换为您的集群的名称。

```
#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=MyCluster
ECS_WARM_POOLS_CHECK=true
EOF
```

`ECS_WARM_POOLS_CHECK` 变量仅在代理版本 `1.59.0` 和更高版本上受支持。有关变量的更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

# 更新 Amazon ECS 容器代理
<a name="ecs-agent-update"></a>

有时，您可能需要更新 Amazon ECS 容器代理以获取错误修正和新功能。更新 Amazon ECS 容器代理不会中断容器实例上正在运行的任务或服务。更新代理的过程各不相同，具体取决于您的容器实例是否通过经 Amazon ECS 优化过的 AMI 或其他操作系统启动。

**注意**  
代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。

## 检查 Amazon ECS 容器代理版本
<a name="checking_agent_version"></a>

您可以查看在容器实例上运行的容器代理的版本以确定是否需要更新它。Amazon ECS 控制台中的容器实例视图提供了代理版本。使用以下过程可以检查代理版本。

------
#### [ Amazon ECS console ]

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 从导航栏中，选择您的外部实例将注册的区域。

1. 在导航窗格中，选择 **集群** 并选择托管外部实例的集群。

1. 在 **Cluster : *name***（集群：名称）页面上，选择 **Infrastructure**（基础设施）选项卡。

1. 在**容器实例**下，注意容器实例的**代理版本**列。如果容器实例未包含最新版本的容器代理，则控制台将通过消息来提醒您并标记已过期的代理版本。

   如果您的代理版本已过期，则可以使用以下过程更新容器代理：
   + 如果您的容器实例正在运行经 Amazon ECS 优化的 AMI，请参阅 [更新经 Amazon ECS 优化的 AMI 上的 Amazon ECS 容器代理](agent-update-ecs-ami.md)。
   + 如果您的容器实例未运行经 Amazon ECS 优化的 AMI，请参阅 [手动更新 Amazon ECS 容器代理（适用于非经 Amazon ECS 优化的 AMI）](manually_update_agent.md)。
**重要**  
要在经 Amazon ECS 优化的 AMI 上从 v1.0.0 之前的版本更新 Amazon ECS代理版本，建议您终止当前容器实例并启动具有最新 AMI 的新实例。使用预览版的任何容器实例都应停用并更换为最新的 AMI。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

------
#### [ Amazon ECS container agent introspection API  ]

您还可以使用 Amazon ECS 容器代理自检 API 从容器实例本身检查代理版本。有关更多信息，请参阅 [Amazon ECS 容器自检](ecs-agent-introspection.md)。

**利用自检 API 检查 Amazon ECS 容器代理运行的是否为最新版本**

1. 通过 SSH 登录到容器实例。

1. 查询自检 API。

   ```
   [ec2-user ~]$ curl -s 127.0.0.1:51678/v1/metadata | python3 -mjson.tool
   ```
**注意**  
自检 API 在 v1.0.0 版本的 Amazon ECS 容器代理中添加了 `Version` 信息。如果在查询自检 API 时 `Version` 不存在，或者自检 API 在您的代理中根本不存在，则表明运行的版本是 v0.0.3 或更早的版本。您应该更新版本。

------

# 更新经 Amazon ECS 优化的 AMI 上的 Amazon ECS 容器代理
<a name="agent-update-ecs-ami"></a>

如果您使用经 Amazon ECS 优化的 AMI，则可通过多种方式获取最新版本的 Amazon ECS 容器代理（按建议的顺序显示）：
+ 终止容器实例并启动最新版本的经 Amazon ECS 优化的 Amazon Linux 2 AMI（手动执行或者通过使用最新的 AMI 更新自动扩缩启动配置来执行）。这将提供全新的容器实例，其中包含最新的经测试和验证的版本的 Amazon Linux、Docker、`ecs-init` 和 Amazon ECS 容器代理。有关更多信息，请参阅 [经 Amazon ECS 优化的 Linux AMI](ecs-optimized_AMI.md)。
+ 使用 SSH 连接到实例，并将 `ecs-init` 程序包（及其依赖项）更新到最新版本。此操作提供了最新的经测试和验证的版本的 Docker 和 `ecs-init`（它们在 Amazon Linux 存储库中提供）以及最新版本的 Amazon ECS 容器代理。有关更多信息，请参阅 [更新经 Amazon ECS 优化过的 AMI 上的 `ecs-init` 程序包](#procedure_update_ecs-init)。
+ 使用 `UpdateContainerAgent` API 操作更新容器代理（通过控制台执行，或者通过 AWS CLI 或 AWS 开发工具包执行）。有关更多信息，请参阅 [使用 `UpdateContainerAgent` API 操作更新 Amazon ECS 容器代理](#agent-update-api)。

**注意**  
代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。<a name="procedure_update_ecs-init"></a>

**更新经 Amazon ECS 优化过的 AMI 上的 `ecs-init` 程序包**

1. 通过 SSH 登录到容器实例。

1. 使用以下命令更新 `ecs-init` 包。

   ```
   sudo yum update -y ecs-init
   ```
**注意**  
将立即更新 `ecs-init` 程序包和 Amazon ECS 容器代理。但是，更新版本的 Docker 直至 Docker 进程守护程序重新启动后才会加载。通过重启实例或通过在您的实例上运行以下命令来重新启动：  
经 Amazon ECS 优化的 Amazon ECS Amazon Linux 2 AMI：  

     ```
     sudo systemctl restart docker
     ```
经 Amazon ECS 优化的 Amazon ECS Amazon Linux AMI：  

     ```
     sudo service docker restart && sudo start ecs
     ```

## 使用 `UpdateContainerAgent` API 操作更新 Amazon ECS 容器代理
<a name="agent-update-api"></a>

**重要**  
`UpdateContainerAgent` API 仅在经 Amazon ECS 优化的 AMI 的Linux变体上受支持，但 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 除外。对于使用经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 的容器实例，请更新 `ecs-init` 程序包更新代理。有关运行其他操作系统的容器实例，请参阅[手动更新 Amazon ECS 容器代理（适用于非经 Amazon ECS 优化的 AMI）](manually_update_agent.md)。如果您使用的是 Windows 容器实例，建议您启动新的容器实例以更新 Windows 集群中的代理版本。

`UpdateContainerAgent` API 过程在您请求代理更新时开始（通过控制台执行，或者通过 AWS CLI 或 AWS 开发工具包。Amazon ECS 将对照最新的代理版本检查您当前的代理版本，并检查是否可以更新。如果更新不可用（例如代理已在运行最新版本），则会返回 `NoUpdateAvailableException`。

上面显示的更新过程的各个阶段如下所示：

`PENDING`  
代理更新可用，并且更新过程已开始。

`STAGING`  
代理已开始下载代理更新。如果代理无法下载更新，或者更新的内容不正确或已损坏，代理将发送失败通知，并且更新将变为 `FAILED` 状态。

`STAGED`  
代理下载已完成，且代理内容已经过验证。

`UPDATING`  
`ecs-init` 服务已重新启动，并且选取了新代理版本。如果代理出于某个原因无法重新启动，更新将变为 `FAILED` 状态；否则，代理将向 Amazon ECS 发送更新已完成的信号。

**注意**  
代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。

**在控制台中更新经 Amazon ECS 优化的 AMI 上的 Amazon ECS 容器代理**

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 从导航栏中，选择您的外部实例将注册的区域。

1. 在导航窗格中，选择 **Clusters** 并选择集群。

1. 在 **Cluster : *name***（集群：名称）页面上，选择 **Infrastructure**（基础设施）选项卡。

1. 在**容器实例**下，选择要更新的实例，然后选择**操作**、**更新代理**。

# 手动更新 Amazon ECS 容器代理（适用于非经 Amazon ECS 优化的 AMI）
<a name="manually_update_agent"></a>

有时，您可能需要更新 Amazon ECS 容器代理以获取错误修正和新功能。更新 Amazon ECS 容器代理不会中断容器实例上正在运行的任务或服务。
**注意**  
代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。

1. 通过 SSH 登录到容器实例。

1. 检查您的代理是否使用 `ECS_DATADIR` 环境变量保存其状态。

   ```
   ubuntu:~$ docker inspect ecs-agent | grep ECS_DATADIR
   ```

   输出：

   ```
   "ECS_DATADIR=/data",
   ```
**重要**  
如果上一个命令未返回 `ECS_DATADIR` 环境变量，则您在更新代理前必须停止在此容器实例上运行的任何任务。具有 `ECS_DATADIR` 环境变量的较新的代理将保存其状态，您可以在任务运行的同时更新它们，而不会出现问题。

1. 停止 Amazon ECS 容器代理。

   ```
   ubuntu:~$ docker stop ecs-agent
   ```

1. 删除代理容器。

   ```
   ubuntu:~$ docker rm ecs-agent
   ```

1. 确保 `/etc/ecs/ecs.config`中存在 `/etc/ecs` 目录和 Amazon ECS 容器代理配置文件。

   ```
   ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
   ```

1. 编辑 `/etc/ecs/ecs.config` 文件，并确保它至少包含以下变量声明。如果不希望向默认集群注册容器实例，请将 `ECS_CLUSTER` 的值指定为集群名称。

   ```
   ECS_DATADIR=/data
   ECS_ENABLE_TASK_IAM_ROLE=true
   ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
   ECS_LOGFILE=/log/ecs-agent.log
   ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"]
   ECS_LOGLEVEL=info
   ECS_CLUSTER=default
   ```

   有关这些和其他代理运行时选项的更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。
**注意**  
您可以选择将代理环境变量存储在 Amazon S3 中（可在启动时使用 Amazon EC2 用户数据将其下载到容器实例）。建议对敏感信息（如私有存储库的身份验证凭证）采用此方法。有关更多信息，请参阅 [将 Amazon ECS 容器实例配置存储在 Amazon S3 中](ecs-config-s3.md) 和 [在 Amazon ECS 中使用非 AWS 容器映像](private-auth.md)。

1. 从 Amazon Elastic Container Registry Public 拉取最新的 Amazon ECS 容器代理映像。

   ```
   ubuntu:~$ docker pull public.ecr.aws/ecs/amazon-ecs-agent:latest
   ```

   输出：

   ```
   Pulling repository amazon/amazon-ecs-agent
   a5a56a5e13dc: Download complete
   511136ea3c5a: Download complete
   9950b5d678a1: Download complete
   c48ddcf21b63: Download complete
   Status: Image is up to date for amazon/amazon-ecs-agent:latest
   ```

1. 在容器实例上运行最新的 Amazon ECS 容器代理。
**注意**  
使用 Docker 重新启动策略或进程管理器（如 **upstart** 或 **systemd**）将容器代理作为服务或进程守护程序处理，并确保在容器代理退出后重新启动它。经 Amazon ECS 优化的 AMI 使用 `ecs-init` RPM 达到此目的，并且您可以在 GitHub 上查看[此 RPM 的源代码](https://github.com/aws/amazon-ecs-init)。

   以下示例代理运行命令分为若干个单独的行以显示每个选项。有关这些和其他代理运行时选项的更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。
**重要**  
运行启用了 SELinux 的操作系统需要在 **docker run** 命令中使用 `--privileged` 选项。此外，对于启用了 SELinux 的容器实例，建议向 `/log` 和 `/data` 卷挂载添加 `:Z` 选项。但是，在运行该命令前，这些卷的主机挂载必须存在，否则会出现 `no such file or directory` 错误。如果您在启用了 SELinux 的容器实例上运行 Amazon ECS 代理时遇到困难，请执行以下操作：  
在容器实例上创建主机卷挂载点。  

     ```
     ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
     ```
将 `--privileged` 选项添加到下面的 **docker run** 命令中。
将 `:Z` 选项追加到针对下面的 **docker run** 命令的 `/log` 和 `/data` 容器卷挂载（例如 `--volume=/var/log/ecs/:/log:Z`）。

   ```
   ubuntu:~$ sudo docker run --name ecs-agent \
   --detach=true \
   --restart=on-failure:10 \
   --volume=/var/run:/var/run \
   --volume=/var/log/ecs/:/log \
   --volume=/var/lib/ecs/data:/data \
   --volume=/etc/ecs:/etc/ecs \
   --volume=/etc/ecs:/etc/ecs/pki \
   --net=host \
   --env-file=/etc/ecs/ecs.config \
   amazon/amazon-ecs-agent:latest
   ```
**注意**  
如果您收到一条 `Error response from daemon: Cannot start container` 消息，则可以利用 **sudo docker rm ecs-agent** 命令删除失败的容器并重新尝试运行代理。

# 经 Amazon ECS 优化的 Windows AMI
<a name="ecs-optimized_windows_AMI"></a>

经 Amazon ECS 优化的 AMI 预配置了运行 Amazon ECS 工作负载所需的必要组件。尽管您可以自行创建在 Amazon ECS 上运行您的容器化工作负载所需的符合基本规范的容器实例 AMI，但 AWS 工程师仍会在 Amazon ECS 上预配置并测试经 Amazon ECS 优化的 AMI。这是可供您开始操作并快速获取 AWS 上运行的容器的最简单方式。

经 Amazon ECS 优化的 AMI 元数据，包括 AMI 名称、Amazon ECS 容器代理版本和 Amazon ECS 运行时版本（其中包括 Docker 版本，对于每个变体可以编程方式检索）。有关更多信息，请参阅 [检索经 Amazon ECS 优化的 Windows AMI 元数据](retrieve-ecs-optimized_windows_AMI.md)。

**重要**  
 2022 年 8 月之后生产的所有经 ECS 优化的 AMI 变体都将从 Docker EE（Mirantis）迁移到 Docker CE（Moby 项目）。  
为了确保客户预设情况下安装了最新的安全更新，Amazon ECS 保留至少三个 Windows 经 Amazon ECS 优化的 AMI。在发布新的 Windows 经 Amazon ECS 优化的 AMI 后，Amazon ECS 将使 Windows 经 Amazon ECS 优化的 AMI 成为旧版专用。如果存在需要访问的私有 AMI，请通过向 Cloud Support 提交服务单来告知我们。

## 经 Amazon ECS 优化的 AMI 变体
<a name="ecs-optimized-ami-variants"></a>

以下 Windows 服务器版本的经 Amazon ECS优化 AMI 适用于您的 Amazon EC2 实例。

**重要**  
8 月之后生产的所有经 ECS 优化的 AMI 变体都将从 Docker EE（Mirantis）迁移到 Docker CE（Moby 项目）。
+ **Amazon ECS 优化版 Windows Server 2025 Full AMI** 
+ **Amazon ECS 优化版 Windows Server 2025 Core AMI** 
+ **经 Amazon ECS 优化的 Windows Server 2022 Full AMI** 
+ **经 Amazon ECS 优化的 Windows Server 2022 Core AMI** 
+ **经 Amazon ECS 优化的 Windows Server 2019 Full AMI ** 
+ **经 Amazon ECS 优化的 Windows Server 2019 Core AMI ** 
+ **经 Amazon ECS 优化的 Windows Server 2016 Full AMI**

**重要**  
Windows Server 2016 不支持最新的 Docker 版本，例如 25.x.x。因此，Windows Server 2016 Full AMI 将不会收到 Docker 运行时的安全补丁或错误补丁。建议您迁移到以下 Windows 平台之一：  
Windows Server 2022 Full
Windows Server 2022 Core
Windows Server 2019 Full
Windows Server 2019 Core

2022 年 8 月 9 日，经 Amazon ECS 优化的 Windows Server 20H2 Core AMI 达到终止支持日期。不会发布此 AMI 的任何新版本。有关更多信息，请参阅 [Windows Server 发行版信息](https://learn.microsoft.com/en-us/windows-server/get-started/windows-server-release-info)。

Windows Server 2025、Windows Server 2022、Windows Server 2019 和 Windows Server 2016 是长期服务渠道（LTSC）版本。Windows Server 20H2 是一个半年服务渠道（SAC）版本。有关更多信息，请参阅 [Windows Server 发行版信息](https://learn.microsoft.com/en-us/windows-server/get-started/windows-server-release-info)。

### 注意事项
<a name="windows_caveats"></a>

下面是您应了解的有关 Amazon EC2 Windows 容器和 Amazon ECS 的一些事项。
+ Windows 容器无法在 Linux 容器实例上运行，情况也相反。为了更好地放置 Windows 和 Linux 任务，请将 Windows 和 Linux 容器实例保持在单独的集群中，并且仅将 Windows 任务放置在 Windows 集群上。您可以设置以下放置约束，确保 Windows 任务定义仅放置在 Windows 实例上：`memberOf(ecs.os-type=='windows')`。
+ 使用 EC2 和 Fargate 的任务支持 Windows 容器。
+ Windows 容器和容器实例并不完全支持适用于 Linux 容器和容器实例的所有任务定义和参数。对于某些参数，它们完全不受支持，而其他参数在 Windows 和 Linux 上的行为不相同。有关更多信息，请参阅 [运行 Windows 的 EC2 实例的 Amazon ECS 任务定义差异](windows_task_definitions.md)。
+ 对于任务的 IAM 角色功能，您需要将 Windows 容器实例配置为在启动时允许该功能。容器在使用此功能时必须运行一些提供的 PowerShell 代码。有关更多信息，请参阅 [Amazon EC2 Windows 实例附加配置](task-iam-roles.md#windows_task_IAM_roles)。
+ 任务的 IAM 角色功能使用凭证代理来向容器提供凭证。此凭证代理占用了容器实例上的端口 80，因此，如果您使用 IAM 角色处理任务，则端口 80 不可用于任务。对于 Web 服务容器，您可以使用应用程序负载均衡器和动态端口映射来向容器提供标准 HTTP 端口 80 连接。有关更多信息，请参阅 [使用负载均衡分配 Amazon ECS 服务流量](service-load-balancing.md)。
+ Windows Server Docker 映像很大（9GiB）。因此，您的 Windows 容器实例需要比 Linux 容器实例更多的存储空间。
+ 要在 Windows Server 上运行 Windows 容器，容器的基本映像操作系统版本必须与主机的操作系统版本匹配。有关更多信息，请参阅 Microsoft 文档网站上的 [Windows 容器版本兼容性](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-11)。如果您的集群运行多个 Windows 版本，则可以使用置放约束来确保将任务放在运行相同版本的 EC2 实例上：`memberOf(attribute:ecs.os-family == WINDOWS_SERVER_<OS_Release>_<FULL or CORE>)`。有关更多信息，请参阅 [检索经 Amazon ECS 优化的 Windows AMI 元数据](retrieve-ecs-optimized_windows_AMI.md)。

# 检索经 Amazon ECS 优化的 Windows AMI 元数据
<a name="retrieve-ecs-optimized_windows_AMI"></a>

经 Amazon ECS 优化的 AMI 的 AMI ID、映像名称、操作系统、容器代理版本和运行时版本可通过查询 Systems Manager Parameter Store API 以编程方式检索。有关 Systems Manager Parameter Store API 的更多信息，请参阅 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) 和 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html)。

**注意**  
您的管理用户必须具有以下 IAM 权限才能检索经 Amazon ECS 优化的 AMI 元数据。这些权限已添加到 `AmazonECS_FullAccess` IAM 策略。  
ssm:GetParameters
ssm:GetParameter
ssm:GetParametersByPath

## Systems Manager Parameter Store 参数格式
<a name="ecs-optimized-ami-parameter-format"></a>

**注意**  
以下 Systems Manager Parameter Store API 参数已被弃用，不应使用这些参数来检索最新的 Windows AMI：  
`/aws/service/ecs/optimized-ami/windows_server/2016/english/full/recommended/image_id `
`/aws/service/ecs/optimized-ami/windows_server/2019/english/full/recommended/image_id`

以下是经 Amazon ECS 优化的 AMI 变体参数名称的格式。
+ Windows Server 2025 Full AMI 元数据：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2025-English-Full-ECS_Optimized
  ```
+ Windows Server 2025 Core AMI 元数据：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2025-English-Core-ECS_Optimized
  ```
+ Windows Server 2022 Full AMI 元数据：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2022-English-Full-ECS_Optimized
  ```
+ Windows Server 2022 Core AMI 元数据：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2022-English-Core-ECS_Optimized
  ```
+ Windows Server 2019 Full AMI 元数据：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized
  ```
+ Windows Server 2019 Core AMI 元数据：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-ECS_Optimized
  ```
+ Windows Server 2016 Full AMI 元数据：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-ECS_Optimized
  ```

以下参数名称格式检索最新稳定的 Windows Server 2019 Full AMI 都元数据

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized
```

以下是针对参数值返回的 JSON 对象的示例。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized",
            "Type": "String",
            "Value": "{\"image_name\":\"Windows_Server-2019-English-Full-ECS_Optimized-2023.06.13\",\"image_id\":\"ami-0debc1fb48e4aee16\",\"ecs_runtime_version\":\"Docker (CE) version 20.10.21\",\"ecs_agent_version\":\"1.72.0\"}",
            "Version": 58,
            "LastModifiedDate": "2023-06-22T19:37:37.841000-04:00",
            "ARN": "arn:aws:ssm:us-east-1::parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}
```

上述输出中的每个字段都可作为子参数查询。通过将子参数名称追加到所选 AMI 的路径来构造子参数的参数路径。可用子参数如下：
+ `schema_version`
+ `image_id`
+ `image_name`
+ `os`
+ `ecs_agent_version`
+ `ecs_runtime_version`

## 示例
<a name="ecs-optimized-ami-windows-parameter-examples"></a>

以下示例说明了可用于检索经 Amazon ECS 优化的 AMI 变体的元数据的方法。

### 检索最新稳定的经 Amazon ECS 优化的 AMI 的元数据
<a name="ecs-optimized-ami-windows-parameter-examples-1"></a>

您可以使用 AWS CLI 和以下 AWS CLI 命令检索最新版稳定的经 Amazon ECS 优化的 AMI。
+ **对于 Amazon ECS 优化版 Windows Server 2025 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Full-ECS_Optimized --region us-east-1
  ```
+ **对于 Amazon ECS 优化版 Windows Server 2025 Core AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Core-ECS_Optimized --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Windows Server 2022 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Full-ECS_Optimized --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Windows Server 2022 Core AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Core-ECS_Optimized --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Windows Server 2019 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Windows Server 2019 Core AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-ECS_Optimized --region us-east-1
  ```
+ **对于经 Amazon ECS 优化的 Windows Server 2016 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-ECS_Optimized --region us-east-1
  ```

### 在 CloudFormation 模板中使用最新推荐的经 Amazon ECS 优化的 AMI
<a name="ecs-optimized-ami-windows-parameter-examples-5"></a>

您可以参考 Systems Manager 参数存储名称引用 CloudFormation 模板中最新推荐的经 Amazon ECS 优化的 AMI。

```
Parameters:
  LatestECSOptimizedAMI:
    Description: AMI ID
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized/image_id
```

# 经 Amazon ECS 优化的 Windows AMI 版本
<a name="ecs-windows-ami-versions"></a>

查看当前和以前版本的经 Amazon ECS 优化的 AMI 及其相应版本的 Amazon ECS 容器代理、Docker 和 `ecs-init` 程序包。

每个变体的经 Amazon ECS 优化的 AMI 元数据（包括 AMI ID）均可通过编程方式检索。有关更多信息，请参阅 [检索经 Amazon ECS 优化的 Windows AMI 元数据](retrieve-ecs-optimized_windows_AMI.md)。

以下选项卡显示了 Windows 经 Amazon ECS 优化的 AMI 版本列表。有关在 CloudFormation 模板中引用 Systems Manager Parameter Store参数的详细信息，请参阅 [在 CloudFormation 模板中使用最新推荐的经 Amazon ECS 优化的 AMI](retrieve-ecs-optimized_AMI.md#ecs-optimized-ami-parameter-examples-5)。

**重要**  
为了确保客户预设情况下安装了最新的安全更新，Amazon ECS 保留至少三个 Windows 经 Amazon ECS 优化的 AMI。在发布新的 Windows 经 Amazon ECS 优化的 AMI 后，Amazon ECS 将使 Windows 经 Amazon ECS 优化的 AMI 成为旧版专用。如果存在需要访问的私有 AMI，请通过向 Cloud Support 提交服务单来告知我们。  
Windows Server 2016 不支持最新的 Docker 版本，例如 25.x.x。因此，Windows Server 2016 Full AMI 将不会收到 Docker 运行时的安全补丁或错误补丁。建议您迁移到以下 Windows 平台之一：  
Windows Server 2022 Full
Windows Server 2022 Core
Windows Server 2019 Full
Windows Server 2019 Core

**注意**  
gMSA 插件日志记录已使用 2025 年 8 月的 AMI 版本从基于文件的日志记录 `(C:\ProgramData\Amazon\gmsa)` 迁移到 Windows Event logging 。公共日志收集器脚本将收集所有的 gMSA 日志。有关更多信息，请参阅 [使用 Amazon ECS 日志收集器收集容器日志](ecs-logs-collector.md)。

------
#### [ Windows Server 2025 Full AMI versions ]

下表列出了当前和早期版本的 Amazon ECS 优化版 Windows Server 2025 Full AMI 及其相应版本的 Amazon ECS 容器代理和 Docker。


|  Amazon ECS 优化版 Windows Server 2025 Full AMI  |  Amazon ECS 容器代理版本  |  Docker 版本  |  可见性  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2025.09.13**  |  `1.99.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2025.08.24**  |  `1.98.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
| Windows\$1Server-2025-English-Full-ECS\$1Optimized-2025.08.16 | 1.97.1 | 25.0.6 (Docker CE) | Public | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2025.07.16**  |  `1.96.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2025.06.13**  |  `1.94.0`  |  `25.0.6 (Docker CE)`  |  Public  | 

使用以下 AWS CLI 命令检索当前 Amazon ECS 优化版 Windows Server 2025 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Full-ECS_Optimized
```

------
#### [ Windows Server 2025 Core AMI versions ]

下表列出了当前和早期版本的 Amazon ECS 优化版 Windows Server 2025 Core AMI 及其相应版本的 Amazon ECS 容器代理和 Docker。


|  Amazon ECS 优化版 Windows Server 2025 Core AMI  |  Amazon ECS 容器代理版本  |  Docker 版本  |  可见性  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2025.09.13**  |  `1.99.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2025.08.24**  |  `1.98.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
| Windows\$1Server-2025-English-Core-ECS\$1Optimized-2025.08.16 | 1.97.1 | 25.0.6 (Docker CE) | Public | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2025.07.16**  |  `1.96.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2025.06.13**  |  `1.94.0`  |  `25.0.6 (Docker CE)`  |  Public  | 

使用以下 AWS CLI 命令检索当前 Amazon ECS 优化版 Windows Server 2025 Core AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Core-ECS_Optimized
```

------
#### [ Windows Server 2022 Full AMI versions ]

下表列出了当前和以前版本的经 Amazon ECS 优化的 Windows Server 2022 Full AMI 及其相应版本的 Amazon ECS 容器代理和 Docker。


|  经 Amazon ECS 优化的 Windows Server 2022 Full AMI  |  Amazon ECS 容器代理版本  |  Docker 版本  |  可见性  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2022-English-Full-ECS\$1Optimized-2025.09.13**  |  `1.99.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2022-English-Full-ECS\$1Optimized-2025.08.24**  |  `1.98.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
| Windows\$1Server-2022-English-Full-ECS\$1Optimized-2025.08.16 | 1.97.1 | 25.0.6 (Docker CE) | Public | 
|  **Windows\$1Server-2022-English-Full-ECS\$1Optimized-2025.07.16**  |  `1.95.0`  |  `25.0.6 (Docker CE)`  |  Public  | 

使用以下 AWS CLI 命令检索当前经 Amazon ECS 优化的 Windows Server 2022 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Full-ECS_Optimized
```

------
#### [ Windows Server 2022 Core AMI versions ]

下表列出了当前和以前版本的经 Amazon ECS 优化的 Windows Server 2022 Core AMI 及其相应版本的 Amazon ECS 容器代理和 Docker。


|  经 Amazon ECS 优化的 Windows Server 2022 Core AMI  |  Amazon ECS 容器代理版本  |  Docker 版本  |  可见性  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2022-English-Core-ECS\$1Optimized-2025.09.13**  |  `1.99.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2022-English-Core-ECS\$1Optimized-2025.08.24**  |  `1.98.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
| Windows\$1Server-2022-English-Core-ECS\$1Optimized-2025.08.16 | 1.97.1 | 25.0.6 (Docker CE) | Public | 
|  **Windows\$1Server-2022-English-Core-ECS\$1Optimized-2025.07.16**  |  `1.95.0`  |  `25.0.6 (Docker CE)`  |  Public  | 

使用以下 AWS CLI 命令检索当前经 Amazon ECS 优化的 Windows Server 2022 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Core-ECS_Optimized
```

------
#### [ Windows Server 2019 Full AMI versions ]

下表列出了当前和以前版本的经 Amazon ECS 优化的Windows Server 2019 Full AMI 及其相应版本的 Amazon ECS 容器代理和 Docker。


|  经 Amazon ECS 优化的 Windows Server 2019 Full AMI  |  Amazon ECS 容器代理版本  |  Docker 版本  |  可见性  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2019-English-Full-ECS\$1Optimized-2025.09.13**  |  `1.99.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2019-English-Full-ECS\$1Optimized-2025.08.24**  |  `1.98.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
| Windows\$1Server-2019-English-Full-ECS\$1Optimized-2025.08.16 | 1.97.1 | 25.0.6 (Docker CE) | Public | 
|  **Windows\$1Server-2019-English-Full-ECS\$1Optimized-2025.07.16**  |  `1.95.0`  |  `25.0.6 (Docker CE)`  |  Public  | 

使用以下 AWS CLI 命令检索当前经 Amazon ECS 优化的 Windows Server 2019 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized
```

------
#### [ Windows Server 2019 Core AMI versions ]

下表列出了当前和以前版本的经 Amazon ECS 优化的Windows Server 2019 Core AMI 及其相应版本的 Amazon ECS 容器代理和 Docker。


|  经 Amazon ECS 优化的 Windows Server 2019 Core AMI  |  Amazon ECS 容器代理版本  |  Docker 版本  |  可见性  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2019-English-Core-ECS\$1Optimized-2025.09.13**  |  `1.99.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2019-English-Core-ECS\$1Optimized-2025.08.24**  |  `1.98.0`  |  `25.0.6 (Docker CE)`  |  Public  | 
| Windows\$1Server-2019-English-Core-ECS\$1Optimized-2025.08.16 | 1.97.1 | 25.0.6 (Docker CE) | Public | 
|  **Windows\$1Server-2019-English-Core-ECS\$1Optimized-2025.07.16**  |  `1.95.0`  |  `25.0.6 (Docker CE)`  |  Public  | 

使用以下 AWS CLI 命令检索当前经 Amazon ECS 优化的 Windows Server 2019 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-ECS_Optimized
```

------
#### [ Windows Server 2016 Full AMI versions ]

**重要**  
Windows Server 2016 不支持最新的 Docker 版本，例如 25.x.x。因此，Windows Server 2016 Full AMI 将不会收到 Docker 运行时的安全补丁或错误补丁。建议您迁移到以下 Windows 平台之一：  
Windows Server 2022 Full
Windows Server 2022 Core
Windows Server 2019 Full
Windows Server 2019 Core

下表列出了当前和以前版本的经 Amazon ECS 优化的Windows Server 2016 Full AMI 及其相应版本的 Amazon ECS 容器代理和 Docker。


|  经 Amazon ECS 优化的 Windows Server 2016 Full AMI  |  Amazon ECS 容器代理版本  |  Docker 版本  |  可见性  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2025.09.13**  |  `1.99.0`  |  `20.10.23 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2025.08.16**  |  `1.97.1`  |  `20.10.23 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2025.07.16**  |  `1.95.0`  |  `20.10.23 (Docker CE)`  |  Public  | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2025.06.13**  |  `1.94.0`  |  `20.10.23 (Docker CE)`  |  Public  | 

使用以下 AWS CLI 经 Amazon ECS 优化的 Windows Server 2016 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-ECS_Optimized
```

------

# 构建您自己的经 Amazon ECS 优化的 Windows AMI
<a name="windows-custom-ami"></a>

使用 EC2 Image Builder 构建您自定义的经 Amazon ECS 优化的 Windows AMI。这样，您可以轻松地在 Amazon ECS 上使用具有您自己的许可证的 Windows AMI。Amazon ECS 有一个托管 Image Builder 组件，提供了运行 Windows 实例以托管容器所需的系统配置。每个 Amazon ECS 托管组件都包含一个特定的容器代理和 Docker 版本。您可以自定义映像以使用最新的 Amazon ECS 托管组件，或者如果需要较旧的容器代理或 Docker 版本，则可以指定其他组件。

有关使用 EC2 Image Builder 的完整演练，请参阅[EC2 Image Builder 入门](https://docs.aws.amazon.com/imagebuilder/latest/userguide/set-up-ib-env.html#image-builder-accessing-prereq)中的 *EC2 Image Builder 用户指南*。

使用 EC2 Image Builder 构建您自己的经 Amazon ECS 优化 Windows AMI 时，您可以创建映像配方。您的映像配方必须满足以下要求：
+ **源映像**应基于 Windows 服务器 2019 Core、Windows Server 2019 Full、Windows Server 2022 Core 或 Windows Server 2022 Full。不支持任何其他 Windows 操作系统，并且可能与该组件不兼容。
+ 在指定**生成组件**，`ecs-optimized-ami-windows` 组件是必需的。推荐 `update-windows` 组件，确保映像包含最新的安全更新。

  要指定其他组件版本，请展开**版本控制选项**菜单并指定要使用的组件版本。有关更多信息，请参阅 [列出 `ecs-optimized-ami-windows` 组件版本](#windows-component-list)。

## 列出 `ecs-optimized-ami-windows` 组件版本
<a name="windows-component-list"></a>

创建 EC2 Image Builder 配方并指定 `ecs-optimized-ami-windows` 组件，您可以使用默认选项，也可以指定特定组件版本。要确定可用的组件版本以及组件中包含的 Amazon ECS 容器代理和 Docker 版本，您可以使用 AWS 管理控制台。

**要列出可用的 `ecs-optimized-ami-windows` 组件版本**

1. 打开位于 [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/)的 EC2 Image Builder 控制台

1. 在导航栏上，选择构建映像所在的区域。

1. 在导航窗格中的**保存的配置**菜单下，选择**组件**。

1. 在**组件**页面上，在搜索栏中键入 `ecs-optimized-ami-windows`，下拉资质菜单，然后选择**快速启动（Amazon 托管）**。

1. 使用**说明**列确定您映像所需的 Amazon ECS 容器代理和 Docker 版本的组件版本。

# Amazon ECS Windows 容器实例管理
<a name="manage-windows"></a>

为 Amazon ECS 工作负载使用 EC2 实例时，您负责维护这些实例。

代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。

**Topics**
+ [启动容器实例](launch_window-container_instance.md)
+ [引导启动容器实例](bootstrap_windows_container_instance.md)
+ [为 Windows 容器实例使用 HTTP 代理](http_proxy_config-windows.md)
+ [配置容器实例以接收竞价型实例通知](windows-spot-instance-draining-container.md)

# 启动 Amazon ECS Windows 容器实例
<a name="launch_window-container_instance"></a>

Amazon ECS 容器实例是使用 Amazon EC2 控制台创建的。开始之前，请确保您已完成 [设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md) 中的步骤。

有关启动向导的更多信息，请参阅《Amazon EC2 用户指南》中的[使用新启动实例向导启动实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-launch-instance-wizard.html)**。

您可以使用新 Amazon EC2 向导启动实例。您可以使用以下列表中的参数，将未列出的参数作为默认值。以下说明将引导您完成每个参数组。

## 过程
<a name="liw-initiate-instance-launch"></a>

在开始之前，请完成 [设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md) 中的步骤。

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

1. 在屏幕顶部的导航栏中，会显示当前 AWS 区域，例如，美国东部美国东部（俄亥俄州）。选择要在其中启动实例的区域。选择该内容是非常重要的，因为可以在区域之间共享某些 Amazon EC2 资源，而无法共享其他资源。

1. 从 Amazon EC2 控制台控制面板中，选择**启动实例**。

## 名称和标签
<a name="liw-name-and-tags"></a>

实例名称是一个标签，其中密钥为**名称**，而值为您指定的名称。您可以为实例、卷和弹性图形添加标签。对于竞价型实例，您只能标记竞价型实例请求。

指定实例名称和其它标签为可选项。
+ 对于**名称**，为实例输入一个描述性名称。如果您没有指定名称，则可以通过其 ID 标识实例，该 ID 将在您启动实例时自动生成。
+ 要添加其它标签，请选择**添加其他标签**。选择**添加标签**，然后输入密钥和值，然后选择要标记的资源类型。为每个要添加的其它标签选择**添加标签**。

## 应用程序和操作系统映像（亚马逊机器映像）
<a name="liw-ami"></a>

亚马逊机器映像（AMI）中包含了创建实例所需的信息。例如，AMI 可能包含充当 Web 服务器所需的软件，例如 Apache 和您的网站。

有关最新的经 Amazon ECS 优化的 AMI 及其值，请参阅[经 Windows Amazon ECS 优化的 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_windows_AMI.html)。

使用**搜索**栏查找由 AWS 发布的合适的经 Amazon ECS 优化的 AMI。

1. 根据您的要求，在**搜索**栏中输入以下 AMI 之一，然后按 **Enter**。
   + Windows\$1Server-2022-English-Full-ECS\$1Optimized
   + Windows\$1Server-2022-English-Core-ECS\$1Optimized
   + Windows\$1Server-2019-English-Full-ECS\$1Optimized
   + Windows\$1Server-2019-English-Core-ECS\$1Optimized
   + Windows\$1Server-2016-English-Full-ECS\$1Optimized

1. 在**选择亚马逊机器映像（AMI）**页面上，选择**社区 AMI** 类别。

1. 从显示的列表中，选择经过 Microsoft 验证且具有最新发布日期的 AMI，然后单击**选择**。

## 实例类型
<a name="liw-instance-type"></a>

实例类型定义了实例的硬件配置和大小。更大的实例类型拥有更多的 CPU 和内存。有关更多信息，请参阅[实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。
+ 对于**实例类型**，请为实例选择实例类型。

   您选择的实例类型决定了可用于运行您的任务的资源。

## 密钥对（登录）
<a name="liw-key-pair"></a>

为**密钥对名称**选择一个现有密钥对，或选择**创建新的密钥对**来新建一个密钥对。

**重要**  
如果您选择**在没有密钥对的情况下继续（不推荐）**选项，则将无法连接到此实例，除非您选择配置为允许用户以其它方式登录的 AMI。

## 网络设置
<a name="liw-network-settings"></a>

根据需要配置网络设置。
+ **联网平台**：选择**虚拟私有云（VPC）**，则在**网络接口**部分中指定子网。
+ **VPC**：选择要在其中创建安全组的现有 VPC。
+ **子网**：您可以在与可用区、本地扩展区、Wavelength 区域或 Outpost 关联的子网中启动实例。

  要在可用区中启动实例，请选择要在其中启动实例的子网。要创建新子网，请选择**新建子网**转到 Amazon VPC 控制台。完成此操作后，返回到启动实例向导并选择“刷新”图标，以便将您的子网加载到列表中。

  要在本地区域中启动实例，请选择您在本地区域中创建的子网。

  要在 Outpost 中启动实例，请在 VPC 中选择与 Outpost 关联的子网。
+ **自动分配公有 IP**：如果实例应可从互联网进行访问，请验证**自动分配公有 IP** 字段设置为**启用**。如果不是，请将此字段设置为**禁用**。
**注意**  
容器实例需要访问才能与 Amazon ECS 服务端点通信。这可以通过接口 VPC 端点或具有公共 IP 地址的容器实例实现。  
有关接口 VPC 端点的更多信息，请参阅 [Amazon ECS 接口 VPC 端点（AWS PrivateLink）](vpc-endpoints.md)  
如果您没有配置接口 VPC 端点，并且您的容器实例没有公有 IP 地址，必须使用网络地址转换（NATI）来提供此访问。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)和本指南中的 [为 Amazon ECS Linux 容器实例使用 HTTP 代理](http_proxy_config.md)。
+ **防火墙（安全组）**：使用安全组为容器实例定义防火墙规则。这些规则指定哪些传入的网络流量可传输到您的容器实例。所有其他的流量将被忽略。
  + 要选择现有安全组，请选择**选择一个现有的安全组**，然后选择您在 [设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md) 中创建的安全组

## 配置存储
<a name="liw-storage"></a>

您选择的 AMI 包含一个或多个存储卷，包括根卷。您可以指定要附加到实例的其它卷。

您可以使用**简单**视图。
+ **存储类型**：为您的容器实例配置存储。

  如果使用的是经 Amazon ECS 优化的 Amazon Linux AMI，则实例已配置了两个卷。**根**卷适合操作系统使用，第二个 Amazon EBS 卷（已挂载到 `/dev/xvdcz`）适合 Docker 使用。

  您可以选择增大或减小实例的卷大小以满足您的应用程序需求。

## 高级详细信息
<a name="liw-advanced-details"></a>

对于**高级详细信息**，请展开该部分以查看字段并为实例指定任何其他参数。
+ **购买选项**：选择**请求竞价型实例**以请求竞价型实例。您还需要设置与竞价型实例相关的其他字段。有关更多信息，请参阅竞价型实例[请求](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html)。
**注意**  
如果使用竞价型实例时看到 `Not available` 消息，则需要选择其他实例类型。

  .
+ **IAM 实例配置文件**：选择您的容器实例 IAM 角色。其通常被命名为 `ecsInstanceRole`。
**重要**  
如果未使用适当的 IAM 权限启动容器实例，则 Amazon ECS 代理无法连接到集群。有关更多信息，请参阅 [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md)。
+ （可选）**用户数据**：使用用户数据（如 [Amazon ECS 容器代理配置](ecs-agent-config.md) 中的代理环境变量）配置 Amazon ECS 容器实例。Amazon EC2 用户数据脚本仅在实例首次启动时执行一次。以下是用户数据的常用示例：
  + 默认情况下，您的容器实例将启动到您的默认集群中。要在非默认集群中启动，请选择 **Advanced Details** 列表。然后，将以下脚本粘贴到 **User data** 字段中，将 *your\$1cluster\$1name* 替换为您的集群的名称。

    `EnableTaskIAMRole` 打开任务的任务 IAM 角色功能。

    此外，使用 `awsvpc` 网络模式时，以下选项可用。
    + `EnableTaskENI`：此标志打开任务联网，并且在使用 `awsvpc` 网络模式时是必需的。
    + `AwsvpcBlockIMDS`：此可选标志阻止在 `awsvpc` 网络模式下运行的任务容器的 IMDS 访问。
    + `AwsvpcAdditionalLocalRoutes`：此可选标志允许您在任务命名空间中有其他路由。

      将 `ip-address` 替换为附加路由的IP地址，例如172.31.42.23/32。

    ```
    <powershell>
    Import-Module ECSTools
    Initialize-ECSAgent -Cluster your_cluster_name -EnableTaskIAMRole -EnableTaskENI -AwsvpcBlockIMDS -AwsvpcAdditionalLocalRoutes
    '["ip-address"]'
    </powershell>
    ```

# 引导启动 Amazon ECS Windows 容器实例以传递数据
<a name="bootstrap_windows_container_instance"></a>

在启动 Amazon EC2 实例时，您可以将用户数据传递到 EC2 实例。数据可以用于执行常见的自动配置任务，甚至用于在实例启动时运行脚本。对于 Amazon ECS，最常见的用户数据使用案例是将配置信息传递到 Docker 进程守护程序和 Amazon ECS 容器实例。

您可以将多类用户数据传递到 Amazon EC2，其中包括云 boothook、Shell 脚本和 `cloud-init` 指令。有关这些和其他格式类型的更多信息，请参阅 [Cloud-Init 文档](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)。

您可以在使用 Amazon EC2 启动向导时传递此用户数据。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

## 原定设置 Windows 用户数据
<a name="windows-default-userdata"></a>

该示例用户数据脚本显示了在使用控制台时 Windows 容器实例接收的默认用户数据。下面的脚本将执行以下操作：
+ 将集群名称设置为您输入的名称。
+ 设置任务的 IAM 角色。
+ 将 `json-file` 以及 `awslogs` 设置为可用的日志记录驱动程序。

此外，使用 `awsvpc` 网络模式时，以下选项可用。
+ `EnableTaskENI`：此标志打开任务联网，并且在使用 `awsvpc` 网络模式时是必需的。
+ `AwsvpcBlockIMDS`：此可选标志阻止在 `awsvpc` 网络模式下运行的任务容器的 IMDS 访问。
+ `AwsvpcAdditionalLocalRoutes`：此可选标志允许您有其他路由。

  将 `ip-address` 替换为附加路由的IP地址，例如172.31.42.23/32。

您可以将该脚本用于自己的容器实例，但前提是它们是从经 Amazon ECS 优化的 Windows Server AMI 启动的。

替换 `-Cluster cluster-name` 行以指定您自己的集群名称。

```
<powershell>
Initialize-ECSAgent -Cluster cluster-name -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' -EnableTaskENI -AwsvpcBlockIMDS -AwsvpcAdditionalLocalRoutes
'["ip-address"]'
</powershell>
```

 对于配置为使用 `awslogs` 日志记录驱动程序的 Windows 任务，您还必须在容器实例上设置 `ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE` 环境变量。使用下面的语法。

替换 `-Cluster cluster-name` 行以指定您自己的集群名称。

```
<powershell>
[Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine")
Initialize-ECSAgent -Cluster cluster-name -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]'
</powershell>
```

## Windows 代理安装用户数据
<a name="agent-service-userdata"></a>

此示例用户数据脚本在使用 **Windows\$1Server-2016-English-Full-Containers** AMI 启动的实例上安装 Amazon ECS 容器代理。该脚本已根据 [Amazon ECS 容器代理的 GitHub 存储库](https://github.com/aws/amazon-ecs-agent) README 页面中的代理安装说明进行了调整。

**注意**  
此脚本作为示例分享。使用经 Amazon ECS 优化的 Windows AMI 的 Windows 容器更容易上手。有关更多信息，请参阅 [为 Fargate 工作负载创建 Amazon ECS 集群](create-cluster-console-v2.md)。

有关如何在 Windows Server 2022 完整版上安装 Amazon ECS 代理的信息，请参阅 GitHub 上的[问题 3753](https://github.com/aws/amazon-ecs-agent/issues/3753)。

您可以将该脚本用于自己的容器实例（前提是它们是使用 **Windows\$1Server-2016-English-Full-Containers** AMI 版本启动的）。请记得替换 `windows` 行来指定自己的集群名称（如果您使用的不是名为 `windows` 的集群）。

```
<powershell>
# Set up directories the agent uses
New-Item -Type directory -Path ${env:ProgramFiles}\Amazon\ECS -Force
New-Item -Type directory -Path ${env:ProgramData}\Amazon\ECS -Force
New-Item -Type directory -Path ${env:ProgramData}\Amazon\ECS\data -Force
# Set up configuration
$ecsExeDir = "${env:ProgramFiles}\Amazon\ECS"
[Environment]::SetEnvironmentVariable("ECS_CLUSTER", "windows", "Machine")
[Environment]::SetEnvironmentVariable("ECS_LOGFILE", "${env:ProgramData}\Amazon\ECS\log\ecs-agent.log", "Machine")
[Environment]::SetEnvironmentVariable("ECS_DATADIR", "${env:ProgramData}\Amazon\ECS\data", "Machine")
# Download the agent
$agentVersion = "latest"
$agentZipUri = "https://s3.amazonaws.com/amazon-ecs-agent/ecs-agent-windows-$agentVersion.zip"
$zipFile = "${env:TEMP}\ecs-agent.zip"
Invoke-RestMethod -OutFile $zipFile -Uri $agentZipUri
# Put the executables in the executable directory.
Expand-Archive -Path $zipFile -DestinationPath $ecsExeDir -Force
Set-Location ${ecsExeDir}
# Set $EnableTaskIAMRoles to $true to enable task IAM roles
# Note that enabling IAM roles will make port 80 unavailable for tasks.
[bool]$EnableTaskIAMRoles = $false
if (${EnableTaskIAMRoles}) {
  $HostSetupScript = Invoke-WebRequest https://raw.githubusercontent.com/aws/amazon-ecs-agent/master/misc/windows-deploy/hostsetup.ps1
  Invoke-Expression $($HostSetupScript.Content)
}
# Install the agent service
New-Service -Name "AmazonECS" `
        -BinaryPathName "$ecsExeDir\amazon-ecs-agent.exe -windows-service" `
        -DisplayName "Amazon ECS" `
        -Description "Amazon ECS service runs the Amazon ECS agent" `
        -DependsOn Docker `
        -StartupType Manual
sc.exe failure AmazonECS reset=300 actions=restart/5000/restart/30000/restart/60000
sc.exe failureflag AmazonECS 1
Start-Service AmazonECS
</powershell>
```

# 为 Amazon ECS Windows 容器实例使用 HTTP 代理
<a name="http_proxy_config-windows"></a>

您可以将 Amazon ECS 容器实例配置为对 Amazon ECS 容器代理和 Docker 进程守护程序使用 HTTP 代理。如果您的容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络，则这非常有用。

要将 Amazon ECS Windows 容器实例配置为使用 HTTP 代理，请在启动时设置以下变量（利用 Amazon EC2 用户数据）来达到此目的。

`[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.mydomain:port", "Machine")`  
将 `HTTP_PROXY` 设置为某个 HTTP 代理的主机名（或 IP 地址）和端口号，供 Amazon ECS 代理用来连接到互联网。例如，在容器实例无法通过 Amazon VPC互联网网关、NAT 网关或实例访问外部网络时。

`[Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")`  
将 `NO_PROXY` 设置为 `169.254.169.254,169.254.170.2,\\.\pipe\docker_engine` 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 进程守护程序流量。

**Example Windows HTTP 代理用户数据脚本**  
下面的示例用户数据 PowerShell 脚本会将 Amazon ECS 容器代理和 Docker 进程守护程序配置为使用您指定的 HTTP 代理。您还可以指定容器实例在其中自行进行注册的集群。  
要在启动容器实例时使用此脚本，请执行[启动 Amazon ECS Windows 容器实例](launch_window-container_instance.md)中的步骤。只需将下面的 PowerShell 脚本复制并粘贴到**用户数据**字段中（请务必将红色示例值替换为您自己的代理和集群信息）。  
启用任务的 IAM 角色需要使用 `-EnableTaskIAMRole` 选项。有关更多信息，请参阅 [Amazon EC2 Windows 实例附加配置](task-iam-roles.md#windows_task_IAM_roles)。

```
<powershell>
Import-Module ECSTools

$proxy = "http://proxy.mydomain:port"
[Environment]::SetEnvironmentVariable("HTTP_PROXY", $proxy, "Machine")
[Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")

Restart-Service Docker
Initialize-ECSAgent -Cluster MyCluster -EnableTaskIAMRole
</powershell>
```

# 配置 Amazon ECS Windows 容器实例以接收竞价型实例通知
<a name="windows-spot-instance-draining-container"></a>

当 Spot 价格超过您请求的最高价格或容量不再可用时，Amazon EC2 会终止、停止或休眠您的竞价型实例。Amazon EC2 将提供竞价型实例中断通知，这会在实例中断之前为其提供两分钟的警告。如果在实例上启用了 Amazon ECS 竞价型实例耗尽，则 ECS 会收到竞价型实例中断通知，并将实例置于 `DRAINING` 状态。

**重要**  
Amazon ECS 监控具有 `terminate` 和 `stop` 实例操作的竞价型实例中断通知。如果您在请求竞价型实例或竞价型实例集时指定了 `hibernate` 实例中断行为，则这些实例不支持 Amazon ECS 竞价型实例耗尽。

当某个容器实例设置为 `DRAINING` 时，Amazon ECS 将阻止安排放置在该容器实例上的新任务。连接即将耗尽的容器实例上处于 `PENDING` 状态的服务任务将立即停止。如果集群中有可用的容器实例，则在这些容器实例上启动替换服务任务。

您可以在启动实例时开启竞价型实例耗尽功能。在启动容器代理之前，您必须设置 `ECS_ENABLE_SPOT_INSTANCE_DRAINING` 参数。将 *my-cluster* 替换为您的集群的名称。

```
[Environment]::SetEnvironmentVariable("ECS_ENABLE_SPOT_INSTANCE_DRAINING", "true", "Machine")

# Initialize the agent
Initialize-ECSAgent -Cluster my-cluster
```

有关更多信息，请参阅 [启动 Amazon ECS Windows 容器实例](launch_window-container_instance.md)。