Docker で作成した Java Web アプリのコンテナ環境をイメージ化して ECR にプッシュし ECS にデプロイする手順について解説します。
前回、以下の記事を記述しました。
【Java】TomcatでWebアプリを作成しDockerコンテナ環境にデプロイして実行する手順
こちらの記事では Tomcatで Web アプリ(Hello Worldを表示するだけ)を作成し、それを Linux の Docker コンテナ環境上にデプロイをする手順について解説しました。
今回ではそのコンテナをイメージ化して ECR にプッシュして ECS にデプロイします。
ECR でリポジトリを作成する
AWS 管理コンソールにログインして Elastic Container Service(ECS)に移動します。
左側ペインより)「Amazon ECR」‐「リポジトリ」に移動します。
「リポジトリを作成」ボタンをクリックします。
以下のように設定します。
- 可視性設定 ← プライベート
- リポジトリ名 ← リポジトリ名(helloworld-java)を入力します。
その他はデフォルトのまま「リポジトリを作成」ボタンをクリックします。
作成したリポジトリを選択して「プッシュコマンドの表示」ボタンをクリックします。
表示されたプッシュコマンドを実行していきます。
Dockerfileの作成
プッシュコマンドを実行する前に Dockerfile ファイルを作成します。
作成した tomcat_test.war ファイルを保存している同じディレクトリに移動します。
■WAR ファイルと同じディレクトリに移動する
[root@localhost tomcat_test]# ls |
■Dockerfile ファイルを作成する
[root@localhost tomcat_test]# vi Dockerfile
COPY tomcat_test.war $CATALINA_HOME/webapps/ |
Dockerfile の中身をシンプルです。
たった2行しかありません。
シンプルにするために定番の「apt-get update」コマンドなどは省略しています。
- 1行目 ← tomcat:9.0.46 を指定する。
- 3行目 ← カレントディレクトリにある tomcat_test.war ファイルを $CATALINA_HOME/webapps/ ディレクトリ配下にコピーする。
Tomcat の Docker イメージ
https://hub.docker.com/_/tomcat
この公式サイトによると
- CATALINA_HOME = /usr/local/tomcat
になるので
tomcat_test.war は /usr/local/tomcat/tomcat_test.war に配置されることになります。
ビルドをして Docker イメージを作成する
Dockerfile を作成したら次は Dockerfile に基づきビルドをして Docker イメージを作成します。
■ビルドをする
[root@localhost tomcat_test]# docker build -t helloworld-java . |
イメージにタグ付けをする
ビルドが完了したらイメージにタグ付けをします
■タグ付けをする
[root@localhost tomcat_test]# docker tag helloworld-java:latest 295332586563.dkr.ecr.ap-northeast-1.amazonaws.com/helloworld-java:latest |
タグ付けをしたイメージを ECR にプッシュする
次にタグ付けをしたイメージを ECR にプッシュします。
■タグ付けをしたイメージを ECR にプッシュする
[root@localhost tomcat_test]# docker push 295332586563.dkr.ecr.ap-northeast-1.amazonaws.com/helloworld-java:latest |
ECR にプッシュされていることを確認
ECRにプッシュされていることを確認します。
IAM ロールを作成する
ECS でクラスターを作成する前に IAM ロールを作成しておきます。
IAM ロールの設計
初めに設計ですが、今回以下の4つの IAM ロールを作成します。
- ecsRole ← Elactic Container Service
- ecsAutoScalingRole ← Elastic Container Service Autoscale
- ecsTaskExecutionRole ← Elastic Container Service Task
- ecsInstanceRole ← EC2 Role for Elastic Container Service
IAM ロール(ecsRole)の作成
AWS 管理コンソールより「IAM」に移動します。
左側ペインより「ロール」をクリックします。
「ロールを作成」ボタンをクリックします。
信頼されたエンティティタイプで「AWS のサービス」を選択します。
ユースケースで「Elastic Container Service」を選択して「次へ」ボタンをクリックします。
デフォルトで設定されているポリシーを確認し「次へ」ボタンをクリックします。
ロール名を入力します。
「ロールを作成」ボタンをクリックします。
IAM ロール(ecsAutoScalingRole)の作成
次に ecsAutoScalingRole を作成します。
※今回はこのロールを使用しませんが今後使用するので作成しておきます。
「ロールを作成」ボタンをクリックします。
信頼されたエンティティタイプで「AWS のサービス」を選択します。
ユースケースで「Elastic Container Service Autoscale」を選択して「次へ」ボタンをクリックします。
デフォルトで設定されているポリシーを確認し「次へ」ボタンをクリックします。
ロール名を入力します。
「ロールを作成」ボタンをクリックします。
IAM ロール(ecsTaskExecutionRole)の作成
次に ecsTaskExecutionRole を作成します。
「ロールを作成」ボタンをクリックします。
信頼されたエンティティタイプで「AWS のサービス」を選択します。
ユースケースで「Elastic Container Service Task」を選択して「次へ」ボタンをクリックします。
デフォルトで設定されているポリシーを確認し「次へ」ボタンをクリックします。
ロール名を入力します。
「ロールを作成」ボタンをクリックします。
IAM ロール(ecsInstanceRole)の作成
次に ecsInstanceRole を作成します。
「ロールを作成」ボタンをクリックします。
信頼されたエンティティタイプで「AWS のサービス」を選択します。
ユースケースで「EC2 for Elastic Container Service」を選択して「次へ」ボタンをクリックします。
デフォルトで設定されているポリシーを確認し「次へ」ボタンをクリックします。
ロール名を入力します。
「ロールを作成」ボタンをクリックします。
ECS へのデプロイメント
ECS へデプロイします。
AWS 管理コンソールより ECS(Elastic Container Service)に移動します。
左側ペインより「クラスター」‐「クラスターの作成」ボタンをクリックします。
以下のように設定をして「次のステップ」ボタンをクリックします。
- クラスターテンプレートの選択 ← ネットワーキングのみ
クラスター名(tomcat-test)を入力して「作成」ボタンをクリックします。
ECS クラスターが作成されることを確認します。
タスク定義の作成
次に「タスク定義」を作成します。
タスク定義とはコンテナの設計図でタスク定義通りに自動的に環境が構築されます。
左側ペインより「タスク定義」をクリックし「新しいタスク定義」ボタンをクリックします。
起動タイプに「FARGATE」を選択して「次のステップ」ボタンをクリックします。
以下のように設定します。
- タスク定義名 ← タスク定義名(tomcat-test)を設定します。
- タスクロール ← 先ほど作成した ecsTaskExecutionRole を選択します。
以下のように設定して「コンテナの追加」ボタンをクリックします。
今回のアプリは「Hello World」を表示するだけなので最低のスペックを選択します。
- タスク実行ロール ← 先ほど作成した ecsTaskExecutionRole を選択します。
- タスクメモリ ← 0.5GB
- タスク CPU ← 0.25vCPU
以下のように設定します。
- コンテナ名 ← 今回設定するコンテナ名(tomcat)を設定します。
- イメージ ← ECR にプッシュした tomcat_test のイメージがある URI を設定します。
- ポートマッピング ← 8080を設定します。
以下、ポートマッピングの説明です。
以下のデフォルトのまま進みます。
以下もデフォルトのまま進みます。
以下もデフォルトのまま進みます。
「追加」ボタンをクリックします
下図のようにコンテナが追加されていることを確認します。
最後に「作成」ボタンをクリックします。
タスク定義が作成されることを確認します。
サービスの作成
次にサービスを作成します。
左側ペインより「クラスター」をクリックして作成したクラスター名(tomcat-test)をクリックします。
「サービス」タブを選択し「作成」ボタンをクリックします。
以下のように設定します。
- 起動タイプ ← FARGATE を選択します。
- タスク定義 ← 先ほど作成した tomcat-test を選択します。
- サービス名 ← サービス名(tomcat-test-service)を設定します。
以下のように設定します。
- タスクの数 ← 1 を設定します。
「次のステップ」ボタンをクリックします。
以下のように設定します。
セキュリティグループの「編集」ボタンをクリックします。
- クラスターVPC ← 今回実行するクラスターが所属する VPC を選択します。
- サブネット ← 別アベイラビリティゾーンの2つのサブネットを指定します。
以下のように設定します。
設定したら「保存」ボタンをクリックします。
- 新しいセキュリティグループの作成をクリック
- セキュリティグループ名を設定
- タイプ ← カスタム
- ポート範囲 ← 8080
- ソース ← 任意の設定
「保存」ボタンをクリック後、セキュリティグループが設定されていることを確認します。
デフォルトのまま進みます。
「次のステップ」ボタンをクリックします。
最後に確認をします。
最後に「サービスの作成」ボタンをクリックします。
以下のように ECS サービスが作成されることを確認します。
動作確認
最後に動作確認をします。
対象のタスクをクリックします。
下図のようにステータスが「RUNNING」になっていることを確認します。
ブラウザを起動し以下のURLを入力し「Hello World」が表示されることを確認します。
URL ← http://<パブリックIP>:8080/tomcat_test/tomcat/hello
コメント