

# 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 地址，必须使用网络地址转换（NAT）来提供此访问。有关更多信息，请参阅《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 | 
| mac-m4max.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** 命令删除失败的容器并重新尝试运行代理。