使用 EC2 任务创建集群 Amazon CLI - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 EC2 任务创建集群 Amazon CLI

以下步骤帮助您在 Amazon ECS 中使用 Amazon CLI 设置集群、注册任务定义、运行任务和执行其他常见方案。请确保您使用的是最新版本的 Amazon CLI。有关如何升级到最新版本的更多信息,请参阅安装 Amazon Command Line Interface

先决条件

本教程假设以下先决条件已完成:

步骤 1:创建集群

默认情况下,当您启动第一个容器实例时,您的账户将收到一个 default 集群。

注意

使用为您提供的 default 群集的好处是您不必在后续命令中指定 --cluster cluster_name 选项。如果您自行创建非默认集群,您必须为您打算用于该集群的每个命令指定 --cluster cluster_name

使用以下命令自行创建具有唯一名称的集群:

aws ecs create-cluster --cluster-name MyCluster

输出:

{ "cluster": { "clusterName": "MyCluster", "status": "ACTIVE", "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/MyCluster" } }

步骤 2:使用 Amazon ECS AMI 启动实例

您的集群中必须有一个 Amazon ECS 容器实例,您才能在该集群上运行任务。如果您的集群中没有任何容器实例,请参阅启动 Amazon ECS Linux 容器实例以了解更多信息。

第 3 步:列出容器实例

在启动您的容器实例后的几分钟内,Amazon ECS 代理将向您的默认集群注册该实例。您可以通过运行以下命令列出集群中的容器实例:

aws ecs list-container-instances --cluster default

输出:

{ "containerInstanceArns": [ "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_ID" ] }

第 4 步:描述容器实例

在拥有某个容器实例的 ARN 或 ID 后,您就可以使用 describe-container-instances 命令获取有关该实例的有价值的信息,例如剩余的和已注册的 CPU 和内存资源。

aws ecs describe-container-instances --cluster default --container-instances container_instance_ID

输出:

{ "failures": [], "containerInstances": [ { "status": "ACTIVE", "registeredResources": [ { "integerValue": 1024, "longValue": 0, "type": "INTEGER", "name": "CPU", "doubleValue": 0.0 }, { "integerValue": 995, "longValue": 0, "type": "INTEGER", "name": "MEMORY", "doubleValue": 0.0 }, { "name": "PORTS", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [ "22", "2376", "2375", "51678" ], "type": "STRINGSET", "integerValue": 0 }, { "name": "PORTS_UDP", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [], "type": "STRINGSET", "integerValue": 0 } ], "ec2InstanceId": "instance_id", "agentConnected": true, "containerInstanceArn": "arn:aws:ecs:us-west-2:aws_account_id:container-instance/container_instance_ID", "pendingTasksCount": 0, "remainingResources": [ { "integerValue": 1024, "longValue": 0, "type": "INTEGER", "name": "CPU", "doubleValue": 0.0 }, { "integerValue": 995, "longValue": 0, "type": "INTEGER", "name": "MEMORY", "doubleValue": 0.0 }, { "name": "PORTS", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [ "22", "2376", "2375", "51678" ], "type": "STRINGSET", "integerValue": 0 }, { "name": "PORTS_UDP", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [], "type": "STRINGSET", "integerValue": 0 } ], "runningTasksCount": 0, "attributes": [ { "name": "com.amazonaws.ecs.capability.privileged-container" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.17" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19" }, { "name": "com.amazonaws.ecs.capability.logging-driver.json-file" }, { "name": "com.amazonaws.ecs.capability.logging-driver.syslog" } ], "versionInfo": { "agentVersion": "1.5.0", "agentHash": "b197edd", "dockerVersion": "DockerVersion: 1.7.1" } } ] }

您也可以在 Amazon EC2 控制台中或使用 aws ec2 describe-instances --instance-id instance_id 命令查找可用于监控实例的 Amazon EC2 实例 ID。

第 5 步:注册任务定义

您必须先注册任务定义才能在 ECS 集群上运行任务。任务定义是分组在一起的一系列容器。以下示例是一个简单的任务定义,它将使用 Docker Hub 中的 busybox 映像并休眠 360 秒。有关可用任务定义参数的更多信息,请参阅 Amazon ECS 任务定义

{ "containerDefinitions": [ { "name": "sleep", "image": "busybox", "cpu": 10, "command": [ "sleep", "360" ], "memory": 10, "essential": true } ], "family": "sleep360" }

上面的示例 JSON 可以通过两种 Amazon CLI 方式传递给:您可以将任务定义 JSON 保存为文件,然后使用--cli-input-json file://path_to_file.json选项将其传递。您也可以对 JSON 中的引号进行转义并在命令行上传递 JSON 容器定义,如以下示例中所示。如果您选择在命令行上传递容器定义,您的命令还需要一个 --family 参数,该参数用于使任务定义的多个版本保持互相关联。

将 JSON 文件用于容器定义:

aws ecs register-task-definition --cli-input-json file://$HOME/tasks/sleep360.json

将 JSON 字符串用于容器定义:

aws ecs register-task-definition --family sleep360 --container-definitions "[{\"name\":\"sleep\",\"image\":\"busybox\",\"cpu\":10,\"command\":[\"sleep\",\"360\"],\"memory\":10,\"essential\":true}]"

register-task-definition 将在其完成注册后返回任务定义的说明。

{ "taskDefinition": { "volumes": [], "taskDefinitionArn": "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep360:1", "containerDefinitions": [ { "environment": [], "name": "sleep", "mountPoints": [], "image": "busybox", "cpu": 10, "portMappings": [], "command": [ "sleep", "360" ], "memory": 10, "essential": true, "volumesFrom": [] } ], "family": "sleep360", "revision": 1 } }

第 6 部:列出任务定义

您可以随时使用 list-task-definitions 命令列出您的账户的任务定义。此命令的输出将显示 familyrevision 值,您可以在调用 run-taskstart-task 时将这些值一起使用。

aws ecs list-task-definitions

输出:

{ "taskDefinitionArns": [ "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep300:1", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep300:2", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep360:1", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:3", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:4", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:5", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:6" ] }

第 7 步:运行任务

为您的账户注册任务并启用注册到您的集群的容器实例后,您可以在您的集群中运行已注册的任务。在本实例中,您将 sleep360:1 任务定义的单个实例放置在默认集群中。

aws ecs run-task --cluster default --task-definition sleep360:1 --count 1

输出:

{ "tasks": [ { "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "overrides": { "containerOverrides": [ { "name": "sleep" } ] }, "lastStatus": "PENDING", "containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_ID", "clusterArn": "arn:aws:ecs:us-east-1:aws_account_id:cluster/default", "desiredStatus": "RUNNING", "taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:1", "containers": [ { "containerArn": "arn:aws:ecs:us-east-1:aws_account_id:container/container_ID", "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "lastStatus": "PENDING", "name": "sleep" } ] } ] }

第 8 步:列出任务

列出您的集群的任务。您应看到您在上一部分中运行的任务。您可以选取从此命令返回的 ID 或完整 ARN 并在稍后将其用于描述任务。

aws ecs list-tasks --cluster default

输出:

{ "taskArns": [ "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID" ] }

第 9 步:描述正在运行的任务

使用之前检索到的任务 ID 描述任务,以获取有关任务的更多信息。

aws ecs describe-tasks --cluster default --task task_ID

输出:

{ "failures": [], "tasks": [ { "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "overrides": { "containerOverrides": [ { "name": "sleep" } ] }, "lastStatus": "RUNNING", "containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_ID", "clusterArn": "arn:aws:ecs:us-east-1:aws_account_id:cluster/default", "desiredStatus": "RUNNING", "taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:1", "containers": [ { "containerArn": "arn:aws:ecs:us-east-1:aws_account_id:container/container_ID", "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "lastStatus": "RUNNING", "name": "sleep", "networkBindings": [] } ] } ] }