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

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

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

先决条件

完成以下先决任务:

步骤 1:配置 Amazon ECS CLI

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

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

创建 Amazon 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 tutorial-profile

    注意

    如果这是您首次配置 Amazon ECS CLI,则这些配置将被标记为默认值。如果这不是您首次配置 Amazon 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 --cluster-config ec2-tutorial --ecs-profile tutorial-profile

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

步骤 3:创建复合文件

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

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 文档中的复合文件参考

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

示例 1:Docker Compose 版本 2

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:5.7 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

示例 2:Docker Compose 版本 3

version: '3' services: wordpress: image: wordpress 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:5.7 environment: MYSQL_ROOT_PASSWORD: password logging: driver: awslogs options: awslogs-group: tutorial-mysql awslogs-region: us-east-1 awslogs-stream-prefix: mysql

当使用 Docker Compose 版本 3 格式时,必须分别指定 CPU 和内存规格。使用以下内容创建名为 ecs-params.yml 的文件:

version: 1 task_definition: services: wordpress: cpu_shares: 100 mem_limit: 524288000 mysql: cpu_shares: 100 mem_limit: 524288000

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

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

ecs-cli compose up --create-log-groups --cluster-config ec2-tutorial --ecs-profile tutorial-profile

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

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

ecs-cli ps --cluster-config ec2-tutorial --ecs-profile tutorial-profile

输出:

Name State Ports TaskDefinition Health ec2-tutorial/4a5c3162979b4df6b44d2f4e6b1dd3e5/wordpress RUNNING 18.205.157.201:80->80/tcp ecscompose:3 UNKNOWN ec2-tutorial/4a5c3162979b4df6b44d2f4e6b1dd3e5/mysql RUNNING ecscompose:3 UNKNOWN

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

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

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

ecs-cli compose scale 2 --cluster-config ec2-tutorial --ecs-profile tutorial-profile

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

ecs-cli ps --cluster-config ec2-tutorial --ecs-profile tutorial-profile

输出:

Name State Ports TaskDefinition Health ec2-tutorial/4a5c3162979b4df6b44d2f4e6b1dd3e5/wordpress RUNNING 18.205.157.201:80->80/tcp ecscompose:3 UNKNOWN ec2-tutorial/4a5c3162979b4df6b44d2f4e6b1dd3e5/mysql RUNNING ecscompose:3 UNKNOWN ec2-tutorial/da60d89e74474a2691d26ef5f9ba5a16/mysql RUNNING ecscompose:3 UNKNOWN ec2-tutorial/da60d89e74474a2691d26ef5f9ba5a16/wordpress RUNNING 34.232.105.149:80->80/tcp ecscompose:3 UNKNOWN

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

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

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

ecs-cli compose down --cluster-config ec2-tutorial --ecs-profile tutorial-profile

现在,您可以创建服务。

ecs-cli compose service up --cluster-config ec2-tutorial --ecs-profile tutorial-profile

步骤 8:清除

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

ecs-cli compose service rm --cluster-config ec2-tutorial --ecs-profile tutorial-profile

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

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