【AWS】Docker で作成した Java Web アプリのコンテナ環境をイメージ化して ECR にプッシュし ECS にデプロイする手順

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
tomcat_test.war

 

 

■Dockerfile ファイルを作成する

[root@localhost tomcat_test]# vi Dockerfile
FROM tomcat:9.0.46

 

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 . 
Sending build context to Docker daemon   5.12kB 
Step 1/2 : FROM tomcat:9.0.46 
9.0.46: Pulling from library/tomcat 
d960726af2be: Pull complete 
e8d62473a22d: Pull complete 
8962bc0fad55: Pull complete 
65d943ee54c1: Pull complete 
da20b77f10ac: Pull complete 
8669a096f083: Pull complete 
e0c0a5e9ce88: Pull complete 
f7f46169d747: Pull complete 
42d8171e56e6: Pull complete 
774078a3f8bb: Pull complete 
Digest: sha256:7170333206a612dbeedfbc7bb8caeee972eadca1cc4a72e6b1 
Status: Downloaded newer image for tomcat:9.0.46 
 —> c43a65faae57 
Step 2/2 : COPY tomcat_test.war $CATALINA_HOME/webapps/ 
 —> a1f72bd5fc23 
Successfully built a1f72bd5fc23 
Successfully tagged helloworld-java:latest 
[root@localhost tomcat_test]# 

 

 

イメージにタグ付けをする

ビルドが完了したらイメージにタグ付けをします

 

■タグ付けをする

[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 
The push refers to repository [xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/helloworld-java] 
cef2bcb4e81c: Pushed 
daf63ef0ddbb: Pushed 
3307ffa538c1: Pushed 
8f8b5acac684: Pushed 
15786a1cf1cb: Pushed 
6f770cdc9ebf: Pushed 
3fc095fab4a2: Pushed 
685934357c89: Pushed 
ccb9b68523fd: Pushed 
00bcea93703b: Pushed 
688e187d6c79: Pushed 
latest: digest: sha256:c1fff02901dd3cf5243633b8f72a7454830d166 size: 2629 
[root@localhost tomcat_test]# 

 

 

 

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

 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください