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

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

本教程说明了如何使用 Fargate 启动类型设置群集和部署任务。

先决条件

在继续本教程前,您应当已经满足下列先决条件:

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

Amazon ECS 需要获得权限,您的 Fargate 任务才能在 CloudWatch 中存储日志。此权限包含在任务执行 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-east-1 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json
  3. 附加任务执行角色策略:

    aws iam --region us-east-1 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

步骤 2:配置 ECS CLI

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

创建 ECS CLI 配置

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

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

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

    注意

    如果这是您首次配置 ECS CLI,则这些配置将被标记为默认值。如果这不是您首次配置 ECS CLI,请参阅 ecs-cli configure defaultecs-cli configure profile default,以将其设置为默认配置和配置文件。

步骤 3:创建群集和安全组

创建 ECS 群集和安全组

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

    ecs-cli up

    注意

    创建您的资源时,完成此命令可能需要几分钟的时间。记下创建的 VPC 和子网 ID,以后将会用到它们。

  2. 利用之前的输出中的 VPC ID,使用 AWS CLI 创建一个安全组:

    aws ec2 create-security-group --group-name "my-sg" --description "My security group" --vpc-id "VPC_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

步骤 4:创建复合文件

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

以下是复合文件,您可以将它称作 docker-compose.ymlwordpress 容器将开放端口 80 以便将流量传入 Web 服务器。它还会配置容器日志,以转到之前创建的 CloudWatch 日志组。这是针对 Fargate 任务建议的最佳实践。

version: '3' services: wordpress: image: wordpress ports: - "80:80" logging: driver: awslogs options: awslogs-group: tutorial awslogs-region: us-east-1 awslogs-stream-prefix: wordpress

除了 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

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

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

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial

输出:

WARN[0000] Skipping unsupported YAML option... option name=networks WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=wordpress Name State Ports TaskDefinition a06a6642-12c5-4006-b1d1-033994580605/wordpress RUNNING 54.146.193.73:80->80/tcp tutorial:9

在上述示例中,您可以查看复合文件中的 wordpress 容器以及 Web 服务器的 IP 地址和端口。如果将 Web 浏览器指向该地址,应会显示 WordPress 安装向导。此外,输出中还显示容器的 task-id 值。复制任务 ID;您将在下一步中使用它。

步骤 7:查看容器日志

查看任务日志:

ecs-cli logs --task-id a06a6642-12c5-4006-b1d1-033994580605 --follow --cluster-config tutorial

注意

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

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

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

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

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

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial

输出:

WARN[0000] Skipping unsupported YAML option... option name=networks WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=wordpress Name State Ports TaskDefinition 880f09ed-613d-44bf-99bb-42ca44f82904/wordpress RUNNING 34.224.60.24:80->80/tcp tutorial:9 a06a6642-12c5-4006-b1d1-033994580/wordpress RUNNING 54.146.193.73:80->80/tcp tutorial:9

第 9 步:清除

在结束此教程后,应清除您的资源以便这些资源不再产生任何费用。首先,删除服务,以便它停止现有容器且不尝试运行任何其他任务。

ecs-cli compose --project-name tutorial service down --cluster-config tutorial

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

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