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

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

本教程介绍如何使用 EC2 启动类型设置群集和部署任务。

先决条件

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

步骤 1:配置 ECS CLI

您必须先安装并配置 Amazon ECS CLI,然后才能启动此教程。有关更多信息,请参阅 安装 Amazon ECS CLI

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

创建 ECS CLI 配置

  1. 创建群集配置:

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

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

    注意

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

步骤 2:创建您的群集

您应执行的首个操作是创建 Amazon ECS 容器实例的集群,您可使用 ecs-cli up 命令在该集群上启动容器。虽然您在使用此命令配置集群时有许多选项可供选择,但大多数选项是可选的。在此示例中,您创建一个包含两个 t2.medium 容器实例的简单集群,这两个实例使用 id_rsa 密钥对进行 SSH 访问(此处替换您自己的密钥对)。

默认情况下,为容器实例创建的安全组将为入站流量打开端口 80。您可以使用 --port 选项指定要打开的其他端口,或者,如果有更复杂的安全组要求,则可指定现有安全组使用 --security-group 选项。

ecs-cli up --keypair id_rsa --capability-iam --size 2 --instance-type t2.medium

创建您的资源时,完成此命令可能需要几分钟的时间。现在您已拥有集群,可以创建 Docker 复合文件并部署该文件。

步骤 3:创建复合文件

在此步骤中,创建一个简单的 Docker 复合文件,此文件将创建包含 Web 服务器和 MySQL 数据库的 WordPress 应用程序。此时,Amazon ECS CLI 支持 Docker 复合文件语法版本 1 和 2。

Amazon ECS CLI 的复合文件中支持以下参数:

  • command

  • cpu_shares

  • dns

  • dns_search

  • entrypoint

  • environment:如果复合文件中未指定环境变量值,但该值存在于 shell 环境中,则 shell 环境变量值将传递到为任何关联的任务或服务创建的任务定义。

    重要

    建议不要对敏感信息 (如凭证数据) 使用纯文本环境变量。

  • env_file

    重要

    建议不要对敏感信息 (如凭证数据) 使用纯文本环境变量。

  • extra_hosts

  • hostname

  • image

  • labels

  • links

  • log_driver (仅限复合文件版本 1)

  • log_opt (仅限复合文件版本 1)

  • logging (仅限复合文件版本 2)

    • driver

    • options

  • mem_limit (以字节为单位)

  • mem_reservation (以字节为单位)

  • ports

  • privileged

  • read_only

  • security_opt

  • ulimits

  • user

  • volumes

  • volumes_from

  • working_dir

重要

此时不支持 build 指令。

有关 Docker 复合文件语法的更多信息,请参阅 Docker 文档中的复合文件参考

以下是复合文件,您可以对它称作 hello-world.yml。每个容器均有 100 个 CPU 单位和 500 MiB 内存。wordpress 容器将为容器实例开放端口 80 以便将流量传入 Web 服务器。还将定义容器的日志记录配置。

version: '2' services: wordpress: image: wordpress cpu_shares: 100 mem_limit: 524288000 ports: - "80:80" links: - mysql logging: driver: awslogs options: awslogs-group: tutorial-wordpress awslogs-region: us-east-1 awslogs-stream-prefix: wordpress mysql: image: mysql cpu_shares: 100 mem_limit: 524288000 environment: MYSQL_ROOT_PASSWORD: password logging: driver: awslogs options: awslogs-group: tutorial-mysql awslogs-region: us-east-1 awslogs-stream-prefix: mysql

步骤 4:将复合文件部署到集群

在创建复合文件后,您可以使用 ecs-cli compose up 命令将其部署到您的集群。默认情况下,此命令查找当前目录中的名为 docker-compose.yml 的文件,但您可以使用 --file 选项指定其他文件。默认情况下,通过此命令创建的资源具有标题中的当前目录,但您可以使用 --project-name project_name 选项覆盖该目录。--create-log-groups 选项将为容器日志创建 CloudWatch 日志组。

ecs-cli compose --file hello-world.yml up --create-log-groups

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

在部署复合文件后,您可以使用 ecs-cli ps 命令查看正在您的集群上运行的容器。

ecs-cli ps
Name State Ports TaskDefinition 340488e0-a307-4322-b41c-99f1b70e97f9/wordpress RUNNING 52.89.204.137:80->80/tcp ecscompose-docker-compose:2 340488e0-a307-4322-b41c-99f1b70e97f9/mysql RUNNING ecscompose-docker-compose:2

在上述示例中,您可以查看复合文件中的 wordpressmysql 容器以及 Web 服务器的 IP 地址和端口。如果将 Web 浏览器指向该地址,应会显示 WordPress 安装向导。

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

您可以使用 ecs-cli compose scale 命令向上扩展任务计数以便拥有应用程序的更多实例。在此示例中,您可以将应用程序的计数增至两个。

ecs-cli compose --file hello-world.yml scale 2

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

ecs-cli ps

输出:

Name State Ports TaskDefinition 340488e0-a307-4322-b41c-99f1b70e97f9/wordpress RUNNING 52.89.204.137:80->80/tcp ecscompose-docker-compose:2 340488e0-a307-4322-b41c-99f1b70e97f9/mysql RUNNING ecscompose-docker-compose:2 f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql RUNNING ecscompose-docker-compose:2 f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress RUNNING 52.89.205.89:80->80/tcp ecscompose-docker-compose:2

步骤 7:从复合文件创建 ECS 服务

现在,您已了解您的容器运行正常,可以确保容器在发生故障或停止时被替换。可以使用 ecs-cli compose service up 命令从复合文件创建服务来执行此操作。此命令从最新复合文件创建任务定义(如果任务定义不存在),并使用此任务定义创建预期计数为 1 的 ECS 服务。

在启动您的服务之前,请使用 ecs-cli compose down 命令从复合文件停止容器,以便有可使用的空集群。

ecs-cli compose --file hello-world.yml down

现在,您可以创建服务。

ecs-cli compose --file hello-world.yml service up

输出:

INFO[0000] Using ECS task definition TaskDefinition=ecscompose-docker-compose:2 INFO[0000] Created an ECS Service serviceName=ecscompose-service-docker-compose taskDefinition=ecscompose-docker-compose:2 INFO[0000] Updated ECS service successfully desiredCount=1 serviceName=ecscompose-service-docker-compose INFO[0000] Describe ECS Service status desiredCount=1 runningCount=0 serviceName=ecscompose-service-docker-compose INFO[0015] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=ecscompose-service-docker-compose

步骤 8:清除

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

ecs-cli compose --file hello-world.yml service rm

输出:

INFO[0000] Updated ECS service successfully desiredCount=0 serviceName=ecscompose-service-docker-compose INFO[0000] Describe ECS Service status desiredCount=0 runningCount=1 serviceName=ecscompose-service-docker-compose INFO[0015] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=ecscompose-service-docker-compose INFO[0015] Deleted ECS service service=ecscompose-service-docker-compose INFO[0015] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=ecscompose-service-docker-compose

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

ecs-cli down --force

输出:

INFO[0000] Waiting for your cluster resources to be deleted INFO[0000] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS INFO[0061] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS INFO[0121] Deleted cluster cluster=ecs-cli-demo