こんにちは。CData Software Japan リードエンジニアの杉本です。
CData Driver はJDBCやODBCなどのデータベース接続インターフェースからSalesforceやDynamics 365といったWeb APIのアプリケーションに接続することができる、ライブラリソフトウェアです。
ですが、実はMySQLやSQL ServerといったRDBに擬態、データアクセスの仮想化を実現できる機能が備わっています。
それが、今回紹介するCData JDBC Remortingです。
今回の記事では、このJDBC Remorting機能をAWS EC2上のインスタンスで構成し、様々なツールから接続できるようにする方法を紹介したいと思います。
CData JDBC Remorting とは?
端的に言ってしまうと、CData JDBC Driverの機能をMySQLやSQL Server(TDS)のインターフェースとして提供する機能です。
通常、JDBC Driverは、JDBCのライブラリが使用できるプラットフォームからしかつなぐことができません。
しかし、MySQLやSQL Serverのプロトコルに擬態することで、その接続インターフェースを持っているツールからの連携を柔軟に実現することができるようになります!
例えば、Excelのデータベース接続や、Google Data PortalのMySQLインターフェース、PowerAppsのSQL Serverインターフェースで、CData JDBC Driverに接続し、連携先のSalesforceやDynamics 365といったAPIの機能を利用できるようになります。
使い方
それでは早速使い方を解説していきましょう。
今回は、前述の通り AWS EC2 にホスティングして、このJDBC Remorting機能を利用します。
使用するデータソースはSalesforceを選びましたが、以下のURLに存在するJDBC Driversのラインナップであれば、どれでも利用できます。
CData JDBC Driverのダウンロード
まず、CData JDBC Driverをダウンロードしてきます。
ダウンロードしたZipファイルを解凍すると「setuo.jar」ファイルが生成されます。これをAWS EC2上で実行します。
AWS EC2 Amazon Linux の立ち上げ
今回は最小環境で構成しますが、必要な性能要件は利用するデータソースや頻度、求めるパフォーマンスによって異なります。
今回はベーシックな「Amazon Linux 2 AMI(HVM) SSD Volume Type」
無料利用枠の対象である「t2.micro」で立ち上げました。
環境構成で唯一注意したい点はセキュリティグループの設定で開けるポートです。今回はMySQLのインターフェースを3306ポートで接続することになるので、以下のようにカスタムTCPでポートを許可しておきましょう。
環境構成後、SSHで接続しますが、今回はお手軽な EC2 Instance Connect で行いました。
JDK Install
EC2 Instance Connectでインスタンスにアクセスを行ったら、まずJDKをインストールします。今回は手軽にインストールできる yum から「java-1.8.0-openjdk」をインストールしました。
sudo yum install -y java-1.8.0-openjdk
JDBC Driver の配置・セットアップ
続いてCData JDBC Driverの「setup.jar」ファイルを配置します。今回は一度Amazon S3にsetup.jarファイルをアップロードして配置しました。
sudo wget https://XXXXX/cdata.connect.tar.gz
配置後、以下のコマンドを実行し、ダイアログに従ってセットアップを進めます。
sudo java -jar setup.jar
今回は /opt/cdataのフォルダにセットアップを行いました。
以下のようなフォルダ構成になります。
cdata]$ ls db help lib license.txt licensing.htm Uninstaller uninstall.ico
JDBC Remorting ファイルの構成
JDBC Remortingを構成するには、「lib/cdata.jdbc.salesforce.remoting.ini」ファイルをviなどで編集します。
最初はMySQLインターフェースを構成するサンプルがテンプレートとして記述されているので、これをベースに編集するのが良いでしょう。
必ず設定しなければいけない点は[database]にある接続文字列「salesforce = "User=myUser;Password=myPassword;Security Token=myToken;RTK=XXXXX;"」です。以下のページを参考に適切な接続プロパティを構成してください。
; Sample Configuration File ; CData JDBC Driver For Salesforce 2020J [mysqld] port = 3306 max-connections = 25 session-timeout = 20 client-timeout = 7200 logfile = SalesforceRemotingLog.txt verbosity = 2 logrotationscheme = 2 [mysql_vars] character_set_client = utf8 character_set_connection = utf8 version_comment = "CData JDBC Driver For Salesforce 2020J (MySQL Remoting)" [databases] salesforce = "User=myUser;Password=myPassword;Security Token=myToken;RTK=XXXXX;" salesforce_readonly = "User=myUser;Password=myPassword;Security Token=myToken;ReadOnly=True;RTK=XXXX;" [users] root = Password! test = Password! [acl] salesforce = root salesforce_readonly = root, test
各プロパティの詳しい内容は以下のヘルプで確認できます。
また、トライアルでは接続文字列にRTK設定を追加する必要があります。RTKはCDataテクニカルサポートで提供しているので、こちらから連絡してみてください。
JDBC Remorting の機能
「cdata.jdbc.salesforce.remoting.ini 」の設定が完了したら、JDBC Remorting を起動しましょう。以下のようなコマンドで起動できます。
sudo java -jar cdata.jdbc.salesforce.jar -f cdata.jdbc.salesforce.remoting.ini
以下のようなメッセージが表示されれば起動成功です。
Connection test successful. CData JDBC remoting daemon running on port 3306.
起動したら早速接続テストを行ってみましょう。
今回はMySQLインターフェースに擬態しているので、MySQL WorkbenchからJDBC Driverに接続することができます。
HostnameにAWS EC2のURLを指定し、予め設定したUsername:Passwordで接続しましょう。
あとは、通常通りRDBライクに使用できます。
例えばSalesforceの取引先を取得する「SELECT * FROM Salesforce.Account」というクエリを実行すれば、以下のようにSalesforceのAPIからデータをSQLライクに取得することができます。
他にも、以前Blogで紹介したローコードアプリ開発プラットフォームであるRetoolからも接続することができます。
Retoolのリソース一覧から「MySQL」を選択し
MySQL Workbenchに接続した時のように、AWS EC2の接続情報を入力します。
あとはアプリ上でクエリを実行することで、MySQLインターフェースを使って、Salesforceのデータを取得できます!
おわりに
このようにMySQLのインターフェースを備えていれば、様々なサービスからSalesforceやDynamics 365といったクラウドサービスのデータを扱えるようになります。
是非色々なツールからの連携を試してみてください。
ちなみに、このサービスにUIを付与して、クラウドホスティングしたサービスがCData Connectです。もしクラウドホスティング版を利用したい場合はこちらもお試しあれ。