サポート > Wagby Developer Network(R8) > サーバの運用 > ECS環境でTomcatを実行する

Amazon Elastic Container Service (ECS) は Docker コンテナをサポートします。Docker 対応アプリケーションの起動や終了をはじめとするさまざまな管理を行うことができます。

Amazon Elastic Container Service (ECS) を使って、コンテナ化された Wagby アプリケーションを本番環境で実行することができます。

公式サイト https://aws.amazon.com/jp/ecs/

このページでは、コマンドラインインタフェース (CLI) を使った ECS の利用方法を説明します。

本ページは2018年12月時点の内容にもとづいています。利用した Wagby のバージョンは R8.1.2 で、Windows OS を用いています。Windows OS 以外の環境をご利用の場合でも、このページに記載されたコマンドはご利用いただけます。

はじめに Amazon Web Service (AWS) の環境をコマンドラインで操作するための Command Line Interface (CLI) ツールのダウンロードとインストールを行います。次のページに記載の手順に従ってください。

インストール後、バージョン番号が適切に表示されるかどうかを確認します。

C:\Wagby-8.1.2>aws --version
aws-cli/1.16.72 Python/3.6.0 Windows/10 botocore/1.12.62

設定

次のページに記載の手順に従い、AWS CLI の設定を行います。

具体的には管理者のAccess Key と Secret Access Key を指定します。

C:\Wagby-8.1.2>aws configure --profile admin

Access Key と Secret Access Key を入力します。ここではリージョン(region)および出力フォーマット(output format)はそれぞれ "ap-northeast-1" と "json" とします。"ap-northeast-1"はアジアパシフィック (東京)となります。

AWS Access Key ID [None]: XXXX
AWS Secret Access Key [None]: XXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

次に Amazon Elastic Container Service (ECS) の環境をコマンドラインで操作するための CLI ツールのダウンロードとインストールを行います。今回はコンテナを利用するため、ECS のためのコマンドセットもインストールする必要があります。次のページに記載の手順に従ってください。

インストール後、バージョン番号が適切に表示されるかどうかを確認します。

C:\Wagby-8.1.2>ecs-cli --version
ecs-cli version 1.12.0 (049e13d)
図1 ecs-cli --version コマンドの実行例

設定

次のページに記載の手順に従い、ECS CLI のプロファイル設定を行います。

C:\Wagby-8.1.2>ecs-cli configure profile --profile-name ecswagby --access-key XXXXX --secret-key XXXXX

ここで、管理者のアクセスキーおよびシークレットキーは XXXXX と表記しています。これはユーザの"セキュリティ認証情報 > アクセスキー"にて作成することができます。

管理者のアカウントを使わず、新たにIAMユーザを作成して、制限された権限で実行することもできます。IAMユーザのPermission policies に下記を指定することで、クラスタの作成等を行うことができます。

図2
ポリシー名ポリシータイプ
AmazonEC2FullAccessAWS 管理ポリシー
IAMFullAccessAWS 管理ポリシー
AmazonECS_FullAccessAWS 管理ポリシー

※ 次の節でCLIを用いてECSを使うためのIAMユーザを作成する方法を紹介します。

最後に、ECS CLIのクラスタ設定を作成します。 具体的なコマンド例は次のとおりです。

C:\Wagby-8.1.2>ecs-cli configure --cluster ecswagbycluster --default-launch-type EC2 --region ap-northeast-1 --config-name ecswagbycluster

ユーザ ecswagby の設定

ECS CLI を使うための IAM ユーザ "ecswagby" を作成します。

文中でUserID、AccessKeyId、SecretAccessKeyをXXXXに置き換えて表記しています。
C:\Wagby-8.1.2>aws --profile admin iam create-user --user-name ecswagby

コマンドが成功するとコンソールに次のように表示されます。(表示内容は実際の利用環境に応じて変わります。)

{
    "User": {
        "Path": "/",
        "UserName": "ecswagby",
        "UserId": "XXXXXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::234318443261:user/ecswagby",
        "CreateDate": "2018-12-11T05:22:59Z"
    }
}

