教程:使用 Amazon ECS CLI 创建具有 Fargate 任务的集群
本教程介绍如何通过使用 Fargate 启动类型的任务来设置集群和部署服务。
先决条件
完成以下先决任务:
-
设置 Amazon 账户。
-
安装 Amazon ECS CLI。有关更多信息,请参阅 安装 Amazon ECS CLI。
-
安装和配置 Amazon CLI。有关更多信息,请参阅 Amazon 命令行界面。
-
可选:Amazon CloudShell 是一种为客户提供命令行的工具,而无需创建自己的 EC2 实例。有关更多信息,请参阅《Amazon CloudShell 用户指南》中的什么是 Amazon CloudShell。
步骤 1:创建任务执行 IAM 角色
Amazon ECS 容器代理将代表您调用 Amazon API,因此,容器实例需要服务的 IAM 策略和角色,以便知道该代理属于您。此 IAM 角色称为任务执行 IAM 角色。如果您已创建要使用的任务执行角色,则可以跳过此步骤。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色。
使用 Amazon CLI 创建任务执行 IAM 角色
-
使用以下内容创建名为
task-execution-assume-role.json
的文件:{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
创建任务执行角色:
aws iam --region
us-west-2
create-role --role-nameecsTaskExecutionRole
--assume-role-policy-document file://task-execution-assume-role.json
-
附加任务执行角色策略:
aws iam --region
us-west-2
attach-role-policy --role-nameecsTaskExecutionRole
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
步骤 2:配置 Amazon ECS CLI
Amazon ECS CLI 需要获得凭证才能代表您发出 API 请求。它可以从环境变量、Amazon 配置文件或 Amazon ECS 配置文件中提取凭证。有关更多信息,请参阅 配置 Amazon ECS CLI。
创建 Amazon ECS CLI 配置
-
创建一个集群配置,该配置定义要使用的 Amazon 区域、资源创建前缀以及要在 Amazon ECS CLI 中使用的集群名称:
ecs-cli configure --cluster
tutorial
--default-launch-type FARGATE --config-nametutorial
--regionus-west-2
-
使用访问密钥和私有密钥创建 CLI 配置文件:
ecs-cli configure profile --access-key
AWS_ACCESS_KEY_ID
--secret-keyAWS_SECRET_ACCESS_KEY
--profile-nametutorial-profile
步骤 3:创建集群并配置安全组
创建 ECS 集群和安全组
-
使用 ecs-cli up 命令创建 Amazon ECS 群集。由于您在集群配置中指定 Fargate 作为您的原定设置启动类型,因此该命令将创建一个空集群和配置有两个公有子网的一个 VPC。
ecs-cli up --cluster-config
tutorial
--ecs-profiletutorial-profile
创建您的资源时,完成此命令可能需要几分钟的时间。此命令的输出包含已创建的 VPC 和子网 ID。
注意 记下这些 ID,因为您在接下来的步骤中将需要用到。
-
使用 Amazon CLI,检索 VPC 的默认安全组 ID。使用上一个输出中的 VPC ID:
aws ec2 describe-security-groups --filters Name=vpc-id,Values=
VPC_ID
--regionus-west-2
此命令的输出包含您的安全组 ID,将在下一步中使用。
-
使用 Amazon CLI 添加一个安全组规则,以允许端口 80 的入站访问:
aws ec2 authorize-security-group-ingress --group-id
security_group_id
--protocol tcp --port 80 --cidr 0.0.0.0/0 --regionus-west-2
步骤 4:创建复合文件
在此步骤中,创建一个简单的 Docker 复合文件,此文件将创建一个简单的 PHP Web 应用程序。此时,Amazon ECS CLI 支持 Docker 复合文件语法"1"
、"1.0"
、"2"
、"2.0"
、"3"
或 "3.0"
。Docker Compose 次要版本不受支持。
以下是复合文件,您可以将它称作 docker-compose.yml
。web
容器将开放端口 80 以便将流量传入 Web 服务器。它还会配置容器日志,以转到之前创建的 CloudWatch 日志组。这是针对 Fargate 任务建议的最佳实践。
version: '3' services: web: image: amazon/amazon-ecs-sample ports: - "80:80" logging: driver: awslogs options: awslogs-group: tutorial awslogs-region: us-west-2 awslogs-stream-prefix: web
如果您的账户已在 us-west-2
区域中包含名为 tutorial
的 CloudWatch Logs 日志组,请选择一个唯一名称,以便 ECS CLI 为本教程创建新的日志组。
除了 Docker 复合信息,您还必须为服务指定某些特定于 Amazon ECS 的参数。使用上一步中的 VPC、子网和安全组 ID,创建一个名为 ecs-params.yml
且包含以下内容的文件:
version: 1 task_definition: task_execution_role: ecsTaskExecutionRole ecs_network_mode: awsvpc os_family: Linux task_size: mem_limit: 0.5GB cpu_limit: 256 run_params: network_configuration: awsvpc_configuration: subnets: - "
subnet ID 1
" - "subnet ID 2
" security_groups: - "security group ID
" assign_public_ip: ENABLED
步骤 5:将复合文件部署到集群
在创建复合文件后,您可以使用 ecs-cli compose service up 将其部署到集群。默认情况下,此命令将查找当前目录中名为 docker-compose.yml
和 ecs-params.yml
的文件;您可以使用 --file
选项指定不同的 Docker 复合文件,并使用 --ecs-params
选项指定不同的 ECS Params 文件。默认情况下,通过此命令创建的资源具有标题中的当前目录,但您可以使用 --project-name
选项覆盖该目录。--create-log-groups
选项将为容器日志创建 CloudWatch 日志组。
ecs-cli compose --project-name
tutorial
service up --create-log-groups --cluster-configtutorial
--ecs-profiletutorial-profile
步骤 6:查看集群上正在运行的容器
在部署复合文件后,您可以使用 ecs-cli compose service ps 查看正在服务中运行的容器。
ecs-cli compose --project-name
tutorial
service ps --cluster-configtutorial
--ecs-profiletutorial-profile
输出:
Name State Ports TaskDefinition Health tutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web RUNNING 34.222.202.55:80->80/tcp tutorial:1 UNKNOWN
在上述示例中,您可以查看复合文件中的 web
容器以及 Web 服务器的 IP 地址和端口。如果将 Web 浏览器指向此地址,则应看到该 PHP Web 应用程序。此外,输出中还显示容器的 task-id
值。复制任务 ID;您将在下一步中使用它。
步骤 7:查看容器日志
查看任务日志:
ecs-cli logs --task-id
0c2862e6e39e4eff92ca3e4f843c5b9a
--follow --cluster-configtutorial
--ecs-profiletutorial-profile
--follow
选项告知 Amazon ECS CLI 持续轮询日志。
步骤 8:在集群上扩展任务
您可以使用 ecs-cli compose service scale 向上扩展任务计数,以增加应用程序的实例数量。在此示例中,正在运行的应用程序计数增至两个。
ecs-cli compose --project-name
tutorial
service scale 2 --cluster-configtutorial
--ecs-profiletutorial-profile
现在,您的集群中应拥有两个以上的容器:
ecs-cli compose --project-name
tutorial
service ps --cluster-configtutorial
--ecs-profiletutorial-profile
输出:
Name State Ports TaskDefinition Health tutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web RUNNING 34.222.202.55:80->80/tcp tutorial:1 UNKNOWN tutorial/d9fbbc931d2e47ae928fcf433041648f/web RUNNING 34.220.230.191:80->80/tcp tutorial:1 UNKNOWN
步骤 9:查看 Web 应用程序
在 Web 浏览器中输入任务的 IP 地址,您应看到一个显示 Simple PHP App Web 应用程序的网页。

步骤 10:清除
在结束此教程后,应清除您的资源以便这些资源不再产生任何费用。首先,删除服务,以便它停止现有容器且不尝试运行任何其他任务。
ecs-cli compose --project-name
tutorial
service down --cluster-configtutorial
--ecs-profiletutorial-profile
现在,关闭您的集群,这将清除先前使用 ecs-cli up 创建的资源。
ecs-cli down --force --cluster-config
tutorial
--ecs-profiletutorial-profile