

# Fargate 的 Amazon ECS 任务联网选项
<a name="fargate-task-networking"></a>

预设情况下，Fargate 上的每个 Amazon ECS 任务都会提供弹性网络接口（ENI）和主要私有 IP 地址。使用公有子网时，您可以选择向任务的 ENI 分配公有 IP 地址。如果您的 VPC 配置了双堆栈模式，并且您使用具有 IPv6 CIDR 数据块的子网，则您的任务 ENI 也将接收 IPv6 地址。一个任务在给定的时间只能有一个与之关联的 ENI。属于同一任务的容器可以通过 `localhost` 接口进行通信。有关 VPC 和子网的更多信息，请参阅《Amazon VPC 用户指南》**中的 [Amazon VPC 的工作原理](https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html)。

要使 Fargate 上的任务拉取容器映像，任务必须具有通往互联网的路由。下面说明如何验证您的任务具有通往互联网的路由。
+ 使用公有子网时，您可以向任务 ENI 分配公有 IP 地址。
+ 使用私有子网时，子网可以连接一个 NAT 网关。
+ 使用 Amazon ECR 中托管的容器映像时，您可以将 Amazon ECR 配置为使用接口 VPC 端点，将通过任务的私有 IPv4 地址进行映像提取 。有关更多信息，请参阅《Amazon Elastic Container Registry 用户指南》**中的[Amazon ECR 接口 VPC 端点（AWS PrivateLink）](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html)。

由于每个任务都有自己的 ENI，因此您可以使用联网功能（例如 VPC 流日志），以便可以监控您任务的流量。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。

您还可以利用 AWS PrivateLink。您可以配置 VPC 接口端点，以便可以通过私有 IP 地址访问 Amazon ECS API。AWS PrivateLink 将 VPC 和 Amazon ECS 之间的所有网络流量限制在 Amazon 网络以内。您无需互联网网关、NAT 设备或虚拟私有网关。有关更多信息，请参阅 [Amazon ECS 接口 VPC 端点（AWS PrivateLink）](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/vpc-endpoints.html)。

有关如何将 `NetworkConfiguration` 资源与 CloudFormation 一起使用的示例，请参阅 [Amazon ECS 的 CloudFormation 示例模板](working-with-templates.md)。

创建的 ENI 由 AWS Fargate 完全托管。此外，还有一个关联的 IAM 策略用于向 Fargate 授予权限。对于使用 Fargate 平台版本 `1.4.0` 或更高版本的任务，任务会接收单个 ENI（称为任务 ENI），所有网络流量都将流经 VPC 内的这个 ENI。此流量记录在您的 VPC 流日志中。对于使用 Fargate 平台版本 `1.3.0` 及更早版本的任务，除了任务 ENI 外，任务还会收到单独的 Fargate 拥有的 ENI，该 ENI 用于某些在 VPC 流日志中不可见的网络流量。下表介绍网络流量行为以及每个平台版本所需的 IAM 策略。


|  Action  |  Linux 平台版本 `1.3.0` 及更早版本的流量  |  Linux 平台版本 `1.4.0` 的流量  |  Windows 平台版本 `1.0.0` 的流量  |  IAM 权限  | 
| --- | --- | --- | --- | --- | 
|  检索 Amazon ECR 登录凭证  |  Fargate 拥有的 ENI  |  任务 ENI  |  任务 ENI  |  任务执行 IAM 角色  | 
|  映像提取  |  任务 ENI  |  任务 ENI  |  任务 ENI  |  任务执行 IAM 角色  | 
|  通过日志驱动程序发送日志  |  任务 ENI  |  任务 ENI  |  任务 ENI  |  任务执行 IAM 角色  | 
|  通过适用于 Amazon ECS 的 FireLens 发送日志  |  任务 ENI  |  任务 ENI  |  任务 ENI  |  任务 IAM 角色  | 
|  从 Secrets Manager 或 Systems Manager 中检索密码  |  Fargate 拥有的 ENI  |  任务 ENI  |  任务 ENI  |  任务执行 IAM 角色  | 
|  Amazon EFS 文件系统流量  |  不可用  |  任务 ENI  |  任务 ENI  |  任务 IAM 角色  | 
|  应用程序流量  |  任务 ENI  |  任务 ENI  |  任务 ENI  |  任务 IAM 角色  | 

## 注意事项
<a name="fargate-task-networking-considerations"></a>

