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

教程:使用 Amazon ECS CLI 创建包含 Fargate 任务的集群

本教程介绍如何通过使用 Fargate 启动类型的任务来设置集群和部署服务。

先决条件

完成以下先决任务:

步骤 1:创建任务执行 IAM 角色

Amazon ECS 容器代理将代表您调用 AWS API,因此,容器实例需要服务的 IAM 策略和角色,以便知道该代理属于您。此 IAM 角色称为任务执行 IAM 角色。如果您已创建要使用的任务执行角色,则可以跳过此步骤。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

使用 AWS CLI 创建任务执行 IAM 角色

  1. 使用以下内容创建名为 task-execution-assume-role.json 的文件:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 创建任务执行角色:

    aws iam --region us-west-2 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json
  3. 附加任务执行角色策略:

    aws iam --region us-west-2 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

步骤 2:配置 Amazon ECS CLI

Amazon ECS CLI 需要获得凭证才能代表您发出 API 请求。它可以从环境变量、AWS 配置文件或 Amazon ECS 配置文件中提取凭证。有关更多信息,请参阅 配置 Amazon ECS CLI

创建 Amazon ECS CLI 配置

  1. 创建一个集群配置,该配置定义要使用的 AWS 区域、资源创建前缀以及要在 Amazon ECS CLI 中使用的集群名称:

    ecs-cli configure --cluster tutorial --default-launch-type FARGATE --config-name tutorial --region us-west-2
  2. 使用访问密钥和私有密钥创建 CLI 配置文件:

    ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name tutorial-profile

步骤 3:创建集群并配置安全组

创建 ECS 集群和安全组

  1. 使用 ecs-cli up 命令创建 Amazon ECS 集群。由于您在集群配置中指定 Fargate 作为您的默认启动类型,因此该命令将创建一个空集群和配置有两个公有子网的一个 VPC。

    ecs-cli up --cluster-config tutorial --ecs-profile tutorial-profile

    创建您的资源时,完成此命令可能需要几分钟的时间。此命令的输出包含已创建的 VPC 和子网 ID。记下这些 ID,以备稍后使用。

  2. 使用 AWS CLI,检索 VPC 的默认安全组 ID。使用上一个输出中的 VPC ID:

    aws ec2 describe-security-groups --filters Name=vpc-id,Values=VPC_ID --region us-west-2

    此命令的输出包含您的安全组 ID,将在下一步中使用。

  3. 使用 AWS CLI 添加一个安全组规则,以允许端口 80 的入站访问:

    aws ec2 authorize-security-group-ingress --group-id security_group_id --protocol tcp --port 80 --cidr 0.0.0.0/0 --region us-west-2

步骤 4:创建复合文件

在此步骤中,创建一个简单的 Docker 复合文件,此文件将创建一个简单的 PHP Web 应用程序。此时,Amazon ECS CLI 支持 Docker 复合文件语法版本 1、2 和 3。本教程使用 Docker compose v3。

以下是复合文件,您可以将它称作 docker-compose.ymlweb 容器将开放端口 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 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.ymlecs-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-config tutorial --ecs-profile tutorial-profile

步骤 6:查看集群上正在运行的容器

在部署复合文件后,您可以使用 ecs-cli compose service ps 查看正在服务中运行的容器。

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial --ecs-profile tutorial-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-config tutorial --ecs-profile tutorial-profile

注意

--follow 选项告知 Amazon ECS CLI 持续轮询日志。

步骤 8:在集群上扩展任务

您可以使用 ecs-cli compose service scale 向上扩展任务计数,以增加应用程序的实例数量。在此示例中,正在运行的应用程序计数增至两个。

ecs-cli compose --project-name tutorial service scale 2 --cluster-config tutorial --ecs-profile tutorial-profile

现在,您的集群中应拥有两个以上的容器:

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial --ecs-profile tutorial-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-config tutorial --ecs-profile tutorial-profile

现在,关闭您的集群,这将清除先前使用 ecs-cli up 创建的资源。

ecs-cli down --force --cluster-config tutorial --ecs-profile tutorial-profile