タイトルの通りです。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プロジェクト名}/
からアプリケーションにアクセスできるようになります。