Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

チュートリアル: AWS CLI を使用して EC2 タスクのクラスターを作成する

次のステップでは、AWS CLI を使用した、Amazon ECS でのクラスターのセットアップ、タスク定義の登録、タスクの実行、そのほかの一般的なシナリオの実行を説明します。AWS CLI の最新バージョンを利用していることを確認してください。最新バージョンへのアップグレード方法の詳細については、「AWS コマンドラインインターフェイスのインストール」を参照してください。

前提条件

ステップ 1: (オプション) クラスターを作成する

ステップ 2: Amazon ECS AMI を使用してインスタンスを起動する

ステップ 3: コンテナインスタンスをリスト表示する

ステップ 4: コンテナインスタンスを記述する

ステップ 5: タスク定義を登録する

ステップ 6: タスク定義をリスト表示する

ステップ 7: タスクを実行する

ステップ 8: タスクのリスト表示

ステップ 9: 実行中のタスクを記述する

前提条件

このチュートリアルでは、以下の前提条件が完了済みであることを前提としています。

ステップ 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 コンテナインスタンスの起動」で詳細を参照してください。

参考までに、現在のリージョン別の Amazon ECS-optimized Amazon Linux AMI ID を以下に示します。

リージョン AMI 名 AMI ID EC2 コンソールリンク
us-east-2 amzn-ami-2018.03.i-amazon-ecs-optimized ami-0307f7ccf6ea35750 インスタンスを起動する
us-east-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-045f1b3f87ed83659 インスタンスを起動する
us-west-2 amzn-ami-2018.03.i-amazon-ecs-optimized ami-01b70aea4161476b7 インスタンスを起動する
us-west-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-0285183bbef6224bd インスタンスを起動する
eu-west-3 amzn-ami-2018.03.i-amazon-ecs-optimized ami-0f4738fbeb53e6c3a インスタンスを起動する
eu-west-2 amzn-ami-2018.03.i-amazon-ecs-optimized ami-01bee3897bba49d78 インスタンスを起動する
eu-west-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-0627e141ce928067c インスタンスを起動する
eu-central-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-0eaa3baf6969912ba インスタンスを起動する
ap-northeast-2 amzn-ami-2018.03.i-amazon-ecs-optimized ami-00294948a592fc052 インスタンスを起動する
ap-northeast-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-05b296a384694dfa4 インスタンスを起動する
ap-southeast-2 amzn-ami-2018.03.i-amazon-ecs-optimized ami-02c73ee1100ce3e7a インスタンスを起動する
ap-southeast-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-050865a806e0dae53 インスタンスを起動する
ca-central-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-0f552e0a86f08b660 インスタンスを起動する
ap-south-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-01ef9f6a829ae3956 インスタンスを起動する
sa-east-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-084b1eee100c102ee インスタンスを起動する
us-gov-west-1 amzn-ami-2018.03.i-amazon-ecs-optimized ami-1dafcb7c インスタンスを起動する

ステップ 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 クラスターでタスクを実行する前に、タスク定義を登録する必要があります。タスク定義とは、1 つにグループ化されたコンテナのリストです。次の例は、Docker Hub から取得した busybox イメージを使用し、360 秒間スリープ状態になるシンプルなタスク定義です。使用できるタスク定義パラメータの詳細については、

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

上記の例の JSON は 2 つの方法で AWS 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 コマンドを使用して、いつでもアカウントのタスク定義をリスト表示できます。このコマンドの出力は、familyrun-taskrevision または start-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": [] } ] } ] }