主に感想。

を書いています。

EC2上のTomcatにServletアプリケーションをデプロイする方法

タイトルの通りです。EC2にTomcatをインストールし、そのTomcat上にServletアプリケーションをデプロイします。

EC2のOSはAmazon Linux2(64bit) を想定しています。Amazon LinuxはRedHat系で、Ubuntu等のDebian系とはコマンドが若干異なるので、Ubuntuを使う際はご注意ください。

Tomcatには8080番ポートからアクセスするため、EC2を作成する際にセキュリティグループの設定で8080番ポートを開けておきます。具体的には、タイプはカスタムTCP、プロトコルはTCP、ポート範囲は8080、ソースはカスタムの0.0.0.0/0とします。

また、EC2にSession Managerからアクセスするために、EC2にSession Managerのアクセス権限を与えておく必要があります。AWS管理ポリシーであるAmazonEC2RoleforSSMをアタッチしたIAMロールを作成し、EC2にアタッチしておきます。

セキュリティグループとIAMロール以外の項目はデフォルトのまま、SSHのキーは発行せずにEC2を起動します。この記事ではSession Managerを使うことを前提としていますが、普通にSSHでEC2にアクセスする場合はSSHキーを発行してください。

Session ManagerからEC2の中に入ったら、Javaのバージョンを確認します。Javaが入っていればそのまま続行してください。

java -version

入ってない場合は自分でJavaをインストールする必要があります。Amazon Linux2はデフォルトではJavaは入っていないので注意が必要です。

自分でインストールする場合、まずyumのリポジトリを更新します。

sudo yum update -y

次に、インストール可能なJavaのバージョン一覧を取得します。

sudo yum search java

Java8まででよければ、OpenJDKが使えます。名前にdevelが付いていないものはランタイムのみ、付いているものはコンパイラが付属しています。

sudo yum install java-1.8.0-openjdk

or

sudo yum install java-1.8.0-openjdk-devel

Javaをインストールできたら、TomcatとTomcatの管理用アプリをインストールします。

sudo yum install tomcat
sudo yum install tomcat-webapps
sudo yum install tomcat-admin-webapps

Tomcatを起動します。

sudo systemctl start tomcat

EC2のコンソールから作成した仮想マシンのインスタンスを選択し、グローバルIPアドレスを確認します。 その後ブラウザからそのIPアドレスの8080ポート(http://xxx.xxx.xxx.xxx:8080/)にアクセスし、Tomcatの管理画面が表示されることを確認します。

次に、TomcatのManager AppからServletアプリケーションをデプロイします。デフォルトではTomcatの管理ユーザーが存在せず、Manager Appにログインできないため、管理ユーザーを作成します。

管理ユーザーはTomcatの設定ファイルに記述する必要があるので、そのファイルをvimで編集します。

sudo vim /usr/share/tomcat/conf/tomcat-users.xml

最下部の次の2行(おそらく下から2行目と10行目)のコメントアウトを外して、管理ユーザーを作成します。

<role rolename="admin"/>
<user name="admin" password="adminadmin" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />

作成した管理ユーザーを有効にするため、Tomcatを再起動します。

sudo systemctl restart tomcat

TomcatのManager Appにadmin/adminadminでログインします。アプリケーションの管理画面が表示されたら、下の方のメニューからWARファイルを配備します。

デプロイができたら、Tomcat上のアプリケーションのURLhttp://xxx.xxx.xxx.xxx:8080/{Javaプロジェクト名}/からアプリケーションにアクセスできるようになります。