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

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

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

前提条件

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

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

Amazon ECS コンテナエージェントはユーザーに代わって AWS API を呼び出すため、エージェントがユーザーに属していることをサービスに伝えるために、IAM ポリシーおよびロールが必要です。この IAM ロールは、タスク実行 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-west-2 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json
  3. タスク実行ロールのポリシーをアタッチします。

    aws iam --region us-west-2 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 --default-launch-type FARGATE --config-name tutorial --region us-west-2
  2. アクセスキーとシークレットキーを使用して CLI プロファイルを作成します。

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

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

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

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

    ecs-cli up --cluster-config tutorial --ecs-profile tutorial-profile

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

  2. AWS CLI を使用して、VPC のデフォルトのセキュリティグループ ID を取得します。前の出力の VPC ID を使用します。

    aws ec2 describe-security-groups --filters Name=vpc-id,Values=VPC_ID --region us-west-2

    このコマンドの出力には、次のステップで使用するセキュリティグループ 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 --region us-west-2

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

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

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

version: '3' services: web: image: amazon/amazon-ecs-sample ports: - "80:80" logging: driver: awslogs options: awslogs-group: tutorial awslogs-region: us-west-2 awslogs-stream-prefix: web

注記

アカウントに us-west-2 リージョンの CloudWatch Logs tutorial という名前のロググループが既に含まれている場合は、一意の名前を選択して、ECS CLI がこのチュートリアルの新しいロググループを作成します。

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 --ecs-profile tutorial-profile

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

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

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

出力:

Name                                           State    Ports                     TaskDefinition  Health
tutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web  RUNNING  34.222.202.55:80->80/tcp  tutorial:1      UNKNOWN

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

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

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

ecs-cli logs --task-id 0c2862e6e39e4eff92ca3e4f843c5b9a --follow --cluster-config tutorial --ecs-profile tutorial-profile

注記

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

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

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

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

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

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

出力:

Name                                           State    Ports                      TaskDefinition  Health
tutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web  RUNNING  34.222.202.55:80->80/tcp   tutorial:1      UNKNOWN
tutorial/d9fbbc931d2e47ae928fcf433041648f/web  RUNNING  34.220.230.191:80->80/tcp  tutorial:1      UNKNOWN

ステップ 9: (オプション) ウェブアプリケーションを表示する

ウェブブラウザにタスクの IP アドレスを入力すると、シンプルな PHP App ウェブアプリケーションを表示するウェブページが表示されます。

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

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

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

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

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