Amazon Elastic Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon ECS CLI 教程

此简单教程说明了 Amazon ECS CLI 的几种不同的命令和功能。您必须先安装并配置 Amazon ECS CLI,然后才能启动此教程。有关更多信息,请参阅 安装 Amazon ECS CLI

步骤 1:创建您的集群

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

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

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

输出:


INFO[0000] Created cluster                               cluster=ecs-cli-demo
INFO[0000] Waiting for your cluster resources to be created
INFO[0001] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0061] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0121] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0182] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS

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

步骤 2:创建复合文件

在此步骤中,创建一个简单的 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 服务器。

Copy
version: '2' services: wordpress: image: wordpress cpu_shares: 100 mem_limit: 524288000 ports: - "80:80" links: - mysql mysql: image: mysql cpu_shares: 100 mem_limit: 524288000 environment: MYSQL_ROOT_PASSWORD: password

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

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

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

输出:

INFO[0000] Using ECS task definition                     TaskDefinition=ecscompose-docker-compose:2
INFO[0000] Starting container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress
INFO[0000] Starting container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-docker-compose:2
INFO[0054] Started container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0054] Started container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2

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

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

Copy
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 安装向导。

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

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

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

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

Copy
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

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

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

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

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

输出:

INFO[0000] Stopping container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress
INFO[0000] Stopping container...                         container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql
INFO[0000] Stopping container...                         container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql
INFO[0000] Stopping container...                         container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress
INFO[0000] Describe ECS container status                 container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0000] Describe ECS container status                 container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=STOPPED lastStatus=RUNNING taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/wordpress desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=340488e0-a307-4322-b41c-99f1b70e97f9/mysql desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2
INFO[0006] Stopped container...                          container=f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress desiredStatus=STOPPED lastStatus=STOPPED taskDefinition=ecscompose-docker-compose:2

现在,您可以创建服务。

Copy
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

步骤 7:清除

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

Copy
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 创建的资源。

Copy
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