在使用任务联网时考虑以下事项。
+ 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
  ```
+ 在 VPC 上启用 `enableDnsHostnames` 和 `enableDnsSupport` 选项时，Amazon ECS 使用 Amazon 提供的 DNS 主机名来填充任务的主机名。如果未启用这些选项，则任务的 DNS 主机名将被设置为随机主机名。有关 VPC 的 DNS 设置的更多信息，请参阅《Amazon VPC 用户指南》**中的[在您的 VPC 中使用 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。
+ 您最多只能为 `awsVpcConfiguration` 指定 16 个子网和 5 个安全组。有关更多信息，请参阅 *Amazon Elastic Container Service API 参考*中的 [AwsVpcConfiguration](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_AwsVpcConfiguration.html)。
+ 您不能手动分离或修改 Fargate 创建并附加的 ENI。这是为了防止意外删除与正在运行的任务关联的 ENI。要释放任务的 ENI，请停止该任务。
+ 如果 VPC 子网进行了更新以更改其使用的 DHCP 选项集，则无法将这些更改应用于使用 VPC 的现有任务。启动新任务，以在测试新更改的同时获得平稳迁移的新设置，然后在不需要回滚的情况下停止旧的任务。
+ 以下内容适用于在 Fargate 平台版本 `1.4.0` 或更高版本（适用于 Linux）或 `1.0.0`（适用于 Windows）上运行的任务。在双堆栈子网中启动的任务会接收一个 IPv4 地址和一个 IPv6 地址。在仅 IPv6 子网中启动的任务仅接收 IPv6 地址。
+ 对于使用平台版本 `1.4.0` 或更高版本（对于 Linux）或 `1.0.0`（对于 Windows）的任务，任务 ENI 支持巨型帧。网络接口配置了最大传输单元（MTU），这是单个帧内将放入的最大有效载荷的大小。MTU 越大，单个帧内可以放入的应用程序有效载荷就越多，这可以减少每帧开销并提高效率。当您的任务和目标之间的网络路径支持巨型帧时，支持巨型帧将减少开销。
+ 任务使用 Fargate 的服务仅支持应用程序负载均衡器和网络负载均衡器。不支持经典负载均衡器。当您创建任何目标组时，必须选择 `ip` 而不是 `instance` 作为目标类型。有关更多信息，请参阅 [使用负载均衡分配 Amazon ECS 服务流量](service-load-balancing.md)。

## 在双堆栈模式下使用 VPC
<a name="fargate-task-networking-vpc-dual-stack"></a>

在双堆栈模式下使用 VPC 时，您的任务可通过 IPv4 /或 IPv6 或两者进行通信。IPv4 和 IPv6 地址是彼此独立的；您必须在 VPC 中分别针对 IPv4 和 IPv6 配置路由和安全设置。有关将 VPC 配置为双堆栈模式的更多信息，请参阅 *Amazon VPC用户指南* 中的[迁移到 IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html)。

如果满足以下条件，将向 Fargate 上的 Amazon ECS 任务分配 IPv6 地址：
+ 您的 Amazon ECS `dualStackIPv6` 账户设置为 IAM 主体在您启动任务所在的区域启动您的任务时打开（`enabled`）。此设置仅可使用 API 或 AWS CLI 修改。您可以选择为账户中的特定 IAM 主体开启此设置，也可以通过设置账户默认设置为整个账户开启此设置。有关更多信息，请参阅 [通过账户设置访问 Amazon ECS 功能](ecs-account-settings.md)。
+ 您的 VPC 和子网已为 IPv6 启用。有关如何将 VPC 配置为双堆栈模式的更多信息，请参阅《Amazon VPC 用户指南》**中的[迁移到 IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html)。
+ 您的子网已启用自动分配 IPv6 地址。有关如何配置子网的更多信息，请参阅《Amazon VPC 用户指南》**中的[修改子网的 IPv6 寻址属性](https://docs.aws.amazon.com/vpc/latest/userguide/modify-subnets.html)。
+ 任务或服务使用 Fargate 平台版本 `1.4.0` 或更高版本（用于 Linux）。

对于双堆栈模式下在 VPC 中运行的 Fargate 上的 Amazon ECS 任务，要与任务启动过程中使用的依赖服务（例如，ECR、SSM 和 SecretManager）通信，公有子网的路由表需要通往互联网网关的 IPv4（0.0.0.0/0）路由，私有子网的路由表需要通往 NAT 网关的 IPv4（0.0.0.0/0）路由。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)和 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

有关如何配置双堆栈 VPC 的示例，请参阅 [双堆栈 VPC 配置示例](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-example.html)。

## 在仅 IPv6 模式下使用 VPC
<a name="fargate-task-networking-vpc-ipv6-only"></a>

在仅 IPv6 配置中，Amazon ECS 任务仅通过 IPv6 进行通信。要为仅 IPv6 配置设置 VPC 和子网，您必须向 VPC 添加 IPv6 CIDR 数据块，并创建仅包含 IPv6 CIDR 数据块的子网。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[为 VPC 添加 IPv6 支持](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html)和[创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html)。您还必须使用 IPv6 目标更新路由表，并为安全组配置 IPv6 规则。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[配置路由表](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)和[配置安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

请注意以下事项：
+ 您可以通过直接更新服务以使用仅 IPv6 子网，或者创建仅 IPv6 并行服务并使用 Amazon ECS 蓝绿部署将流量转移到新服务，来将仅 IPv4 或双堆栈 Amazon ECS 服务更新为仅 IPv6 配置。有关 Amazon ECS 蓝绿部署的更多信息，请参阅[Amazon ECS 蓝/绿部署](deployment-type-blue-green.md)。
+ 仅 IPv6 Amazon ECS 服务必须使用带有 IPv6 目标组的双堆栈负载均衡器。如果您要迁移位于应用程序负载均衡器或网络负载均衡器后面的现有 Amazon ECS 服务，则可以创建新的双堆栈负载均衡器并转移来自旧负载均衡器的流量，或者更新现有负载均衡器的 IP 地址类型。

   有关网络负载均衡器的更多信息，请参阅《网络负载均衡器用户指南》**中的[创建网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)和[更新网络负载均衡器的 IP 地址类型](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-ip-address-type.html)。有关应用程序负载均衡器的更多信息，请参阅《应用程序负载均衡器用户指南》**中的[创建应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)和[更新应用程序负载均衡器的 IP 地址类型](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-ip-address-type.html)。
+ Windows 不支持仅 IPv6 配置。
+ 对于仅 IPv6 配置中的 Amazon ECS 任务，如果要与仅 IPv4 端点通信，您可以设置 DNS64 和 NAT64，以将网络地址从 IPv6 转换为 IPv4。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [DNS64 和 NAT64](https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-nat64-dns64.html)。
+ Fargate 平台版本 `1.4.0` 或更高版本支持仅 IPv6 配置。
+ 在仅 IPv6 配置中，Amazon ECS 工作负载在从 Amazon ECR 拉取映像时必须使用 Amazon ECR 双堆栈映像 URI 端点。有关更多信息，请参阅《Amazon Elastic Container Registry 用户指南》**中的[通过 IPv6 发出请求入门](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ecr-requests.html#ipv6-access-getting-started)。
**注意**  
Amazon ECR 不支持仅 IPv6 配置中的任务可使用的双堆栈接口 VPC 端点。有关更多信息，请参阅《Amazon Elastic Container Registry 用户指南》**中的[通过 IPv6 发出请求入门](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ecr-requests.html#ipv6-access-getting-started)。
+ 仅 IPv6 配置不支持 Amazon ECS Exec。
+ Amazon CloudWatch 不支持可用于监控仅 IPv6 配置中使用 FIPS-140 合规性的 Amazon ECS 任务的双堆栈 FIPS 端点。有关 FIPS-140 的更多信息，请参阅 [AWS Fargate 美国联邦信息处理标准（FIPS-140）](ecs-fips-compliance.md)。

### 支持 Amazon ECS 仅 IPv6 模式的 AWS 区域
<a name="fargate-task-networking-ipv6-only-regions"></a>

在 Amazon ECS 可用的以下 AWS 区域，您可以在仅 IPv6 配置中运行任务：
+ 美国东部（俄亥俄州）
+ 美国东部（弗吉尼亚州北部）
+ 美国西部（北加利福尼亚）
+ 美国西部（俄勒冈州）
+ 非洲（开普敦）
+ 亚太地区（香港）
+ 亚太地区（海得拉巴）
+ 亚太地区（雅加达）
+ 亚太地区（墨尔本）
+ 亚太地区（孟买）
+ 亚太地区（大阪）
+ 亚太地区（首尔）
+ 亚太地区（新加坡）
+ 亚太地区（悉尼）
+ 亚太地区（东京）
+ 加拿大（中部）
+ 加拿大西部（卡尔加里）
+ 中国（北京）
+ 中国（宁夏）
+ 欧洲地区（法兰克福）
+ 欧洲地区（伦敦）
+ 欧洲地区（米兰）
+ 欧洲地区（巴黎）
+ 欧洲（西班牙）
+ 以色列（特拉维夫）
+ 中东（巴林）
+ 中东（阿联酋）：
+ 南美洲（圣保罗）
+ AWS GovCloud（美国东部）
+ AWS GovCloud（美国西部）