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

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

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

前提条件

続行する前に、次の前提条件を満たしている必要があります。

ステップ 1: ECS CLI を設定する

このチュートリアルを開始するまえに、Amazon ECS CLI をインストールして設定する必要があります。詳細については、「Amazon ECS CLI のインストール」を参照してください。

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

ECS CLI 設定を作成するには

  1. クラスター設定を作成します。

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

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

    注記

    ECS CLI を初めて設定する場合は、これらの設定がデフォルトとしてマークされています。それ以外の場合は、「ecs-cli configure default」および「ecs-cli configure profile default」を参照して、これをデフォルト設定およびプロファイルとして設定します。

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

最初に行うアクションは、ecs-cli up コマンドを使用してコンテナを起動する Amazon ECS コンテナインスタンスのクラスターを作成することです。このコマンドでクラスターを設定する際に選択できるオプションはいろいろありますが、ほとんどは任意です。この例では、SSH アクセス用の id_rsa キーペア (お客様のキーペアに置き換えてください) を使用する 2 つの t2.medium コンテナインスタンスの簡単なクラスターを作成します。

デフォルトでは、コンテナインスタンス用に作成するセキュリティグループはインバウンドトラフィック用にポート 80 を開きます。--port オプションを使用して異なるポートを指定して開くか、より複雑なセキュリティグループが必要な場合は、--security-group オプションを使用して既存のセキュリティグループを使用するように指定できます。

ecs-cli up --keypair id_rsa --capability-iam --size 2 --instance-type t2.medium --cluster-config ec2-tutorial

このコマンドは、リソースが作成されるため、完了までに数分かかる場合があります。これでクラスターができたので、Docker 構成ファイルを作成してデプロイできます。

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

このステップでは、ウェブサーバーおよび MySQL データベースで構成される WordPress アプリケーションを作成するシンプルな Docker 構成ファイルを作成します。現時点で、Amazon ECS CLI では、Docker Compose ファイル構文のバージョン 1、2、3 がサポートされています。ここでは、Docker Compose バージョン 2 と 3 の両方の例を示しています。

以下のパラメーターが、Amazon ECS CLI 用の構成ファイルでサポートされています。

  • cap_add (Fargate 起動タイプを使用するタスクでは無効)

  • cap_drop (Fargate 起動タイプを使用するタスクでは無効)

  • command

  • cpu_shares

    注記

    Compose バージョン 3 形式を使用している場合、cpu_shares は、ecs-params.yml で指定する必要があります。file. 詳細については、「Amazon ECS パラメータの使用」を参照してください。

  • devices (Fargate 起動タイプを使用するタスクでは無効)

  • dns

  • dns_search

  • entrypoint

  • environment: 構成ファイルで環境変数値が指定されていないが、シェル環境に存在する場合、シェル環境変数値が、関連付けられたタスクまたはサービス用に作成されたタスク定義に渡されます。

    重要

    認証情報データなどの機密情報にプレーンテキストの環境変数を使用することはお勧めしません。

  • env_file

    重要

    認証情報データなどの機密情報にプレーンテキストの環境変数を使用することはお勧めしません。

  • extra_hosts

  • healthcheck (構成ファイルバージョン 3 のみ)

    注記

    start_period フィールドは構成ファイルの使用をサポートしていません。start_period を指定するには、ecs-params.yml を使用します。file. 詳細については、「Amazon ECS パラメータの使用」を参照してください。

  • hostname

  • image

  • labels

  • links (Fargate 起動タイプを使用するタスクでは無効)

  • log_driver (構成ファイルバージョン 1 のみ)

  • log_opt (構成ファイルバージョン 1 のみ)

  • logging (構成ファイルバージョン 2 および 3)

    • driver

    • options

  • mem_limit (バイト単位)

    注記

    Compose バージョン 3 形式を使用している場合、mem_limit は、ecs-params.yml で指定する必要があります。file. 詳細については、「Amazon ECS パラメータの使用」を参照してください。

  • mem_reservation (バイト単位)

    注記

    Compose バージョン 3 形式を使用している場合、mem_reservation は、ecs-params.yml で指定する必要があります。file. 詳細については、「Amazon ECS パラメータの使用」を参照してください。

  • ports

  • privileged (Fargate 起動タイプを使用するタスクでは無効)

  • read_only

  • security_opt

  • shm_size (構成ファイルバージョン 1 および 2 のみで、Fargate 起動タイプを使用するタスクには無効です)

  • tmpfs (Fargate 起動タイプを使用するタスクでは無効)

  • ulimits

  • user

  • volumes

  • volumes_from (構成ファイルバージョン 1 および 2 のみ)

  • working_dir

重要

build ディレクティブは現在サポートされていません。

Docker 構成ファイル構文の詳細については、Docker ドキュメントの構成ファイルのリファレンスを参照してください。

これが docker-compose.yml という構成ファイルです。各コンテナには 100 CPU ユニットおよび 500 MiB のメモリがあります。wordpress コンテナはウェブサーバーへのインバウンドトラフィックようにポート 80 を開いてコンテナインスタンスに接続します。コンテナのログ記録設定も定義されます。

