チュートリアル: AWS CLI を使用して Fargate タスクのクラスターを作成する - Amazon Elastic Container Service

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

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

前提条件

このチュートリアルでは、以下の前提条件をすでに満たしているものとします。

ステップ 1: クラスターを作成する

デフォルトでは、アカウントは default クラスターを受け取ります。

注記

お客様に提供される default クラスターを使用する利点は、後続のコマンドで --cluster cluster_name オプションを指定する必要がないことです。デフォルト以外の独自のクラスターを作成する場合は、そのクラスターで使用する予定のコマンドごとに --cluster cluster_name を指定する必要があります。

以下のコマンドを使用して、一意の名前を付けた独自のクラスターを作成します。

aws ecs create-cluster --cluster-name fargate-cluster

出力:

{ "cluster": { "status": "ACTIVE", "statistics": [], "clusterName": "fargate-cluster", "registeredContainerInstancesCount": 0, "pendingTasksCount": 0, "runningTasksCount": 0, "activeServicesCount": 0, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/fargate-cluster" } }

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

ECS クラスターでタスクを実行する前に、タスク定義を登録する必要があります。タスク定義とは、1 つにグループ化されたコンテナのリストです。以下の例は、Docker Hub でホストされている httpd コンテナイメージを使用して PHP ウェブアプリケーションを作成するシンプルなタスク定義です。使用できるタスク定義パラメータの詳細については、「Amazon ECS タスク定義」を参照してください。

{ "family": "sample-fargate", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "fargate-app", "image": "httpd:2.4", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512" }

上の JSON 例は次の 2 通りの方法で AWS CLI に渡すことができます。1 番目はタスク定義 JSON をファイルとして保存し、--cli-input-json file://path_to_file.json オプションで渡すことができます。2 番目は、以下の例のように、JSON の引用符をエスケープして JSON コンテナの定義をコマンドラインで渡すことができます。コマンドラインにコンテナ定義を渡す方法を選択した場合、追加で複数のバージョンのタスクを相互に関連付けたままにする --family パラメータが必要です。

コンテナの定義に JSON ファイルを使用するには。

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

register-task-definition コマンドによって、タスク定義の登録が完了した後、その定義の説明が返されます。

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

list-task-definitions コマンドを使用して、いつでもアカウントのタスク定義をリスト表示できます。このコマンドの出力は、run-task または start-task をコールするときに一緒に使用する、family 値および revision 値を表示します。

aws ecs list-task-definitions

出力:

{ "taskDefinitionArns": [ "arn:aws:ecs:region:aws_account_id:task-definition/sample-fargate:1" ] }

ステップ 4: サービスを作成する

アカウントのタスクを登録したら、クラスターに登録されたタスク用のサービスを作成することができます。この例では、sample-fargate:1 タスク定義の 1 つのインスタンスを使用して、クラスターで実行されるサービスを作成します。このタスクにはインターネットへのルートが必要であり、そのために 2 つの方法のいずれかを使用します。1 つの方法は、パブリックサブネットに Elastic IP アドレスを持つ NAT ゲートウェイで構成されたプライベートサブネットを使用することです。もう 1 つの方法は、パブリックサブネットを使用してパブリック IP アドレスをタスクに割り当てることです。両方の例を以下に示します。

プライベートサブネットを使用した例。

aws ecs create-service --cluster fargate-cluster --service-name fargate-service --task-definition sample-fargate:1 --desired-count 1 --launch-type "FARGATE" --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234]}"

パブリックサブネットを使用した例。

aws ecs create-service --cluster fargate-cluster --service-name fargate-service --task-definition sample-fargate:1 --desired-count 1 --launch-type "FARGATE" --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234],assignPublicIp=ENABLED}"

create-service コマンドによって、タスク定義の登録が完了した後、その定義の説明が返されます。

ステップ 5: サービスをリスト表示する

クラスターのサービスをリスト表示します。前のセクションで作成したサービスが表示されます。このコマンドでサービス名または完全 ARN を取得できます。これを後で説明するサービスに使用します。

aws ecs list-services --cluster fargate-cluster

出力:

{ "serviceArns": [ "arn:aws:ecs:region:aws_account_id:service/fargate-service" ] }

ステップ 6: 実行中のサービスを記述する

先に取得したサービス名を使用してタスクを記述し、サービスに関する詳細情報を取得します。

aws ecs describe-services --cluster fargate-cluster --services fargate-service

このコマンドが正常に実行されると、サービスの障害とサービスの説明が返されます。たとえば、サービスセクションでは、タスクの実行中または保留中のステータスなど、デプロイに関する情報が見つかります。また、タスク定義、ネットワーク設定、タイムスタンプ付きのイベントに関する情報も見つかります。障害セクションでは、呼び出しに関連する障害がある場合にその情報が見つかります。トラブルシューティングについては、「サービスイベントメッセージ」を参照してください。サービスの説明取得の詳細については、「サービスの説明取得」を参照してください。インスタンスがパブリックサブネットで起動された場合、AWS CLI コマンド list-tasks を使用してウェブサイトのパブリック IP アドレスを取得するためのコマンド describe-tasks に必要なタスク ID を取得することで、インターネットからサービスタスクを表示できます。

{ "services": [ { "status": "ACTIVE", "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/sample-fargate:1", "pendingCount": 2, "launchType": "FARGATE", "loadBalancers": [], "roleArn": "arn:aws:iam::aws_account_id:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS", "placementConstraints": [], "createdAt": 1510811361.128, "desiredCount": 2, "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "DISABLED" } }, "platformVersion": "LATEST", "serviceName": "fargate-service", "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/fargate-cluster", "serviceArn": "arn:aws:ecs:region:aws_account_id:service/fargate-service", "deploymentConfiguration": { "maximumPercent": 200, "minimumHealthyPercent": 100 }, "deployments": [ { "status": "PRIMARY", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "DISABLED" } }, "pendingCount": 2, "launchType": "FARGATE", "createdAt": 1510811361.128, "desiredCount": 2, "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/sample-fargate:1", "updatedAt": 1510811361.128, "platformVersion": "0.0.1", "id": "ecs-svc/9223370526043414679", "runningCount": 0 } ], "events": [ { "message": "(service fargate-service) has started 2 tasks: (task 53c0de40-ea3b-489f-a352-623bf1235f08) (task d0aec985-901b-488f-9fb4-61b991b332a3).", "id": "92b8443e-67fb-4886-880c-07e73383ea83", "createdAt": 1510811841.408 }, { "message": "(service fargate-service) has started 2 tasks: (task b4911bee-7203-4113-99d4-e89ba457c626) (task cc5853e3-6e2d-4678-8312-74f8a7d76474).", "id": "d85c6ec6-a693-43b3-904a-a997e1fc844d", "createdAt": 1510811601.938 }, { "message": "(service fargate-service) has started 2 tasks: (task cba86182-52bf-42d7-9df8-b744699e6cfc) (task f4c1ad74-a5c6-4620-90cf-2aff118df5fc).", "id": "095703e1-0ca3-4379-a7c8-c0f1b8b95ace", "createdAt": 1510811364.691 } ], "runningCount": 0, "placementStrategy": [] } ], "failures": [] }

ステップ 7: クリーンアップ

このチュートリアルが終了したら、未使用のリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。

サービスを削除します。

aws ecs delete-service --cluster fargate-cluster --service fargate-service --force

クラスターを削除します。

aws ecs delete-cluster --cluster fargate-cluster