設定しようとしているポリシーが存在しているか念のため確認します。AmazonECS_FullAccess を例にすると、下記のコマンドを用いるとよいでしょう。

C:\Wagby-8.1.2>aws --profile admin --output text iam list-policies
...
POLICIES        arn:aws:iam::aws:policy/AmazonECS_FullAccess    1       2017-11-07T21:36:54Z    v13     True    /
0       ANPAJ7S7AN6YQPTJC7IFS   AmazonECS_FullAccess    2018-11-21T23:34:33Z
...

ユーザ ecswagby にポリシー AmazonECS_FullAccess, IAMFullAccess, AmazonEC2FullAccess を適用します。

C:\Wagby-8.1.2>aws --profile admin iam attach-user-policy --user-name ecswagby --policy-arn "arn:aws:iam::aws:policy/AmazonECS_FullAccess"

C:\Wagby-8.1.2>aws --profile admin iam attach-user-policy --user-name ecswagby --policy-arn "arn:aws:iam::aws:policy/IAMFullAccess"

C:\Wagby-8.1.2>aws --profile admin iam attach-user-policy --user-name ecswagby --policy-arn "arn:aws:iam::aws:policy/AmazonEC2FullAccess"

コマンドの結果を確認します。

C:\Wagby-8.1.2>aws --profile admin iam list-attached-user-policies --user-name ecswagby
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonEC2FullAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AmazonEC2FullAccess"
        },
        {
            "PolicyName": "IAMFullAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/IAMFullAccess"
        },
        {
            "PolicyName": "AmazonECS_FullAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AmazonECS_FullAccess"
        }
    ]
}

このユーザ ecswagby 用のアクセスキーを作成します。

C:\Wagby-8.1.2>aws --profile admin iam create-access-key --user-name ecswagby
{
    "AccessKey": {
        "UserName": "ecswagby",
        "AccessKeyId": "XXXXXXXXXXXXXXXXXXXX",
        "Status": "Active",
        "SecretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "CreateDate": "2018-12-11T05:44:45Z"
    }
}

ユーザ ecswagby の設定

ユーザ ecswagby に、AmazonEC2ContainerRegistryFullAccess を付与します。Dockerコンテナを登録するためのコンテナレジストリへのアクセスを許可します。

C:\Wagby-8.1.2>aws --profile admin iam attach-user-policy --user-name ecswagby --policy-arn "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess"

ユーザの削除

下記コマンドにて、ユーザの削除を行うことができます。

C:\Wagby-8.1.2>aws --profile admin iam delete-user --user-name ecswagby

また、アクセスキーや権限についても個別に削除することができます。

C:\Wagby-8.1.2>aws --profile admin iam delete-access-key --user-name ecswagby --access-key-id AKIAJ6QGO5OP4GUPT2XQ

C:\Wagby-8.1.2>aws --profile admin iam detach-user-policy  --user-name ecswagby --policy-arn "arn:aws:iam::aws:policy/AmazonECS_FullAccess"

C:\Wagby-8.1.2>aws --profile admin iam detach-user-policy  --user-name ecswagby --policy-arn "arn:aws:iam::aws:policy/IAMFullAccess"

C:\Wagby-8.1.2>aws --profile admin iam detach-user-policy  --user-name ecswagby --policy-arn "arn:aws:iam::aws:policy/AmazonEC2FullAccess"

インストールした ECS CLI を用いて、Amazon EC2 タスクのクラスタを作成します。 下記ページの内容を参考としました。

次のコマンドを実行します。ここでは ECS 環境の名前を "ecswagbycluster" としました。

C:\Wagby-8.1.2>ecs-cli up --keypair REGISTERED_PUBLIC_KEY --capability-iam --size 1 --instance-type t2.medium --cluster-config ecswagbycluster --azs ap-northeast-1b,ap-northeast-1c

コマンドを実行すると次のようなメッセージが表示されます。

INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.22.0 and Docker version 18.06.1-ce
INFO[0001] Created cluster                               cluster=ecswagbycluster region=ap-northeast-1
INFO[0001] Waiting for your cluster resources to be created...
INFO[0001] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0062] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0123] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
VPC created: vpc-0f3b83a31a3ed68eb
Security Group created: sg-0d70999595806be09
Subnet created: subnet-00233296da5d408d0
Subnet created: subnet-07d39de7462efe6a5
Cluster creation succeeded.

docker-compose.yml設定ファイルを用意する

Tomcat を起動する設定ファイル docker-compose.yml を用意します。作業用に ecs という名前のサブフォルダを作成しておきます。

C:\Wagby-8.1.2>mkdir ecs
C:\Wagby-8.1.2>cd ecs
C:\Wagby-8.1.2\ecs>

この ecs フォルダに docker-compose.yml ファイルを用意します。内容は次のとおりです。

version: '3'
services:
  tomcat:
    image: tomcat:8.5
    ports:
      - "80:8080"
    logging:
      driver: awslogs
      options:
        awslogs-group: ecswagby
        awslogs-region: ap-northeast-1
        awslogs-stream-prefix: tomcat
Wagby でビルドしたアプリケーション (wagbyapp) は次ページで扱います。ここでは標準の Tomcat を使った例を説明します。

コンテナを起動する

次のコマンドでコンテナを起動します。上で用意した環境 "ecswagbycluster" を使います。

C:\Wagby-8.1.2\ecs>ecs-cli compose up --create-log-groups --cluster-config ecswagbycluster

次のようなメッセージが表示され、ECS でコンテナが起動します。

INFO[0000] Using ECS task definition                     TaskDefinition="ecs:2"
INFO[0000] Created Log Group ecswagby in ap-northeast-1
INFO[0000] Starting container...                         container=ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat
INFO[0000] Describe ECS container status                 container=ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecs:2"
INFO[0013] Describe ECS container status                 container=ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecs:2"
INFO[0025] Started container...                          container=ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="ecs:2"

動作を確認する

ecs-cli ps コマンドで状態を確認します。

C:\Wagby-8.1.2\ecs>ecs-cli ps

状態が表示されます。State が "RUNNING" であれば起動しています。

Name                                         State    Ports                       TaskDefinition  Health
ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat  RUNNING  52.192.192.42:80->8080/tcp  ecs:2           UNKNOWN

この例ではアドレス 52.192.192.42 で起動していますので、Web ブラウザの URL に http://52.192.192.42 を入力してアプリケーションに接続できます。なお、今回はロードバランサは通していません。

Tomcatが出力するログは "CloudWatch > ログ > ロググループ > ecswagby" で確認できます。 または ecs-cli logs コマンドを使うこともできます。

C:\Wagby-8.1.2\ecs>ecs-cli logs --task-id ced663f3-534a-42ac-b36f-06bb5e80a886

コンテナを停止する

次のコマンドでコンテナを停止させることができます。

C:\Wagby-8.1.2\ecs>ecs-cli compose down --cluster-config ecswagbycluster

コンソールにコンテナを停止するメッセージが表示されます。

INFO[0000] Stopping container...                         container=ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat
INFO[0000] Describe ECS container status                 container=ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat desiredStatus=STOPPED lastStatus=RUNNING taskDefinition="ecs:2"
INFO[0006] Stopped container...                          container=ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat desiredStatus=STOPPED lastStatus=STOPPED taskDefinition="ecs:2"

先ほどと同じように ecs-cli ps コマンドで状態を確認します。State が "STOPPED" となっていればコンテナは停止しています。

C:\Wagby-8.1.2\ecs>ecs-cli ps
Name                                         State                  Ports                       TaskDefinition  Health
ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat  STOPPED ExitCode: 143  52.192.192.42:80->8080/tcp  ecs:2           UNKNOWN

ecs-cli compose service up コマンドを使って、サービスとして登録することができます。 サービスを使うことで、Amazon ECS クラスタ内で、タスク定義の指定した数のインスタンスを同時に実行して維持できます。詳細はサービスをご覧ください。 今回、Wagbyアプリケーションは1インスタンスで起動します。

