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

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

このチュートリアルでは、Fargate 起動タイプを使用してクラスターをセットアップし、タスクをデプロイする方法を示します。

前提条件

以下の前提条件を満たしてください。

ステップ 1: タスク実行 IAM ロールを作成する

Amazon ECS には、Fargate タスクが CloudWatch にログを保存できるアクセス許可が必要です。このアクセス権限は、タスク実行 IAM ロールに含まれます。詳細については、「Amazon ECS タスク実行 IAM ロール」を参照してください。

AWS CLI を使用して IAM のタスク実行ロールを作成するには

  1. 次の内容で、task-execution-assume-role.json というファイルを作成します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. タスク実行ロールを作成する

    aws iam --region us-east-1 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json
  3. タスク実行ロールのポリシーをアタッチします。

    aws iam --region us-east-1 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

ステップ 2: Amazon ECS CLI; の設定

Amazon ECS CLI では、ユーザーに代わって API リクエストを作成するために認証情報が必要です。これは、環境変数、AWS プロファイル、または Amazon ECS プロファイルから認証情報をプルできます。詳細については、「Amazon ECS CLI の設定」を参照してください。

Amazon ECS CLI 設定を作成するには

  1. クラスター設定を作成します。これは、使用する AWS リージョン、リソース作成プレフィックス、Amazon ECS CLI で使用するクラスター名を定義します。

    ecs-cli configure --cluster tutorial --region us-east-1 --default-launch-type FARGATE --config-name tutorial
  2. アクセスキーとシークレットキーを使用して CLI プロファイルを作成します。

    ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name tutorial

    注記

    Amazon ECS CLI を初めて設定する場合は、これらの設定がデフォルトとしてマークされています。Amazon ECS CLI をすでに設定している場合は、Amazon Elastic Container Service Developer Guide の「Amazon ECS コマンドラインリファレンス」を参照して、これをデフォルト設定およびプロファイルとして設定します。

ステップ 3: クラスターとセキュリティグループを作成する

ECS クラスターとセキュリティグループを作成するには

  1. ecs-cli up コマンドを使用して Amazon ECS クラスターを作成します。クラスター設定で Fargate をデフォルトの起動タイプとして設定したため、このコマンドは空のクラスターと 2 つのパブリックサブネットで構成された VPC を作成します。

    ecs-cli up

    注記

    このコマンドは、リソースが作成されるため、完了までに数分かかる場合があります。作成された VPC とサブネットの ID を記録しておきます。これらの ID は後で使用します。

  2. AWS CLI を使用して、前の出力からの VPC ID を使用してセキュリティグループを作成します。

    aws ec2 create-security-group --group-name "my-sg" --description "My security group" --vpc-id "VPC_ID"
  3. AWS CLI を使用してセキュリティグループルールを追加し、ポート 80 でインバウンドアクセスを許可します。

    aws ec2 authorize-security-group-ingress --group-id "security_group_id" --protocol tcp --port 80 --cidr 0.0.0.0/0

ステップ 4: 構成ファイルを作成する

このステップでは、WordPress アプリケーションを作成するシンプルな Docker 構成ファイルを作成します。現時点で、Amazon ECS CLI では、Docker 構成ファイル構文 のバージョン 1、2、3 がサポートされています。このチュートリアルでは、Docker Compose v3 を使用します。

以下に示しているのが compose ファイルであり、docker-compose.yml という名前を付けています。wordpress コンテナはウェブサーバーへのインバウンドトラフィック用にポート 80 を開きます。また、前に作成した CloudWatch ロググループに移動するようにコンテナログを設定します。これは Fargate タスクに推奨されるベストプラクティスです。

version: '3' services: wordpress: image: wordpress ports: - "80:80" logging: driver: awslogs options: awslogs-group: tutorial awslogs-region: us-east-1 awslogs-stream-prefix: wordpress

Docker Compose の情報に加えて、サービスに指定する必要のある Amazon ECS 固有のパラメータがいくつかあります。前のステップの VPC、サブネット、およびセキュリティグループ ID を使用して、以下の内容とともに ecs-params.yml という名前のファイルを作成します。

version: 1 task_definition: task_execution_role: ecsTaskExecutionRole ecs_network_mode: awsvpc task_size: mem_limit: 0.5GB cpu_limit: 256 run_params: network_configuration: awsvpc_configuration: subnets: - "subnet ID 1" - "subnet ID 2" security_groups: - "security group ID" assign_public_ip: ENABLED

ステップ 5: クラスターに設定ファイルをデプロイする

構成ファイルを作成した後は、ecs-cli compose service up を使用してクラスターにデプロイできます。デフォルトでは、コマンドは現在のディレクトリで docker-compose.yml および ecs-params.yml というファイルを検索します。--file オプションを使用して別の Docker 構成ファイルを指定することや、--ecs-params オプションを使用して別の ECS Params ファイルを指定することができます。デフォルトでは、このコマンドで作成されたリソースはタイトルに現在のディレクトリが入っています。ただし、--project-name オプションを使用してこれを上書きできます。--create-log-groups オプションはコンテナログの CloudWatch ロググループを作成します。

ecs-cli compose --project-name tutorial service up --create-log-groups --cluster-config tutorial

ステップ 6: クラスターの実行中のコンテナを確認する

構成ファイルをデプロイした後は、ecs-cli compose service ps を使用してサービスで実行されているコンテナを確認できます。

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial

出力:

WARN[0000] Skipping unsupported YAML option...           option name=networks
WARN[0000] Skipping unsupported YAML option for service...  option name=networks service name=wordpress
Name                                            State    Ports TaskDefinition
a06a6642-12c5-4006-b1d1-033994580605/wordpress  RUNNING  54.146.193.73:80->80/tcp  tutorial:9

上記の例では、構成ファイルから wordpress コンテナ、およびウェブサーバーの IP アドレスとポートを確認できます。ウェブブラウザでそのアドレスを指定すると、WordPress インストールウィザードが表示されます。また、出力にはコンテナの task-id 値も含まれています。次のステップで使用するため、タスク ID をコピーします。

ステップ 7: コンテナログを表示する

タスクのログを表示します。

ecs-cli logs --task-id a06a6642-12c5-4006-b1d1-033994580605 --follow --cluster-config tutorial

注記

この --follow オプションは Amazon ECS CLI にログの継続的なポーリングを指示します。

ステップ 8: クラスターのタスクをスケーリングする

ecs-cli compose service scale を使用してタスクの数をスケールアップし、アプリケーションのインスタンス数を増やすことができます。この例では、アプリケーションの実行数を 2 に増やします。

ecs-cli compose --project-name tutorial service scale 2 --cluster-config tutorial

これでクラスターにさらに 2 つのコンテナが表示されます。

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial

出力:

WARN[0000] Skipping unsupported YAML option...           option name=networks
WARN[0000] Skipping unsupported YAML option for service...  option name=networks service name=wordpress
Name                                            State    Ports        TaskDefinition
880f09ed-613d-44bf-99bb-42ca44f82904/wordpress  RUNNING  34.224.60.24:80->80/tcp   tutorial:9
a06a6642-12c5-4006-b1d1-033994580/wordpress  RUNNING  54.146.193.73:80->80/tcp  tutorial:9

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

このチュートリアルを完了したら、余分な請求が発生しないようにリソースをクリーンアップします。まず、既存のコンテナを停止させてそれ以降のタスクを実行しないように、サービスを削除します。

ecs-cli compose --project-name tutorial service down --cluster-config tutorial

次に、クラスターを停止します。こうすることで、前に ecs-cli up コマンドで作成したリソースをクリーンアップします。

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