Amazon ECS 上的 AWS Fargate - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon ECS 上的 AWS Fargate

AWS Fargate 是可与 Amazon ECS 结合使用的技术,使您在运行容器时不必管理 Amazon EC2 实例的服务器或集群。使用 AWS Fargate,您不必再预置、配置或扩展虚拟机集群即可运行容器。这样一来,您就无需再选择服务器类型、确定扩展集群的时间和优化集群打包。

您在运行使用 Fargate 启动类型的任务和服务时,需要将应用程序打包到容器中、指定 CPU 和内存要求、定义联网和 IAM 策略并启动应用程序。每个 Fargate 任务都具有自己的隔离边界,不与其他任务共享底层内核、CPU 资源、内存资源或弹性网络接口。

本主题介绍 Fargate 任务和服务的不同组件,还列出了将 Fargate 与 Amazon ECS 结合使用时的特别注意事项。

以下区域支持 AWS Fargate 上的 Amazon ECS。根据需要记录支持的可用区 ID。

区域名称 区域

美国东部(俄亥俄州)

us-east-2

美国东部(弗吉尼亚北部)

us-east-1

美国西部(加利福尼亚北部)

us-west-1

美国西部(俄勒冈)

us-west-2

非洲(开普敦)

af-south-1

亚太地区(香港)

ap-east-1

亚太地区(孟买)

ap-south-1(仅限 aps1-az1aps1-az3

亚太区域(首尔)

ap-northeast-2

亚太区域(新加坡)

ap-southeast-1

亚太区域(悉尼)

ap-southeast-2

亚太区域(东京)

ap-northeast-1

加拿大 (中部)

ca-central-1

中国(北京)

cn-north-1

中国 (宁夏)

cn-northwest-1

欧洲(法兰克福)

eu-central-1

欧洲(爱尔兰)

eu-west-1

欧洲(伦敦)

eu-west-2

欧洲(巴黎)

eu-west-3

欧洲(斯德哥尔摩)

eu-north-1

南美洲(圣保罗)

sa-east-1

中东(巴林)

me-south-1

AWS GovCloud(美国东部)

us-gov-east-1

AWS GovCloud (US-West)

us-gov-west-1

下面的演练可帮助您了解如何开始将 AWS Fargate 与 Amazon ECS 配合使用:

任务定义

Fargate 上的 Amazon ECS 任务并不支持所有可用的任务定义参数。某些参数完全不受支持,而其他参数对于 Fargate 任务的行为则不同。

以下任务定义参数在 Fargate 任务中无效:

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • gpu

  • ipcMode

  • links

  • pidMode

  • placementConstraints

  • privileged

  • systemControls

以下任务定义参数在 Fargate 任务中有效,但应注意以下限制:

  • linuxParameters – 当指定适用于容器的 Linux 特定选项时,对于 capabilities,不支持 add 参数。devicessharedMemorySizetmpfs 参数不受支持。有关更多信息,请参阅Linux 参数

  • volumes – Fargate 任务仅支持绑定装载主机卷,因此, dockerVolumeConfiguration 参数不受支持。有关更多信息,请参阅

为确保您的任务定义可验证用于 Fargate,可在注册任务定义时指定以下内容:

  • 在 AWS 管理控制台中,为 Requires Compatibilities (需要兼容性) 字段指定 FARGATE

  • 在 AWS CLI 中指定 --requires-compatibilities 选项。

  • 在 Amazon ECS API 中指定 requiresCompatibilities 标记。

网络模式

Fargate 的 Amazon ECS 任务定义需要将网络模式设置为 awsvpcawsvpc 网络模式会为每个任务提供它自己的弹性网络接口。有关更多信息,请参阅awsvpc 网络模式的任务联网

创建服务或手动运行任务时还需要网络配置。有关更多信息,请参阅 任务联网

任务 CPU 和内存

Fargate 的 Amazon ECS 任务定义需要您在任务级别指定 CPU 和内存。尽管您还可以在容器级别为 Fargate 任务指定 CPU 和内存,但这是可选项。只需在任务级别指定这些资源便可满足大多数使用案例。下表显示了任务级 CPU 和内存的有效组合。

CPU 值

内存值

256 (.25 vCPU)

0.5GB、1GB、2GB

512 (.5 vCPU)

1GB、2GB、3GB、4GB

1024 (1 vCPU)

2GB、3GB、4GB、5GB、6GB、7GB、8GB

2048 (2 vCPU)

4GB 到 16GB 之间(以 1GB 为增量)

4096 (4 vCPU)

8GB 到 30GB 之间(以 1GB 为增量)

任务资源限制

Fargate 的 Amazon ECS 任务定义支持使用 ulimits 参数来定义要为容器设置的资源限制。

Fargate 任务使用默认资源限制值,但 nofile 资源限制参数除外, Fargate 覆盖该参数。nofile 资源限制对容器可以使用的打开文件数量设置限制。对于 Fargate 任务,默认的 nofile 软限制为 1024,硬限制 4096。如果您的任务需要处理大量文件,则可以在任务定义中调整这些限制。下面显示 nofile 限制已翻倍的任务定义的代码段:

"ulimits": [ { "name": "nofile", "softLimit": 2048, "hardLimit": 8192 } ]

有关可以调整的其他资源限制的更多信息,请参阅资源限制

日志记录

Fargate 的 Amazon ECS 任务定义支持用于日志配置的 awslogssplunkfirelensfluentd 日志驱动程序。

awslogs 日志驱动程序会将您的 Fargate 任务配置为向 Amazon CloudWatch Logs 发送日志信息。下面显示了任务定义中配置 awslogs 日志驱动程序的代码段:

"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" }

