TERASOLUNA というNTTデータが提供するフレームワーク 1 があります。
TERASOLUNA Server Framework for Javaの動作環境は こちら にありますが、Java, Tomcat, PostgreSQLであればAzure PaaS ( WebApp + Azure Database for PostgreSQL ) 環境で普通に動きそうです。
実際に Githubで公開されているサンプルアプリ が動作することを試してみたので、以下に手順をまとめておきます。
簡単ですが構成図:
ここでVMがあるのは、作業用端末(手順中で実行しているDB初期化、ビルドとデプロイの作業用)で、同じAzure環境にある必要はありません。アプリケーション自体はPaaSだけで動作するようになります。
1) Azureリソース(WebApp + PostgreSQL)作成
注:WebApp は無料プランで試せますが、PostgreSQLの方は無料プランが無いため、¥4,381/月 (2018.08.15 の東日本リージョンの定価) がかかります。
Azureポータルで リソースの作成 → "Web App + PostgreSQL" を選択します。
- WebAppは無料プランを指定
- PostgreSQLの価格レベルは最低(Basic 1コア)を指定
- PostgreSQLのバージョンは 9.6を指定
その他の名称などは任意の名前で構いません。
作成時に指定した サーバ名、管理者ログイン名とパスワード を控えておきます。
作成後、WebAppの「アプリケーション設定」を変更します。
- Javaバージョンで「Java 8」を選択
- Javaマイナーバージョンで「1.8.0_172」を選択
- Java Webコンテナーで「新しい順 Tomcat 9.0」(=Tomcat 9.0の最新バージョン)を選択
最後に、PostgreSQLのアクセス許可設定を変更します。
「接続のセキュリティ」メニューにて AllowAllを削除し、「Azureサービスへのアクセスを許可」(=Azureサービスからのアクセスを許可)をオンに変更します。
今回は作業用の端末がAzure VMなのでこれで設定完了です。別の環境から接続する場合は、その接続元IPを追加で設定して下さい。
設定後の状態:
Azureリソースの作成と設定は以上で完了です。
2) サンプルアプリのダウンロードと設定
ここからは上に書いたVM(CentOS)で作業しています。作業用の端末に必要な実行環境(java, Maven, PostgreSQLクライアント)がインストールされていない場合は
$ yum install java-1.8.0-openjdk-devel maven postgresql
で追加して下さい。(Ubuntuの場合はaptコマンドになります。)
$ apt install openjdk-8-jdk maven postgresql-client-common postgresql-client-9.6
サンプルアプリをダウンロードして解凍します。
$ wget https://github.com/terasolunaorg/terasoluna-tourreservation-mybatis3/archive/5.4.1.RELEASE.tar.gz
$ tar -xvf 5.4.1.RELEASE.tar.gz
サンプルアプリは、SQLサーバに"tourreserve" DBがあることを前提にしているので、これを手動で作成します。
途中指定するユーザ名は、ユーザ名@サーバ名 の形式 (例:postgresusr@postgresqldbserver)です。
$ psql -h <1で作成したサーバ名>.postgres.database.azure.com -U <1で作成したユーザ名> -d postgres
Password for user postgresusr@postgresqldbserver: <1で指定したパスワード>
psql (9.6.9)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=> create database tourreserve;
CREATE DATABASE
postgres=> \q
サンプルアプリ内にDB初期化スクリプトがあるので、接続情報を変更して実行します。
$ cd ~/terasoluna-tourreservation-mybatis3-5.4.1.RELEASE/terasoluna-tourreservation-initdb/
$ vi pom.xml
ファイル中に
<db.url>jdbc:postgresql://localhost/tourreserve</db.url>
<db.username>postgres</db.username>
<db.password>P0stgres</db.password>
という行があるので変更します。ユーザ名は、ユーザ名@サーバ名 の形式 (例:postgresusr@postgresqldbserver)です。
<db.url>jdbc:postgresql://<1で作成したサーバ名>.postgres.database.azure.com:5432/tourreserve</db.url>
<db.username><1で作成したユーザ名></db.username>
<db.password><1で指定したパスワード></db.password>
変更後、DB初期化スクリプトを実行します。
$ cd ~/terasoluna-tourreservation-mybatis3-5.4.1.RELEASE/
$ mvn -f terasoluna-tourreservation-initdb/pom.xml sql:execute
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - DB Init 5.4.1.RELEASE
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- sql-maven-plugin:1.5:execute (default-cli) @ terasoluna-tourreservation-initdb ---
※中略※
[INFO] 28 of 28 SQL statements executed successfully
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.169s
[INFO] Finished at: Mon Aug 06 05:27:27 UTC 2018
[INFO] Final Memory: 7M/133M
[INFO] ------------------------------------------------------------------------
BUILD SUCCESSとなれば成功です。
3) ビルド
アプリケーションのDB接続情報は 2) のDB初期化設定とは別にあるので、修正してビルドします。
$ cd ~/terasoluna-tourreservation-mybatis3-5.4.1.RELEASE/terasoluna-tourreservation-env/src/main/resources/META-INF/spring/
$ vi terasoluna-tourreservation-infra.properties
ファイル中に
database.url=jdbc:postgresql://localhost/tourreserve
database.username=postgres
database.password=P0stgres
という行があるので、2) と同様に修正します。
database.url=jdbc:postgresql://<1で作成したサーバ名>:5432/tourreserve
database.username=<1で作成したユーザ名>
database.password=<1で指定したパスワード>
変更後、ビルド実行します。
$ cd ~/terasoluna-tourreservation-mybatis3-5.4.1.RELEASE/
$ mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Environment Layer
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Domain Layer
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Web Layer
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent 5.4.1.RELEASE
[INFO] ------------------------------------------------------------------------
※中略※
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Parent SUCCESS [ 0.742 s]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Environment Layer SUCCESS [ 5.308 s]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Domain Layer SUCCESS [ 31.058 s]
[INFO] TERASOLUNA Server Framework for Java (5.x) - Tour Reservation Application - Web Layer SUCCESS [ 30.660 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:08 min
[INFO] Finished at: 2018-08-23T18:18:23+09:00
[INFO] Final Memory: 45M/331M
[INFO] ------------------------------------------------------------------------
BUILD SUCCESSとなれば成功です。
$ ls ~/terasoluna-tourreservation-mybatis3-5.4.1.RELEASE/terasoluna-tourreservation-web/target/terasoluna-tourreservation-web.war
-rw-r--r-- 1 azureuser azureuser 29272310 Aug 23 18:18 /home/azureuser/terasoluna-tourreservation-mybatis3-5.4.1.RELEASE/terasoluna-tourreservation-web/target/terasoluna-tourreservation-web.war
このwarをWebAppsにデプロイします。
4) デプロイ
まず、AzureコンソールでWebAppsのデプロイ設定をします。対象のWebAppsのメニュー「デプロイ資格情報」から、デプロイ用のユーザ名、パスワードを設定します。
次に、デプロイオプションとして、ローカルGitリポジトリを設定します。「デプロイオプション」→「ソースの選択」からローカルGitリポジトリを選択して変更を保存します。
変更後、WebAppsの概要に戻ると「GitクローンURL」が表示されているのでコピーしておきます。
作業用の端末に戻り、WebAppsにwarファイルをデプロイします。
$ git clone <上でコピーしたGitクローンURL>
Password for 'https://xxxxx.scm.azurewebsites.net:443': <上で設定したパスワード>
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (6/6), done.
Unpacking objects: 100% (7/7), done.
remote: Total 7 (delta 0), reused 0 (delta 0)
warファイルを追加して、pushします。
$ cd <上で作成されたWebAppsディレクトリ>
$ cp ~/terasoluna-tourreservation-mybatis3-5.4.1.RELEASE/terasoluna-tourreservation-web/target/terasoluna-tourreservation-web.war ./webapps/
$ git add ./webapps/terasoluna-tourreservation-web.war
$ git commit
<コメントを何か記入して保存>
$ git push origin master
Password for 'https://xxxxx.scm.azurewebsites.net:443': <上で設定したパスワード>
作業後、デプロイオプションに履歴が表示されれば作業は完了です(チェックが入れば、正常終了)。
5) 動作確認
WebAppsにアクセスして、参照できることを確認します。
https://<1で作成したWebApp名>.azurewebsites.net/terasoluna-tourreservation-web/
以上で、サンプルアプリがPaaS環境で動作することが確認できました。











