こんにちは、テクニカルサポートの宮本です!
CData APIServer や CData Sync などのアプリケーション製品では、各種設定情報を内部で保持している Java DB(Derby) で保持しています。ただ、「同じ設定でオートスケールさせたい」、「コンテナサービスで利用したい」といったケースでは、設定情報を内部ではなく他の永続的に参照できる場所で保持することがあります。
そこで今回は外部の DB を管理 DB として扱い、APIServer AMI の設定情報を管理 DB に保存する方法をご紹介したいと思います。
手順
今回は APIServer AMI を使用していきます。まだお持ちでない方がいましたら、こちらのリンクから AMI 版を起動してみてください。
AWS Marketplace: CData API Server
AMI 版の進め方はこちらを参考にしてください。
https://www.cdata.com/jp/blog/2019-04-11-111312
管理DB用のドライバーを配置
AMI の場合、デフォルトでは SQLServer と Oracle 用のドライバーが /opt/jetty/lib/ext/ に入っています。
もし上記以外のデータベースを管理 DB としたい場合は、同ディレクトリに API Server からドライバーをコピーして持ってきます。
なお、今回は MySQL を使っていきます。
[root@ip-172-31-23-186 ~]# cp -p /opt/apiserver/work/jetty-0.0.0.0-8443-apiserver.war-_-any-/webapp/WEB-INF/lib/cdata.jdbc.mysql.jar /opt/jetty/lib/ext/
[root@ip-172-31-23-186 ~]# ll /opt/jetty/lib/ext/
total 14792
-rw-r--r--. 1 jetty jetty 10327402 Oct 10 2020 cdata.jdbc.mysql.jar
-rw-r--r--. 1 jetty jetty 1111548 Dec 4 2020 mssql-jdbc-6.4.0.jre8.jar
-rw-r--r--. 1 jetty jetty 3698857 Dec 4 2020 ojdbc7.jar
[root@ip-172-31-23-186 ~]#
Jetty / APIServer のリソース定義
APIServer AMI では Jetty で JNDI を使って 外部DBの DataSource を取得しますので、Jetty および API Server の xml ファイルを更新して、API Server で保存するリソース情報を管理 DB に保存するようにしていきます。
それではまずは、Jetty 側の更新です。/opt/jetty/etc/jetty.xml に対して、APP_USERS、APP_LOGS、APP_DB のリソース定義を Configure タグ内に下記内容を追記します。※追記部分とした箇所
各設定内容
* APP_USERS:データソースへの接続情報
* APP_LOGS:ログ情報
* APP_DB:ライセンスキーなどAPIServerで設定している情報
name="stopAtShutdown">name="jetty.server.stopAtShutdown" default="true"/>
name="stopTimeout">name="jetty.server.stopTimeout" default="5000"/>
name="dumpAfterStart">name="jetty.server.dumpAfterStart" deprecated="jetty.dump.start" default="false"/>
name="dumpBeforeStop">name="jetty.server.dumpBeforeStop" deprecated="jetty.dump.stop" default="false"/>
Id="AppUsers" class="org.eclipse.jetty.plus.jndi.Resource">
jdbc/APP_USERS
class="cdata.jdbc.mysql.MySQLDataSource">
name="url">jdbc:mysql:Server=xxxxxx
;Port=3306;Database=cdata;User=yyyyy;Password=zzzzzzz
Id="AppLogs" class="org.eclipse.jetty.plus.jndi.Resource">
jdbc/APP_LOGS
class="cdata.jdbc.mysql.MySQLDataSource">
name="url">jdbc:mysql:Server=xxxxxx
;Port=3306;Database=cdata;User=yyyyy;Password=zzzzzzz
Id="AppDB" class="org.eclipse.jetty.plus.jndi.Resource">
jdbc/APP_DB
class="cdata.jdbc.mysql.MySQLDataSource">
name="url">jdbc:mysql:Server=xxxxxx
;Port=3306;Database=cdata;User=yyyyy;Password=zzzzzzz
次にAPI Server の設定ファイルから Jetty で設定した DataSource を参照するよう設定します。
/opt/apiserver/work/jetty-0.0.0.0-8443-apiserver.war-_-any-/webapp/WEB-INF/web.xml に下記内容を追記します。※追記部分とした箇所
/index.jsp
App Security Datasource
jdbc/APP_USERS
javax.sql.DataSource
Container
App Security Datasource
jdbc/APP_DB
javax.sql.DataSource
Container
App Security Datasource
jdbc/APP_LOGS
javax.sql.DataSource
Container
最後に API Server を再起動して設定自体は完了です。
API Server の接続情報を保存
API Server のコネクション設定にて対象となるデータソースへの接続情報を作成します。
管理用DB に保存する場合は、「Name」を入力し、Master Connectionにチェックを入れたら一旦右上の「Save Changes」をクリックします。
※「Master Connection」のチェックは必須ではありません
そうしますと、「User registration URL」に URL が表示されますのでクリックします。
ここで表示された画面で接続情報を入力し、接続テストが完了したら保存します。
管理DBに保存されている確認
では、管理 DB の MySQL にいま入力した設定情報が保持されているか確認してみます。MySQL WorkBenchで DB に接続してみると、このように各種 API Server で使用する設定用テーブルが作成されているのが確認できます。
接続情報が保存されている app_user_connections にSelect してみると、先ほど登録した情報が表示されました。
おわりに
いかがでしたでしょうか。簡単に外部の DB に設定情報を保存することができました。この管理DBの手法を使って、API Server の複数構成やコンテナで利用するケースで是非ご利用ください。
次回は AMI 版ではなく、インストール型の API Server で行う管理DBの設定をご紹介いたします。
www.cdata.com
関連コンテンツ