例 1: Docker Compose バージョン 2

version: '2' services: wordpress: image: wordpress cpu_shares: 100 mem_limit: 524288000 ports: - "80:80" links: - mysql logging: driver: awslogs options: awslogs-group: tutorial-wordpress awslogs-region: us-east-1 awslogs-stream-prefix: wordpress mysql: image: mysql:5.7 cpu_shares: 100 mem_limit: 524288000 environment: MYSQL_ROOT_PASSWORD: password logging: driver: awslogs options: awslogs-group: tutorial-mysql awslogs-region: us-east-1 awslogs-stream-prefix: mysql

例 2: Docker Compose バージョン 3

version: '3' services: wordpress: image: wordpress ports: - "80:80" links: - mysql logging: driver: awslogs options: awslogs-group: tutorial-wordpress awslogs-region: us-east-1 awslogs-stream-prefix: wordpress mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password logging: driver: awslogs options: awslogs-group: tutorial-mysql awslogs-region: us-east-1 awslogs-stream-prefix: mysql

Docker Compose バージョン 3 形式を使用する場合は、CPU とメモリの仕様を別々に指定する必要があります。以下の内容で ecs-params.yml という名前のファイルを作成します。

version: 1 task_definition: services: wordpress: cpu_shares: 100 mem_limit: 524288000 mysql: cpu_shares: 100 mem_limit: 524288000

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

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

ecs-cli compose up --create-log-groups --cluster-config ec2-tutorial

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

設定ファイルをデプロイした後は、ecs-cli ps コマンドを使用してクラスターで実行されているコンテナを確認できます。

ecs-cli ps
Name State Ports TaskDefinition 340488e0-a307-4322-b41c-99f1b70e97f9/wordpress RUNNING 52.89.204.137:80->80/tcp ecscompose-docker-compose:2 340488e0-a307-4322-b41c-99f1b70e97f9/mysql RUNNING ecscompose-docker-compose:2

上記の例では、構成ファイルから wordpress および mysql コンテナ、およびウェブサーバーの IP アドレスとポートを確認できます。ウェブブラウザでそのアドレスを指定すると、WordPress インストールウィザードが表示されます。

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

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

ecs-cli compose --file hello-world.yml scale 2 --cluster-config ec2-tutorial

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

ecs-cli ps --cluster-config ec2-tutorial

出力:

Name State Ports TaskDefinition 340488e0-a307-4322-b41c-99f1b70e97f9/wordpress RUNNING 52.89.204.137:80->80/tcp ecscompose-docker-compose:2 340488e0-a307-4322-b41c-99f1b70e97f9/mysql RUNNING ecscompose-docker-compose:2 f80d82d5-3724-4f2f-86b1-5ee5891ce995/mysql RUNNING ecscompose-docker-compose:2 f80d82d5-3724-4f2f-86b1-5ee5891ce995/wordpress RUNNING 52.89.205.89:80->80/tcp ecscompose-docker-compose:2

ステップ 7: 設定ファイルから ECS サービスを作成する

これで、コンテナが正常に動作し、障害が発生したり停止した場合は置き換えられることを確認できました。ecs-cli compose service up コマンドを使用して構成ファイルからサービスを作成することで、これを実行できます。このコマンドは、最新の構成ファイルからタスク定義を作成し (まだ存在しない場合)、それを使用して、必要な数を 1 とする ECS サービスを作成します。

サービスを開始する前に、ecs-cli compose down コマンドを使用しておく製ファイルからコンテナを停止し、作業するクラスターを空にします。

ecs-cli compose --file hello-world.yml down --cluster-config ec2-tutorial

これでサービスを作成できるようになります。

ecs-cli compose --file hello-world.yml service up --cluster-config ec2-tutorial

出力:

INFO[0000] Using ECS task definition TaskDefinition=ecscompose-docker-compose:2 INFO[0000] Created an ECS Service serviceName=ecscompose-service-docker-compose taskDefinition=ecscompose-docker-compose:2 INFO[0000] Updated ECS service successfully desiredCount=1 serviceName=ecscompose-service-docker-compose INFO[0000] Describe ECS Service status desiredCount=1 runningCount=0 serviceName=ecscompose-service-docker-compose INFO[0015] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=ecscompose-service-docker-compose

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

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

ecs-cli compose --file hello-world.yml service rm --cluster-config ec2-tutorial

出力:

INFO[0000] Updated ECS service successfully desiredCount=0 serviceName=ecscompose-service-docker-compose INFO[0000] Describe ECS Service status desiredCount=0 runningCount=1 serviceName=ecscompose-service-docker-compose INFO[0015] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=ecscompose-service-docker-compose INFO[0015] Deleted ECS service service=ecscompose-service-docker-compose INFO[0015] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=ecscompose-service-docker-compose

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

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

出力:

INFO[0000] Waiting for your cluster resources to be deleted INFO[0000] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS INFO[0061] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS INFO[0121] Deleted cluster cluster=ecs-cli-demo