Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

弹性网络接口中继

每个使用 awsvpc 网络模式的 Amazon ECS 任务都会接收到自己的弹性网络接口 (ENI),该网络接口附加到托管它的容器实例。可以附加到 Amazon EC2 实例的网络接口的数量有默认限制,并且主网络接口计为一个。例如,默认情况下,最多可将三个 ENI 附加到一个 c5.large 实例。实例的主网络接口计为一个,因此您可以向该实例再附加 2 个 ENI。由于每个使用 awsvpc 网络模式的任务均需一个 ENI,因此,您通常只能在该实例类型上运行 2 个此类任务。

Amazon ECS 支持使用受支持的 Amazon EC2 实例类型启动已增加 ENI 密度的容器实例。当您使用这些实例类型并选择使用 awsvpcTrunking 账户设置时,其他 ENI 将在新启动的容器实例上可用。此配置允许您使用 awsvpc 网络模式在每个容器实例上放置更多任务。通过使用此功能,启用了 awsvpcTrunkingc5.large 实例的 ENI 限制提高了 12。容器实例将具有主网络接口,而 Amazon ECS 将创建一个“中继”网络接口并将此接口附加到容器实例。因此,此配置允许您在容器实例上启动 10 个任务,而不是当前的两个任务。

中继网络接口完全由 Amazon ECS 管理,并且会在您从集群中终止或取消注册容器实例时被删除。有关更多信息,请参阅awsvpc 网络模式的任务联网

ENI 中继注意事项

在使用 ENI 中继功能时,需要考虑几个事项。

  • 仅经过 Amazon ECS 优化的 AMI 的 Linux 变体或其他 Amazon Linux 变体(具有 1.28.1 版本或更高版本的容器代理以及 1.28.1-2 版本或更高版本的 ecs-init 程序包)支持增加的 ENI 限制。如果您使用经过 Amazon ECS 优化的 AMI 的最新 Linux 变体,则将满足这些要求。目前不支持 Windows 容器。

  • 仅在选择使用 awsvpcTrunking 后启动的新 Amazon EC2 实例将收到增加的 ENI 限制和中继网络接口。无论采取何种措施,以前启动的实例都不会收到这些功能。

  • 您的 Amazon ECS 任务必须使用 awsvpc 网络模式和 EC2 启动类型。不管启动的实例数量如何,使用 Fargate 启动类型的任务都始终会收到专用的 ENI,因此不需要此功能。

  • 在启动新的容器实例时,实例将转换为 REGISTERING 状态,同时为实例预配置中继弹性网络接口。如果注册失败,则实例将转换为 REGISTRATION_FAILED 状态。您可以描述容器实例并查看 statusReason 参数以了解失败原因。

  • 一旦终止容器实例,该实例就会转换为 DEREGISTERING 状态,同时取消预配置中继弹性网络接口。随后,实例将转换为 INACTIVE 状态。

  • 如果停止并重新启动具有增加的 ENI 限制的公有子网中的容器实例,则实例将丢失其公有 IP 地址,并且容器代理将丢失其连接。

使用具有增加的 ENI 限制的容器实例

在启动具有增加的 ENI 限制的容器实例之前,必须完成以下先决条件。

  • 必须创建 Amazon ECS 的服务相关角色。Amazon ECS 服务相关角色向 Amazon ECS 提供代表您调用其他 AWS 服务的权限。此角色是在创建集群时 (或者在 AWS 管理控制台 中创建或更新服务时) 自动为您创建的。有关更多信息,请参阅 对 Amazon ECS 使用服务相关角色。您也可以使用以下 AWS CLI 命令创建服务相关角色。

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • 您的账户或容器实例 IAM 角色必须选择使用 awsvpcTrunking 账户设置。可通过以下方式执行此任务:

    • 任何用户都可以使用 PutAccountSettingDefault API 来选择账户上的所有 IAM 用户和角色

    • 根用户可以使用 PutAccountSetting API 来选择将在集群上注册实例的 IAM 用户或容器实例角色

    • 在某个实例注册到集群之前,当 PutAccountSetting API 运行在该实例上时,容器实例角色可以选择使用自身

    有关更多信息,请参阅 账户设置

在满足先决条件后,您可以使用受支持的 Amazon EC2 实例类型之一来启动新容器实例,并且实例将具有增加的 ENI 限制。有关受支持实例类型的列表,请参阅支持的 Amazon EC2 实例类型。容器实例必须具有 1.28.1 版本或更高版本的容器代理以及 1.28.1-2 版本或更高版本的 ecs-init 程序包。如果您使用经过 Amazon ECS 优化的 AMI 的最新 Linux 变体,则将满足这些要求。有关更多信息,请参阅 启动 Amazon ECS 容器实例

使用控制台为您账户上的所有 IAM 用户和角色选择增加的 ENI 限制。

  1. 以账户的根用户身份打开位于 https://console.amazonaws.cn/ecs/ 的 Amazon ECS 控制台。

  2. 在屏幕顶部的导航栏中,选择要增加 ENI 限制的区域。

  3. 从控制面板中选择账户设置

  4. 对于 IAM 用户或角色,确保选择了您的根用户或容器实例 IAM 角色。

  5. 对于 AWSVPC 中继,请选中复选框。完成后,选择保存

    重要

    IAM 用户和 IAM 角色需要 ecs:PutAccountSetting 权限来执行此操作。

  6. 在确认屏幕上,选择 Confirm (确认) 以保存选择。

使用命令为您账户上的所有 IAM 用户和角色选择增加的 ENI 限制。