有关在任务定义中使用 awslogs 日志驱动程序以将容器日志发送到 CloudWatch Logs 的更多信息,请参阅使用 awslogs 日志驱动程序

有关任务定义中的 firelens 日志驱动程序的更多信息,请参阅自定义日志路由

有关在任务定义中使用 splunk 日志驱动程序的更多信息,请参阅示例:splunk 日志驱动程序

Amazon ECS 任务执行 IAM 角色

可以使用 Fargate 指定一个可选的任务执行 IAM 角色,以允许您的 Fargate 任务对 Amazon ECR 进行 API 调用。这些 API 调用会拉取容器映像并调用 CloudWatch 来存储容器应用程序日志。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

示例任务定义

下面是用于设置 Web 服务器的示例任务定义(使用 Fargate 启动类型):

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ] }

任务存储

对于 Fargate 任务,支持以下存储类型:

  • Amazon EFS 卷(用于持久性存储)。有关更多信息,请参阅 Amazon EFS 卷

  • 临时存储(用于非持久性存储)。

预置后,Fargate 上的每个 Amazon ECS 任务都会收到以下短暂存储。短暂存储配置取决于任务所使用的平台版本。 Fargate 任务停止后,短暂存储将被删除。有关 Amazon ECS 默认服务限制的更多信息,请参阅Amazon ECS 服务配额

使用平台版本 1.4.0 或更高版本的 Fargate 任务

使用平台版本 1.4.0 或更高版本的 Fargate 任务上的所有 Amazon ECS 都会获得至少 20 GB 的短暂存储。存储容量不可调整。

对于使用平台版本 1.4.0 或更高版本且在 2020 年 5 月 28 日或之后启动的任务,将使用 AES-256 加密算法通过 AWS Fargate 托管加密密钥对短暂存储进行加密。

使用平台版本 1.3.0 或更早版本的 Fargate 任务

对于使用平台版本 1.3.0 或更早版本的 Fargate 任务上的 Amazon ECS,每个任务都会收到以下短暂存储。

  • 10 GB 的 Docker 层存储

  • 额外 4 GB 用于卷挂载。可在任务定义中使用 volumesmountPointsvolumesFrom 参数挂载此存储和在容器之间共享此存储。

    注意

    hostsourcePath 参数不支持 Fargate 任务。

