【EC2とRDSを利用して簡易WEBアプリを構築してみる】
気付いたら前回の記事から一か月以上経過していました久しぶりのAWSです。
他のことをやっていたり準備があったりもあるんだけどちょっと絞った方がいいのかと思い始めた今日この頃。
今回の構築イメージ
お絵描き妥協しました。
AWS上のEC2とRDSインスタンスを生成して、EC2上でTomcatを起動。
アプリの本体となるwarファイルはローカルのEclipseで生成したもので、EC2に配置する。
ローカルのブラウザからEC2へリクエストを行い、処理の中でSQLを発行しEC2からRDSへ接続、最終的にレスポンスをブラウザへ返します。
前提条件(構築、作成済み)
・warファイルの元となるプロジェクトは作成済み。
アプリの中身は違いますがwarファイルの作成手順は以下の過去記事と同様。
・EC2インスタンスは生成済み
過去に生成したものは一度削除してしまったので、過去記事の手順に沿って再生成しました。
・RDSインスタンス生成及びローカルからの接続確認済み。
一旦はその⑦で生成したものをほぼそのまま使用する形になります。
EC2の設定、準備
セキュリティグループの設定
大したものではありませんが一応確認。
インバウンド側の設定です。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
カスタムTCP | TCP | 8080 | 自分のIPアドレス |
SSH | TCP | 22 | 自分のIPアドレス |
上がブラウザからのTomcat接続用、下がコンソール(teraterm)からの接続用です。
Tomcatのインストール
ローカルからteratermで接続を行い以下のコマンドを実行していきます。
基本的には以下の過去記事の通りで、OpenJDK11をインストールし、Tomcat9のインストールすることとしました。
以下は断りがない限り、コンソールからの操作になります。
・rootユーザにスイッチ
sudo su -
EC2インスタンスを生成したばかりの段階ではrootユーザのパスワードが設定されていないため、そのままの「su -」ではスイッチできないようです。
・OpenJDK 11 インストール
EC2サーバにはデフォで入っているわけではないみたいなのでダウンロードするところからです。
ダウンロード(場所はどこでもいいみたいですが、/tmpで実行)
curl -L -O "https://download.java.net/java/ga/jdk11/openjdk-11_linux-x64_bin.tar.gz"
圧縮ファイルの解凍
tar zxf openjdk-11_linux-x64_bin.tar.gz -C /usr/local
環境変数の設定
export JAVA_HOME=/usr/local/jdk-11 export PATH=\$PATH:\$JAVA_HOME/bin export CLASSPATH=.:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib:\$JAVA_HOME/lib/tools.jar
初期設定(JDKの選択)
alternatives --install /usr/bin/java java /usr/local/jdk-11/bin/java 2 alternatives --config java
JDKのバージョンが11になっていることを確認。
java -version
・Tomcat9 インストール
ダウンロード
curl -O http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.24/bin/apache-tomcat-9.0.24.tar.gz
解凍
tar -xzvf apache-tomcat-9.0.24.tar.gz
移動
mv apache-tomcat-9.0.24 /usr/libexec/tomcat9
ユーザ追加
useradd -M -d /usr/libexec/tomcat9 tomcat
所有者の変更
chown -R tomcat. /usr/libexec/tomcat9
Tomcat9の起動
sudo -u tomcat /usr/libexec/tomcat9/bin/startup.sh
※systemctlコマンドが実行できなかったため、起動シェルを直接叩きました。なんで??
使えるならsystemctlでよいのだと思います。
一旦これで起動の確認ができたのでこれでよしとしますが、勉強不足のため時間があったらsystemctlコマンドについては再検討したい。
起動の確認
http://[EC2のIPアドレス]:8080/
JDBCドライバのインストール
EC2からRDS(Mysql)に接続するためのJDBCドライバをインストールする。
インストール
sudo yum -y install mysql-connector-java
Tomcatが使用できるようにtomcatディレクトリにコピーしておきます。
コピー
cp /usr/share/java/mysql-connector-java-5.1.12.jar /usr/libexec/tomcat9/bin/
warファイルの生成とデプロイ
DB接続パラメータの設定
warファイル作成の前にDB接続情報の設定を行っておきます。
ここは使用しているフレームワークやプロジェクト構成で微妙に変わってくるかもしません。
接続DB情報の変更
接続先のURLはEclipseのデータエクスプローラーから確認できます。
対象DBのプロパティからドライバーのプロパティを選択しURLの部分をコピーします。
この情報をDBの接続先を設定するファイルに記述します。
私の場合は「todoMyBatis-infra.properties」というファイルに以下のように設定しました。
database.url=jdbc:mysql://testdb3.casmuwjfmmlq.ap-northeast-1.rds.amazonaws.com:3306/testdb database.username=root database.password=[パスワード]
warファイルの生成
任意の方法でwarファイルの生成を行います。
私の場合はMavenプロジェクトなのでmvnコマンドで。詳細は過去記事に記載してあるので割愛します。
EC2にwarファイルをデプロイする
teratermからEC2に配置します。
上記の置き方ではec2‐userのホーム直下に配置されるのでTomcatのフォルダに移動します。
mv todoMyBatis.war /usr/libexec/tomcat9/webapps/
おけばtodoMyBatisのフォルダが生成されるはずです。
動作確認
構築したアプリに接続を行います。
http://[EC2のIPアドレス]:8080/[配置したアプリの構成]
私の場合は以下の通りです。
http://[EC2のIPアドレス]:8080/todoMyBatis/userList/list
以下、動作確認になりますので構築したアプリに沿って進めてください。
・リスト画面の表示(初期表示)
RDS構築時にSQLで登録したユーザが登録されているのでOK。
・ユーザ登録
ユーザが登録されたのでOK。
・ユーザの削除
ユーザが削除できたのでOK。
・ユーザの検索
指定した検索条件(削除済み含む)で検索できているのでOK。
画面表示や処理機能でのDBとの連携もうまくいっているので問題なさそうです。
感想とか
思ったよりはつまらずにできました。EC2とRDSの連携で苦労するかと思ったけど一発でうまくいきました。
ドライバや接続情報の設定部分は事前にローカル環境で同じようなことを試しておいたためすんなりいったのかもしれません。
逆に苦労した部分はEC2の設定部分で、Tomcatのインストールや起動に手間取りました。
systemctlって使えないことないと思ってた。現状では自動起動の設定もできてないしうーん。。
Linuxは自分で勉強はしてるけど、業務でしっかりやっているわけじゃないから理解が浅い部分が多い。
次回はPVCについてかな。