账户上的任意用户可以使用下列命令之一修改账户中所有 IAM 用户或角色的默认账户设置。这些更改将应用于整个 AWS 账户,除非一个 IAM 用户或角色显式覆盖自己的这些设置。

  • put-account-setting-default (AWS CLI)

    aws ecs put-account-setting-default --name awsvpcTrunking --value enabled --region us-east-1
  • Write-ECSAccountSettingDefault (适用于 Windows PowerShell 的 AWS 工具)

    Write-ECSAccountSettingDefault -Name awsvpcTrunking -Value enabled -Region us-east-1 -Force

使用命令行,以根用户身份为 IAM 用户或容器实例 IAM 角色选择增加的 ENI 限制

账户的根用户可以使用以下命令之一,并在请求中指定委托人 IAM 用户或容器实例 IAM 角色的 ARN 来修改账户设置。

  • put-account-setting (AWS CLI)

    以下示例用于修改特定 IAM 用户的账户设置:

    aws ecs put-account-setting --name awsvpcTrunking --value enabled --principal-arn arn:aws:iam::aws_account_id:user/userName --region us-east-1

    以下示例用于修改特定容器实例 IAM 角色的账户设置:

    aws ecs put-account-setting --name awsvpcTrunking --value enabled --principal-arn arn:aws:iam::aws_account_id:role/ecsInstanceRole --region us-east-1
  • Write-ECSAccountSetting (适用于 Windows PowerShell 的 AWS 工具)

    以下示例用于修改特定 IAM 用户的账户设置:

    Write-ECSAccountSetting -Name awsvpcTrunking -Value enabled -PrincipalArn arn:aws:iam::aws_account_id:user/userName -Region us-east-1 -Force

    以下示例用于修改特定容器实例 IAM 角色的账户设置:

    Write-ECSAccountSetting -Name awsvpcTrunking -Value enabled -PrincipalArn arn:aws:iam::aws_account_id:role/ecsInstanceRole -Region us-east-1 -Force

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

每个容器实例都有一个默认网络接口,该接口称为中继网络接口。使用以下命令通过查询 ecs.awsvpc-trunk-id 属性来列出具有增加的 ENI 限制的容器实例,这表明它具有中继网络接口。

  • list-attributes (AWS CLI)

    aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --region us-east-1
  • Get-ECSAttributeList (适用于 Windows PowerShell 的 AWS 工具)

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

支持的 Amazon EC2 实例类型

下面显示了受支持的 Amazon EC2 实例类型,以及在选择使用 awsvpcTrunking 账户设置之前和之后,可以在每个实例类型上启动使用 awsvpc 网络模式的任务的数目。对于每个实例类型上的弹性网络接口 (ENI) 限制,将一个添加到当前任务限制中,因为主网络接口将计入限制,并将两个添加到新任务限制中,因为主网络接口和中继网络实例将再次计入限制。

实例类型 每个实例的当前任务限制 每个实例的新任务限制
a1 instance family

a1.medium

1 10

a1.large

2 10

a1.xlarge

3 20

a1.2xlarge

3 40

a1.4xlarge

7 60
c5 instance family

c5.large

2 10

c5.xlarge

3 20

c5.2xlarge

3 40

c5.4xlarge

7 60

c5.9xlarge

7 60

c5.18xlarge

14 120

c5d.large

2 10

c5d.xlarge

3 20

c5d.2xlarge

3 40

c5d.4xlarge

7 60

c5d.9xlarge

7 60

c5d.18xlarge

14 120

c5n.large

2 10

c5n.xlarge

3 20

c5n.2xlarge

3 40

c5n.4xlarge

7 60

c5n.9xlarge

7 60

c5n.18xlarge

14 120
m5 instance family

m5.large

2 10

m5.xlarge

3 20

m5.2xlarge

3 40

m5.4xlarge

7 60

m5.12xlarge

7 60

m5.24xlarge

14 120

m5a.large

2 10

m5a.xlarge

3 20

m5a.2xlarge

3 40

m5a.4xlarge

7 60

m5a.12xlarge

7 60

m5a.24xlarge

14 120

m5ad.large

2 10

m5ad.xlarge

3 20

m5ad.2xlarge

3 40

m5ad.4xlarge

7 60

m5ad.12xlarge

7 60

m5ad.24xlarge

14 120

m5d.large

2 10

m5d.xlarge

3 20

m5d.2xlarge

3 40

m5d.4xlarge

7 60

m5d.12xlarge

7 60

m5d.24xlarge

14 120
p3 instance family

p3.2xlarge

3 40

p3.8xlarge

7 60

p3.16xlarge

7 120

p3dn.24xlarge

14 120
r5 instance family

r5.large

2 10

r5.xlarge

3 20

r5.2xlarge

3 40

r5.4xlarge

7 60

r5.12xlarge

7 60

r5.24xlarge

14 120

r5a.large

2 10

r5a.xlarge

3 20

r5a.2xlarge

3 40

r5a.4xlarge

7 60

r5a.12xlarge

7 60

r5a.24xlarge

14 120

r5ad.large

2 10

r5ad.xlarge

3 20

r5ad.2xlarge

3 40

r5ad.4xlarge

7 60

r5ad.12xlarge

7 60

r5ad.24xlarge

14 120

r5d.large

2 10

r5d.xlarge

3 20

r5d.2xlarge

3 40

r5d.4xlarge

7 60

r5d.12xlarge

7 60

r5d.24xlarge

14 120