C:\Wagby-8.1.2\ecs>ecs-cli compose service up --cluster-config ecswagbycluster

新しいタスク 9df9bc82-c76d-4718-992d-43b10516005b が用意されました。

INFO[0000] Using ECS task definition                     TaskDefinition="ecs:2"
INFO[0000] Created an ECS service                        service=ecs taskDefinition="ecs:2"
INFO[0001] Updated ECS service successfully              desiredCount=1 serviceName=ecs
INFO[0016] (service ecs) has started 1 tasks: (task 9df9bc82-c76d-4718-992d-43b10516005b).  timestamp="2018-12-11 04:26:27 +0000 UTC"
INFO[0031] Service status                                desiredCount=1 runningCount=1 serviceName=ecs
INFO[0031] ECS Service has reached a stable state        desiredCount=1 runningCount=1 serviceName=ecs

ecs-cli ps コマンドで動作を確認します。

C:\Wagby-8.1.2\ecs>ecs-cli ps
Name                                         State                  Ports                       TaskDefinition  Health
9df9bc82-c76d-4718-992d-43b10516005b/tomcat  RUNNING                13.114.83.23:80->8080/tcp   ecs:2           UNKNOWN
ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat  STOPPED ExitCode: 143  52.192.192.42:80->8080/tcp  ecs:2           UNKNOWN

前述の手順で停止していた ced663f3-534a-42ac-b36f-06bb5e80a886 は STOPPED のままで、新しく 9df9bc82-c76d-4718-992d-43b10516005b が起動していることがわかります。

この例ではアドレス 13.114.83.23 で起動していますので、Web ブラウザの URL に http://13.114.83.23 を入力してアプリケーションに接続できます。

サービスの停止と削除

ecs-cli compose service rm コマンドを使ってサービスを停止し、削除することができます。

C:\Wagby-8.1.2\ecs>ecs-cli compose service rm --cluster-config ecswagbycluster
INFO[0000] Updated ECS service successfully              desiredCount=0 serviceName=ecs
INFO[0000] Service status                                desiredCount=0 runningCount=1 serviceName=ecs
INFO[0030] Service status                                desiredCount=0 runningCount=0 serviceName=ecs
INFO[0030] (service ecs) has stopped 1 running tasks: (task 9df9bc82-c76d-4718-992d-43b10516005b).  timestamp="2018-12-11 04:30:01 +0000 UTC"
INFO[0030] ECS Service has reached a stable state        desiredCount=0 runningCount=0 serviceName=ecs
INFO[0031] Deleted ECS service                           service=ecs
INFO[0031] ECS Service has reached a stable state        desiredCount=0 runningCount=0 serviceName=ecs

ecs-cli ps コマンドで動作を確認します。

C:\Wagby-8.1.2\ecs>ecs-cli ps
Name                                         State                  Ports                       TaskDefinition  Health
9df9bc82-c76d-4718-992d-43b10516005b/tomcat  STOPPED ExitCode: 143  13.114.83.23:80->8080/tcp   ecs:2           UNKNOWN
ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat  STOPPED ExitCode: 143  52.192.192.42:80->8080/tcp  ecs:2           UNKNOWN

このページの説明の最後に、作成したクラスタの削除を行います。「削除するか」と質問されますので、y (yes) を入力してください。

ご注意ください。ECS を利用すると、クラスタを削除するまで課金されます。
C:\Wagby-8.1.2\ecs>ecs-cli down --cluster ecswagbycluster
Are you sure you want to delete your cluster? [y/N]
y

次のメッセージが表示され、クラスタが削除されます。

INFO[0002] Waiting for your cluster resources to be deleted...
INFO[0002] Cloudformation stack status                   stackStatus=DELETE_IN_PROGRESS
INFO[0063] Deleted cluster                               cluster=ecswagbycluster

クラスタを削除せずにサービスを停止した状態でも、EC2インスタンスは起動している状態なので、課金され続けます。 クラスタを削除したのち、再度起動する場合は再び上記手順でクラスタの作成から行ってください。