Amazon Fargate 上的 Amazon ECS
Amazon Fargate 是可与 Amazon ECS 结合使用的技术,使您在运行容器
您在运行使用 Fargate 启动类型的任务和服务时,您需要将应用程序打包到容器中、指定 CPU 和内存要求、定义联网和 IAM policy 并启动应用程序。每个 Fargate 任务都具有自己的隔离边界,不与其他任务共享底层内核、CPU 资源、内存资源或弹性网络接口。
Fargate 为 Amazon Linux 2 以及 Microsoft Windows 2019 Server Full 和 Core 版本提供平台版本。除非另有说明,否则本页面上的信息适用于所有 Fargate 平台。
本主题介绍 Fargate 任务和服务的不同组件,还列出了将 Fargate 与 Amazon ECS 结合使用时的特别注意事项。
有关在 Fargate 上支持 Linux 容器的区域的信息,请参阅 Linux 容器在 Amazon Fargate 上的支持区域。
有关在 Fargate 上支持 Windows 容器的区域的信息,请参阅 Windows 容器在 Amazon Fargate 上的支持区域。
任务定义
Amazon Fargate 上的 Amazon ECS 任务并不支持所有可用的任务定义参数。某些参数完全不受支持,而其他参数对于 Fargate 任务的行为则不同。
以下任务定义参数在 Fargate 任务中无效:
-
disableNetworking
-
dnsSearchDomains
-
dnsServers
-
dockerSecurityOptions
-
extraHosts
-
gpu
-
ipcMode
-
links
-
pidMode
-
placementConstraints
-
privileged
-
systemControls
-
maxSwap
-
swappiness
以下任务定义参数在 Fargate 任务中有效,但应注意以下限制:
为确保您的任务定义可验证用于 Fargate,可在注册任务定义时指定以下内容:
-
在 Amazon Web Services Management Console中,为 Requires Compatibilities (需要兼容性) 字段指定
FARGATE
。 -
在 Amazon CLI 中指定
--requires-compatibilities
选项。 -
在 Amazon ECS API 中指定
requiresCompatibilities
标记。
网络模式
Amazon Fargate 的 Amazon ECS 任务定义需要将网络模式设置为 awsvpc
。awsvpc
网络模式会为每个任务提供它自己的弹性网络接口。有关更多信息,请参阅适用于 Amazon Fargate 的 Amazon Elastic Container Service 用户指南中的 Amazon Fargate 任务联网。
创建服务或手动运行任务时还需要网络配置。有关更多信息,请参阅适用于 Amazon Fargate 的 Amazon Elastic Container Service 用户指南中的 Amazon Fargate 任务联网。
任务操作系统
为 Amazon Fargate 配置任务和容器定义时,您必须指定容器运行的操作系统。Amazon Fargate 支持以下操作系统:
-
Amazon Linux 2
-
Windows Server 2019 Full
-
Windows Server 2019 Core
-
Windows Server 2022 Full
-
Windows Server 2022 Core
任务 CPU 架构
有 2 个架构可用于 Amazon ECS 任务定义 ARM 和 X86_64。
当您在 Amazon Fargate 上运行 Windows 容器时,您必须具有 X86_64 CPU 架构。
当您在 Amazon Fargate 上运行 Linux 容器时,您可以使用 X86_64 CPU 架构,也可以使用 ARM64 架构用于基于 ARM 的应用程序。有关更多信息,请参阅使用 Amazon ECS 上的 64 位 ARM 工作负载。
任务 CPU 和内存
Amazon Fargate 的 Amazon ECS 任务定义需要您在任务级别指定 CPU 和内存。尽管您还可以在容器级别为 Fargate 任务指定 CPU 和内存,但这是可选项。只需在任务级别指定这些资源便可满足大多数使用案例。下表显示了任务级 CPU 和内存的有效组合。
CPU 值 |
内存值 |
Amazon Fargate 支持的操作系统 |
---|---|---|
256 (.25 vCPU) |
512MiB、1GB、2GB |
Linux |
512 (.5 vCPU) |
1GB、2GB、3GB、4GB |
Linux |
1024 (1 vCPU) |
2GB、3GB、4GB、5GB、6GB、7GB、8GB |
Linux、Windows |
2048 (2 vCPU) |
4GB 到 16GB 之间 (以 1GB 为增量) |
Linux、Windows |
4096 (4 vCPU) |
8GB 到 30GB 之间 (以 1GB 为增量) |
Linux、Windows |
8192 (8 vCPU) 此选项需要 Linux 平台 |
16 GB 到 60 GB 之间(以 4 GB 为增量) |
Linux |
16384 (16vCPU) 此选项需要 Linux 平台 |
32 GB 到 120 GB 之间(以 8 GB 为增量) |
Linux |
任务资源限制
Amazon Fargate 上的 Linux 容器的 Amazon ECS 任务定义支持使用 ulimits
参数来定义要为容器设置的资源限制。
Amazon Fargate 上的 Windows 的 Amazon ECS 任务定义支持使用 ulimits
参数来定义要为容器设置的资源限制。
Fargate 上托管的 Amazon ECS 任务使用使用操作系统设置的原定设置资源限制值,Fargate 覆盖的 nofile
资源限制参数除外。nofile
资源限制对容器可以使用的打开文件数量设置限制。原定设置的 nofile
软限制为 1024
,硬限制为 4096
。
下面是一个示例任务定义代码段,介绍如何定义 nofile
限制已经增加了一倍:
"ulimits": [
{
"name": "nofile",
"softLimit": 2048
,
"hardLimit": 8192
}
]
有关可以调整的其他资源限制的更多信息,请参阅资源限制。
日志记录
Amazon Fargate 的 Amazon ECS 任务定义支持用于日志配置的 awslogs
、splunk
和 awsfirelens
日志驱动程序。
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 日志驱动程序。
有关任务定义中的 awsfirelens
日志驱动程序的更多信息,请参阅自定义日志路由。
有关在任务定义中使用 splunk
日志驱动程序的更多信息,请参阅示例:splunk 日志驱动程序。
Amazon ECS 任务执行 IAM 角色
可以使用 Fargate 指定一个可选的任务执行 IAM 角色,以允许您的 Fargate 任务对 Amazon ECR 进行 API 调用。这些 API 调用会拉取容器映像并调用 CloudWatch 来存储容器应用程序日志。有关更多信息,请参阅Amazon ECS 任务执行 IAM 角色。
示例 Amazon Linux 2 任务定义
下面是用于设置 Web 服务器的示例任务定义(使用 Fargate 启动类型与 Amazon Linux 2 操作系统):
{ "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", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ] }
Windows 示例任务定义
下面是用于设置 Web 服务器的示例任务定义(使用 Fargate 启动类型与 Windows 2019 Server 操作系统)。
{ "containerDefinitions": [ { "command": [ "New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<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>'; C:\\ServiceMonitor.exe w3svc" ], "entryPoint": [ "powershell", "-Command" ], "essential": true, "cpu": 2048, "memory": 4096, "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fargate-windows-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample_windows_app", "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ] } ], "memory": "4096", "cpu": "2048", "networkMode": "awsvpc", "family": "windows-simple-iis-2019-core", "executionRoleArn": "arn:aws:iam::
012345678910
:role/ecsTaskExecutionRole", "runtimePlatform": { "operatingSystemFamily": "WINDOWS_SERVER_2019_CORE" }, "requiresCompatibilities": [ "FARGATE" ] }
任务存储
对于 Fargate 上托管的 Amazon ECS 任务,支持以下存储类型:
-
Amazon EFS 卷(用于持久性存储)。有关更多信息,请参阅Amazon EFS 卷。
-
绑定挂载以实现临时存储。有关更多信息,请参阅绑定挂载。
任务和服务
在准备好 Amazon Fargate 的 Amazon ECS 任务定义后,需要在创建服务时制定一些决策。
任务联网
Amazon Fargate 的 Amazon ECS 任务要求使用 awsvpc
网络模式,该模式可为每个任务提供一个弹性网络接口。在使用此网络模式运行任务或创建服务时,必须指定一个或多个要附加网络接口的子网以及一个或多个要应用于该网络接口的安全组。
如果您使用的是公有子网,请决定是否为网络接口提供公有 IP 地址。对于公有子网中拉取容器映像的 Fargate 任务,需要向该任务的弹性网络接口分配一个公有 IP 地址,还需要一个到互联网的路由,或一个可以将请求路由到互联网的 NAT 网关。对于私有子网中拉取容器映像的 Fargate 任务,您需要私有子网中的 NAT 网关以将请求路由到互联网。在 Amazon ECR 中托管容器映像时,您可以将 Amazon ECR 配置为使用接口 VPC 端点。在这种情况下,任务的专用 IPv4 地址将用于图像提取。有关 Amazon ECR 接口端点的更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的 Amazon ECR 接口 VPC 端点 (Amazon PrivateLink)。
下面是 Fargate 服务的 networkConfiguration 部分示例:
"networkConfiguration": {
"awsvpcConfiguration": {
"assignPublicIp": "ENABLED",
"securityGroups": [ "sg-12345678
" ],
"subnets": [ "subnet-12345678
" ]
}
}
服务负载均衡
您可以选择将 Amazon Fargate 上的 Amazon ECS 服务配置为使用 Elastic Load Balancing 平均分配服务中的任务流量。
Amazon Fargate 上的 Amazon ECS 服务支持 Application Load Balancer 和 Network Load Balancer 负载均衡器类型。Application Load Balancers 用于路由 HTTP/HTTPS (或第 7 层) 流量。Network Load Balancers 用于路由 TCP 或 UDP(或第 4 层)流量。有关更多信息,请参阅负载均衡器类型。
当您为这些服务创建任何目标组时,必须选择 ip
而不是 instance
作为目标类型。这是因为使用 awsvpc
网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。有关更多信息,请参阅服务负载均衡。
只有在使用平台版本 1.4 或更高版本时,才支持使用 Network Load Balancer 将 UDP 流量路由到 Amazon Fargate 任务上的 Amazon ECS。
私有注册表身份验证
Amazon Fargate 的 Amazon ECS 任务可使用基本身份验证对私有映像注册表(包括 Docker Hub)进行身份验证。当启用私有注册表身份验证时,您可以在任务定义中使用私有 Docker 映像。
要使用私有注册表身份验证,需要使用 Amazon Secrets Manager 为私有注册表创建一个包含您的凭证的密钥。然后,在容器定义中,通过您创建的密钥的完整 ARN 指定 repositoryCredentials
。下面是显示必需参数的任务定义代码段:
"containerDefinitions": [
{
"image": "private-repo/private-image
",
"repositoryCredentials": {
"credentialsParameter: "arn:aws:secretsmanager:region
:aws_account_id
:secret:secret_name
"
}
}
]
有关更多信息,请参阅任务的私有注册表身份验证。
集群
集群可以包含使用 Fargate 和 EC2 启动类型的任务。在 Amazon Web Services Management Console 中查看您的集群时,会分别显示 Fargate 和 EC2 任务计数。
有关 Amazon ECS 群集的更多信息,包括创建群集的演练,请参阅 Amazon ECS 集群。
Fargate Spot
Amazon ECS 容量提供程序使您能够将 Amazon Fargate 和 Fargate Spot 容量用于您的 Amazon ECS 任务。
Amazon Fargate 上的 Windows 容器无法使用 Fargate Spot 容量提供程序。
使用 Fargate Spot,您可以按照与 Amazon Fargate 价格相比的折扣价格运行能够容忍中断的 Amazon ECS 任务。Fargate Spot 在备用计算容量上运行任务。当 Amazon 需要恢复容量时,您的任务将被中断,并发出两分钟的警告。有关更多信息,请参阅Amazon Fargate 容量提供程序。
使用情况指标
您可以使用 CloudWatch 用量指标来提供账户资源使用情况的可见性。使用这些指标在 CloudWatch 图表和控制面板上可视化当前服务用量。
Amazon Fargate 用量指标与 Amazon 服务配额对应。您可以配置警报,以在用量接近服务配额时向您发出警报。有关 Amazon Fargate 服务配额的更多信息,请参阅 Amazon Fargate 服务配额。
有关 Amazon Fargate 使用情况指标的更多信息,请参阅 Amazon Fargate 的 Amazon Elastic Container Service 用户指南中的 Amazon Fargate 使用情况指标。
任务维护
当 Amazon 确定托管在 Amazon Fargate 上的 Amazon ECS 任务需要安全或基础设施更新时,需要停止这些任务并启动新任务来替换它们。有关更多信息,请参阅 Amazon Elastic Container Service 开发人员指南 Amazon Fargate 中的任务维护。
下表描述了这些场景。
任务类型 | 问题 | 操作 |
---|---|---|
独立任务 |
主机问题 |
使用 Amazon Health Dashboard |
安全漏洞 |
使用 Amazon Health Dashboard |
|
服务任务 |
主机问题 |
任务由 Amazon 停止,服务调度程序将启动一个新任务,尝试维持服务的所需计数。未发送任何通知。 |
安全漏洞 |
使用 Amazon Health Dashboard |
Savings Plans
Savings Plans 是可以显著减少 Amazon 使用的定价模式。您承诺在 1 年或 3 年期限内保持一致的使用量(以美元/小时为单位),并享受较低的使用价格。有关更多信息,请参阅 Savings Plans 用户指南。
要为您的 Amazon Fargate 使用创建 Savings Plan,请使用 Compute Savings Plans 类型。要开始使用,请参阅 Savings Plans 用户指南中的 Savings Plans 入门。
Amazon Fargate 上的 Windows 容器注意事项
Amazon Fargate 上的 Windows 容器支持以下操作系统:
-
Windows Server 2019 Full
-
Windows Server 2019 Core
-
Windows Server 2022 Full
-
Windows Server 2022 Core
Amazon 负责操作系统许可证管理,因此您不需要任何额外的 Microsoft Windows Server 许可证。
Amazon Fargate 上的 Windows 容器支持 awslog 驱动程序。有关更多信息,请参阅使用 awslogs 日志驱动程序。
您的任务可以运行 Linux 容器或 Windows 容器。如果您需要运行两种容器类型,必须创建单独的任务。
Fargate 上的 Windows 容器上不支持以下功能:
-
组托管服务账户(gMSA)
-
Amazon FSx
-
ENI 中继
-
针对任务的 App Mesh 服务和代理集成
-
Firelens 日志路由器集成用于任务
-
可配置短暂存储
-
EFS 卷
-
以下任务定义参数:
-
maxSwap
-
swappiness
-
-
Fargate Spot 容量提供程序
-
映像卷
Dockerfile
volume
选项被忽略。改为在任务定义中指定绑定挂载。有关更多信息,请参阅绑定挂载。