ECS環境でTomcatを実行する
最終更新日: 2020年6月12日
R8 | R9
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) ツールのダウンロードとインストールを行います。次のページに記載の手順に従ってください。
インストール後、バージョン番号が適切に表示されるかどうかを確認します。
次のページに記載の手順に従い、AWS CLI の設定を行います。
具体的には管理者のAccess Key と Secret Access Key を指定します。
Access Key と Secret Access Key を入力します。ここではリージョン(region)および出力フォーマット(output format)はそれぞれ "ap-northeast-1" と "json" とします。"ap-northeast-1"はアジアパシフィック (東京)となります。
次に Amazon Elastic Container Service (ECS) の環境をコマンドラインで操作するための CLI ツールのダウンロードとインストールを行います。今回はコンテナを利用するため、ECS のためのコマンドセットもインストールする必要があります。次のページに記載の手順に従ってください。
インストール後、バージョン番号が適切に表示されるかどうかを確認します。
次のページに記載の手順に従い、ECS CLI のプロファイル設定を行います。
ここで、管理者のアクセスキーおよびシークレットキーは XXXXX と表記しています。これはユーザの"セキュリティ認証情報 > アクセスキー"にて作成することができます。
管理者のアカウントを使わず、新たにIAMユーザを作成して、制限された権限で実行することもできます。IAMユーザのPermission policies に下記を指定することで、クラスタの作成等を行うことができます。
※ 次の節でCLIを用いてECSを使うためのIAMユーザを作成する方法を紹介します。
最後に、ECS CLIのクラスタ設定を作成します。
具体的なコマンド例は次のとおりです。
ECS CLI を使うための IAM ユーザ "ecswagby" を作成します。
コマンドが成功するとコンソールに次のように表示されます。(表示内容は実際の利用環境に応じて変わります。)
設定しようとしているポリシーが存在しているか念のため確認します。AmazonECS_FullAccess を例にすると、下記のコマンドを用いるとよいでしょう。
ユーザ ecswagby にポリシー AmazonECS_FullAccess, IAMFullAccess, AmazonEC2FullAccess を適用します。
コマンドの結果を確認します。
このユーザ ecswagby 用のアクセスキーを作成します。
ユーザ ecswagby に、AmazonEC2ContainerRegistryFullAccess を付与します。Dockerコンテナを登録するためのコンテナレジストリへのアクセスを許可します。
下記コマンドにて、ユーザの削除を行うことができます。
また、アクセスキーや権限についても個別に削除することができます。
インストールした ECS CLI を用いて、Amazon EC2 タスクのクラスタを作成します。
下記ページの内容を参考としました。
次のコマンドを実行します。ここでは ECS 環境の名前を "ecswagbycluster" としました。
コマンドを実行すると次のようなメッセージが表示されます。
Tomcat を起動する設定ファイル docker-compose.yml を用意します。作業用に ecs という名前のサブフォルダを作成しておきます。
この ecs フォルダに docker-compose.yml ファイルを用意します。内容は次のとおりです。
Wagby でビルドしたアプリケーション (wagbyapp) は次ページで扱います。ここでは標準の Tomcat を使った例を説明します。
次のコマンドでコンテナを起動します。上で用意した環境 "ecswagbycluster" を使います。
次のようなメッセージが表示され、ECS でコンテナが起動します。
ecs-cli ps コマンドで状態を確認します。
状態が表示されます。State が "RUNNING" であれば起動しています。
この例ではアドレス 52.192.192.42 で起動していますので、Web ブラウザの URL に http://52.192.192.42 を入力してアプリケーションに接続できます。なお、今回はロードバランサは通していません。
Tomcatが出力するログは "CloudWatch > ログ > ロググループ > ecswagby" で確認できます。
または ecs-cli logs コマンドを使うこともできます。
次のコマンドでコンテナを停止させることができます。
コンソールにコンテナを停止するメッセージが表示されます。
先ほどと同じように ecs-cli ps コマンドで状態を確認します。State が "STOPPED" となっていればコンテナは停止しています。
ecs-cli compose service up コマンドを使って、サービスとして登録することができます。
サービスを使うことで、Amazon ECS クラスタ内で、タスク定義の指定した数のインスタンスを同時に実行して維持できます。詳細はサービスをご覧ください。
今回、Wagbyアプリケーションは1インスタンスで起動します。
新しいタスク 9df9bc82-c76d-4718-992d-43b10516005b が用意されました。
ecs-cli ps コマンドで動作を確認します。
前述の手順で停止していた 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 コマンドを使ってサービスを停止し、削除することができます。
ecs-cli ps コマンドで動作を確認します。
このページの説明の最後に、作成したクラスタの削除を行います。「削除するか」と質問されますので、y (yes) を入力してください。
ご注意ください。ECS を利用すると、クラスタを削除するまで課金されます。
次のメッセージが表示され、クラスタが削除されます。
クラスタを削除せずにサービスを停止した状態でも、EC2インスタンスは起動している状態なので、課金され続けます。
クラスタを削除したのち、再度起動する場合は再び上記手順でクラスタの作成から行ってください。
Amazon ECS とは
ワンポイント
AWS CLIのダウンロードとインストール
C:\Wagby-8.1.2>aws --version
aws-cli/1.16.72 Python/3.6.0 Windows/10 botocore/1.12.62
設定
C:\Wagby-8.1.2>aws configure --profile admin
AWS Access Key ID [None]: XXXX
AWS Secret Access Key [None]: XXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json
ECS CLIのダウンロードとインストール
C:\Wagby-8.1.2>ecs-cli --version
ecs-cli version 1.12.0 (049e13d)
設定
C:\Wagby-8.1.2>ecs-cli configure profile --profile-name ecswagby --access-key XXXXX --secret-key XXXXX
ポリシー名 ポリシータイプ
AmazonEC2FullAccess AWS 管理ポリシー
IAMFullAccess AWS 管理ポリシー
AmazonECS_FullAccess AWS 管理ポリシー
C:\Wagby-8.1.2>ecs-cli configure --cluster ecswagbycluster --default-launch-type EC2 --region ap-northeast-1 --config-name ecswagbycluster
CLI を使うための IAM ユーザの作成と削除
ユーザ ecswagby の設定
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"
}
}
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
...
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"
}
]
}
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 の設定
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"
EC2 タスクのクラスタを作成する
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設定ファイルを用意する
C:\Wagby-8.1.2>mkdir ecs
C:\Wagby-8.1.2>cd ecs
C:\Wagby-8.1.2\ecs>
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
注意
コンテナを起動する
C:\Wagby-8.1.2\ecs>ecs-cli compose up --create-log-groups --cluster-config ecswagbycluster
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"
動作を確認する
C:\Wagby-8.1.2\ecs>ecs-cli ps
Name State Ports TaskDefinition Health
ced663f3-534a-42ac-b36f-06bb5e80a886/tomcat RUNNING 52.192.192.42:80->8080/tcp ecs:2 UNKNOWN
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"
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
サービスの登録
C:\Wagby-8.1.2\ecs>ecs-cli compose service up --cluster-config ecswagbycluster
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
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
サービスの停止と削除
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
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
クラスタの削除と課金の停止
重要
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