任务和服务

在准备好 Fargate 的 Amazon ECS 任务定义后,需要在创建服务时制定一些决策。

任务联网

Fargate 的 Amazon ECS 任务要求使用 awsvpc 网络模式,该模式可为每个任务提供一个弹性网络接口。在使用此网络模式运行任务或创建服务时,必须指定一个或多个要附加网络接口的子网以及一个或多个要应用于该网络接口的安全组。

如果您使用的是公有子网,请决定是否为网络接口提供公有 IP 地址。对于公有子网中拉取容器映像的 Fargate 任务,需要向该任务的弹性网络接口分配一个公有 IP 地址,还需要一个到 Internet 的路由,或一个可以将请求路由到 Internet 的 NAT 网关。对于私有子网中拉取容器映像的 Fargate 任务,私有子网需要连接 NAT 网关以将请求路由到 Internet。有关更多信息,请参阅 awsvpc 网络模式的任务联网

下面是 Fargate 服务的 networkConfiguration 部分示例:

"networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-12345678" ], "subnets": [ "subnet-12345678" ] } }

具有使用 awsvpc 网络模式的任务(例如,那些 Fargate 启动类型的任务)的服务仅支持 应用程序负载均衡器 和 网络负载均衡器;不支持 传统负载均衡器。此外,当您为这些服务创建任何目标组时,必须选择 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。有关更多信息,请参阅服务负载均衡

私有注册表身份验证

Fargate 的 Amazon ECS 任务可使用基本身份验证对私有映像注册表(包括 Docker Hub)进行身份验证。当启用私有注册表身份验证时,您可以在任务定义中使用私有 Docker 映像。

要使用私有注册表身份验证,需要使用 AWS Secrets Manager 为私有注册表创建一个包含您的凭证的密钥。然后,在容器定义中,通过您创建的密钥的完整 ARN 指定 repositoryCredentials。下面是显示必需参数的任务定义代码段:

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter: "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } } ]

有关更多信息,请参阅 任务的私有注册表身份验证

集群

集群可以包含使用 Fargate 和 EC2 启动类型的任务。在 AWS 管理控制台中查看您的集群时,会分别显示 Fargate 和 EC2 任务计数。

有关 Amazon ECS 集群的更多信息,包括创建集群的演练,请参阅Amazon ECS 集群

Fargate Spot

Amazon ECS 容量提供程序使您能够将 Fargate 和 Fargate Spot 容量用于您的 Amazon ECS 任务。

使用 Fargate Spot,您可以按照与 Fargate 价格相比的折扣价格运行能够容忍中断的 Amazon ECS 任务。Fargate Spot 在备用计算容量上运行任务。当 AWS 需要收回容量时,您的任务将在两分钟警告后中断。有关更多信息,请参阅AWS Fargate 容量提供程序

Fargate 任务停用

在 AWS 检测到托管任务的底层硬件发生无法弥补的故障时或需要针对安全性问题打补丁时,将停用 Fargate 任务。大多数安全补丁程序以透明方式处理,无需执行任何操作或者重新启动您的任务。但对于某些问题,可能需要重新启动该任务。

当任务到达其计划的停用日期时,AWS 会将其停止或终止。如果任务是服务的一部分,则任务会自动停止,服务计划程序会启动新任务来代替它。如果您使用的是独立任务,您将收到任务停用通知。有关更多信息,请参阅 任务停用

Fargate Savings Plans

Savings Plans 是可以显著减少 AWS 使用的定价模式。您承诺在 1 年或 3 年期限内保持一致的使用量(以美元/小时为单位),并获得较低的使用价格。有关更多信息,请参阅 Savings Plans 用户指南

要为您的 Fargate 使用创建 Savings Plan,请使用计算 Savings Plans类型。有关更多信息,请参阅 Savings Plans 和 Amazon ECS