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

Amazon ECS 上的 AWS Fargate

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

您在运行使用 Fargate 启动类型的任务和服务时,您需要将应用程序打包到容器中、指定 CPU 和内存要求、定义联网和 IAM 策略并启动应用程序。

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

带 Amazon ECS 的 AWS Fargate 目前仅在以下区域可用:

Region Name Region
US East (N. Virginia) us-east-1
US East (Ohio) us-east-2
US West (Oregon) us-west-2
EU (Ireland) eu-west-1
EU (Frankfurt) eu-central-1
Asia Pacific (Tokyo) ap-northeast-1
Asia Pacific (Singapore) ap-southeast-1
Asia Pacific (Sydney) ap-southeast-2

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

任务定义

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

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

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • links

  • hostsourcePath

  • linuxParameters

  • placementConstraints

  • privileged

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

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

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

  • 在 API 中指定 requiresCompatibilities 标记。

网络模式

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

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

任务 CPU 和内存

Fargate 任务定义需要您在任务级别指定 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 任务定义只支持用于日志配置的 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 日志驱动程序

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 任务都会收到以下存储。任务存储是短暂存储。Fargate 任务停止后,该存储将被删除。

  • 10 GB 的 Docker 层存储

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

    注意

    hostsourcePath 参数不受支持。

有关 Amazon ECS 默认服务限制的更多信息,请参阅Amazon ECS 服务限制

下面显示任务定义中两个容器共享单个卷的代码段:

{ "containerDefinitions": [ { "image": "my-repo/database", "mountPoints": [ { "containerPath": "/var/scratch", "sourceVolume": "database_scratch" } ], "name": "database1", } { "image": "my-repo/database", "mountPoints": [ { "containerPath": "/var/scratch", "sourceVolume": "database_scratch" } ], "name": "database2", } ], "volumes": [ { "name": "database_scratch" } ] }

任务和服务

在准备好 Fargate 任务定义后,需要在创建服务时创建一些注意事项。

任务联网

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

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

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

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

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

集群

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

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