前回まででエクリプスで作成したプロジェクトをGCEにアップすることが出来るようになった。今回はそれにMySQLを連携させていく。
Todoアプリの作成(ローカル)
DBを絡めたお題として、まずは定番のTodoアプリを作成しよう。作成記事がこちらにあるのでまずはそこを見ながらローカル環境にTodoアプリを作成する。
ローカルで実行確認
作成が終わったら、Readを右クリックしてサーバーで実行。新規登録から3件ほど適当にTodoを登録しておこう。
GCPでデータベースを使えるようにする
GCPでデータベースを使うにはGoogle Cloud SQLというサービスを利用する。
インスタンス作成
GCP左側メニューからSQLを選択
インスタンス作成を押す
MySQLを選択
設定画面では以下のように設定する。rootパスワードは忘れると大変なのでメモ帳などに貼り付けておこう。
インスタンスID:任意
rootパスワード:任意
リージョン、ゾーン:VMインスタンスに合わせる
バージョン:5.7
IPアドレスをコピーしてメモ帳に貼ったら、インスタンス名をクリックする。
接続設定
接続からネットワークを設定を押す
初日に作成したGCEからこのデータベースに接続できるようにする。
GCEのインスタンス名とIPアドレスを入力して完了を押す。
保存を押す
GCEにMySQLをインストール
GCEでmysqlコマンドを使えるようにするため、インストールする必要がある。
まずはGCEにログインし、rootユーザーになる。コマンドは以下
$ ssh mjpurin@00.000.00.00
Last login: Fri Nov 29 12:40:15 2019 from 103.5.140.187
[mjpurin@instance-1 ~]$ su
Password: //パスワード入力
[root@instance-1 mjpurin]#
1.CentOS7にプリインストールされているmariaDBの削除
はじめにCentOS7にプリインストールしてあるmariaDBを削除しておこう。
# yum -y remove mariadb-libs
MySQL Yum リポジトリをシステムのリポジトリリストに追加
# yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
インストール
yum -y install mysql-community-server
注)このときに以下のようなメッセージがでてインストールに失敗するという報告を受けました。
その場合は以下のコマンドを実行して、再インストールしてください。
$ rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
確認
# mysqld --version
自動起動設定
# systemctl enable mysqld.service
起動
# systemctl start mysqld.service
確認
# systemctl status mysqld.service
接続
これで準備はすべて整った、GCPに作ったmysqlインスタンスに接続してみよう。
先程メモ帳に貼り付けたSQLのIPアドレスとパスワード入力する。
# mysql -h 00.00.00.00 -u root -p
Enter password: //sqlのパスワードを入力
GCP上のSQLインスタンスに接続することができた!!
DBの作成
クラウド上のSQLにもデータベースを作成しよう。mysql>のプロンプトの後ろに以下を入力する。
CREATE DATABASE todoapp
DEFAULT CHARACTER SET utf8;
DBのエクスポート,インポート
ローカルで作ったDBの情報をこちらにまるっと持ってこよう。まずはexitを連打してGCEへの接続を切る。
バックアップファイルを作成する。コマンドは以下。
パスワードを聞かれたら入力する。(以下の例の場合、rootユーザーのパスワード)
$ mysqldump -u root -p todoapp > ~/desktop/backup.sql
確認
以下のようにバックアップファイル(dumpファイル)を確認する。
$ less ~/desktop/backup.sql
以下は抜粋だが、テーブルを作ってデータを挿入しているsqlが確認できる。
バックアップファイルを確認したので今度はこのファイルの情報を元にしてGCP上のSQLインスタンスに復元しよう。まずはscpでGCE上にコピーする。
$ scp ~/desktop/backup.sql mjpurin@00.00.00.00:/home/mjpurin
確認
接続して確認する。
$ ssh mjpurin@00.00.00.00
$ ls -la
このファイルをもとにDBを復元する。この際IPアドレスとパスワードは先程メモ帳にメモしたDBのIPアドレスなので間違えないように。
$ mysql -h 00.00.00.00 -u root -p todoapp < backup.sql
Enter password:
確認
$ mysql -h 00.00.00.00 -u root -p todoapp
Enter password:
todoappデータベースに接続された。確認してみよう。mysql>プロンプトの後ろに以下を入力
show tables;
SELECTもしてみよう。
select * from todos;
OK!!!!
これでローカル環境に構築したDBをクラウド上(GCP)に持ってくることができた!
エクリプスでwarファイルの作成
いよいよラストスパートだ。エクリプスに行ってtodoappのwarファイルを作成する。この際、2つ変更しなければならないファイルがあるので注意だ。
1.context.xml
現在context.xmlの設定になっているのでgcp用を追記してあげよう。以下が変更点だ。
name=”jdbc/gcp”
url=”jdbc:mysql://00.000.00.00/todoapp” //00.000のところにはDBのIPアドレス
password=”sqlインスタンスのパスワード”
<?xml version="1.0" encoding="UTF-8" ?>
<Context>
<Resource
name="jdbc/jsp"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/todoapp"
connectionProperties="autoReconnect=true;verifyServerCertificate=false;useSSL=false;requireSSL=false;useUnicode=true;characterEncoding=UTF-8;"
username="root"
password="root"
validationQuery="select 1"/>
<Resource
name="jdbc/gcp"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://00.000.00.00/todoapp"
connectionProperties="autoReconnect=true;verifyServerCertificate=false;useSSL=false;requireSSL=false;useUnicode=true;characterEncoding=UTF-8;"
username="root"
password="sqlインスタンスのパスワード"
validationQuery="select 1"/>
</Context>
2.TodoDAO.java
今追記したresourceを読み込むように変更する。context.lookupしている部分の最後をgcpに変更する。
//接続処理
private void connect() throws NamingException, SQLException {
Context context = new InitialContext();
DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/gcp");
db = ds.getConnection();
}
warファイル作成
ここまでくれば後は前回と同じだ。アプリ名を右クリックしてExportからwarファイルを作成
いつものようにデスクトップにtodoappフォルダを作ってそこに保存しよう。
scpでGCEにコピー
作成したwarファイルgceにコピーする。
$ scp ~/desktop/todoapp/todoapp.war mjpurin@00.000.00.00:/home/mjpurin
ログインしてルートになってwebappsに配置
$ ssh mjpurin@00.000.00.00
$ su
Password:
# mv todoapp.war /opt/apache-tomcat-9.0.29/webapps
proxy-ajp.confの変更
# vi /etc/httpd/conf.d/proxy-ajp.conf
追記部分は以下
<Location /docs/>
ProxyPass ajp://127.0.0.1:8009/docs/
</Location>
<Location /NowTime/>
ProxyPass ajp://127.0.0.1:8009/NowTime/
</Location>
<Location /bmi-app/>
ProxyPass ajp://127.0.0.1:8009/bmi-app/
</Location>
<Location /todoapp/>
ProxyPass ajp://127.0.0.1:8009/todoapp/
</Location>
apache再起動
# service httpd restart
完成!!!
以上で完成だ。Webブラウザから
http://00.000.00.00/todoapp/Read
にアクセスしてみよう。
ローカルにて開発したDBを絡めたアプリをGCP上に再現することができた。
最後に
全5回にわけてエクリプスで開発したWebプロジェクトをGCPにもってくる方法を解説した。潤沢にある無料期間を利用して十分に練習していただきたい。
その後の方針としては、そのまま課金して使う。速度などを犠牲にして無料枠で使い続ける。ここで得た知識をもとにVPSで環境を構築するなどが考えられる。
無料枠で使い続ける方法や、VPSでの環境構築などはまた機会を改めて解説する予定だ。
コメント