CData Software Blog

クラウド連携のCData Software の技術ブログです。

CDataSyncをGoogle Cloud PlatformでHTTPS化(SSL化)してホスティングする方法

f:id:sennanvolar44:20200803234707p:plain こんにちは、CDataの宮本です。

今回はGCP のCompute Engine(GCE) 上にCDataSync をホスティングさせて、Salesforce からBigQuery にレプリケートする方法についてご紹介いたします。

必要なもの

GCP 上にCDataSync をホスティングする手順

基本的な流れは、VMインスタンス作成、ファイアウォールの設定、CDataSync のインストールとなります。
ちなみにCData Sync はwarファイルをデプロイするか、インストールするかの方式があります。war ファイルのデプロイであれば、JettyやTomcatWebLogicなどサーブレットコンテナ上で起動でき、インストーラーを実行する方式であれば組み込みのJettyサーバーを使用してCData Sync が起動されます。
今回は後者のインストーラーでCData Sync をインストールする方式でやっていきます。

GCE を作成

サイドメニューから「Compute Engine」→「VMインスタンス」をクリックします。
f:id:sennanvolar44:20200803153546p:plain

インスタンスを作成」をクリックします。
f:id:sennanvolar44:20200803153415p:plain

今回はCentOS で使用します。
f:id:sennanvolar44:20200803153843p:plain

HTTP、HTTPSにチェックをつけます。
f:id:sennanvolar44:20200803154000p:plain

ここでは外部用のIPアドレスを設定します。
HTTPだけの利用であればデフォルト設定だけで良いのですが、HTTPS での接続の場合、インスタンスの起動停止でIPアドレスが毎回変わってしまうと接続できなくなってしまうため、ここで静的IPアドレスを取得し、「完了ボタン」をクリックします。
f:id:sennanvolar44:20200803154313p:plain

ひと通り設定しましたら、画面下部にある「保存ボタン」をクリックして、インスタンスを作成します。

CData Sync のポートを開放

HTTPでの接続には8181、HTTPSでの接続には8443 を使用するようデフォルトでは設定されていますので今回はそのまま流用していきます。

ではさっそくポートの開放をしていきます。
GCP にメニューから VPCネットワーク → ファイアウォール の順にクリックします。
f:id:sennanvolar44:20200611174443p:plain

ファイアウォール ルールを作成をクリックします。 f:id:sennanvolar44:20200611174609p:plain

このファイアウォールの名前とターゲットタグを任意の名前で設定し、送信元のIP アドレスは今回は全て対象にするために 0.0.0.0/0 を設定しています。 次に、「指定したプロトコルとポート」とtcp を選択し、 8181,8443 を指定して、作成ボタンをクリックします。
f:id:sennanvolar44:20200803161058p:plain

今度は先ほど作成したGCE のインスタンスを編集します。ネットワークタグにファイアウォールで作成したタグ(今回はcdatasyncというタグを作成)を設定します。
f:id:sennanvolar44:20200803161205p:plain

これで、CData Sync が使用するポートの開放設定が完了しました。

CData Sync のインストール

インストーラーのダウンロード

まずはCData のWebサイトからダウンロードします。右上にある「ダウンロードボタン」をクリックします。

https://www.cdata.com/jp/sync/
f:id:sennanvolar44:20200803161635p:plain

Cross-Platform 版のJavaエディションを選択します。
f:id:sennanvolar44:20200803161815p:plain

各項目入力後、ダウンロードボタンをクリックしてインストーラーをダウンロードします。
f:id:sennanvolar44:20200803162054p:plain

インストーラーのアップロード

ダウンロードしたインストーラーをGCE にアップロードするために、コンソール画面を開きます。開き方は対象インスタンスの接続のプルダウンから「ブラウザウィンドウで開く」をクリックします。
f:id:sennanvolar44:20200803162558p:plain

右の歯車アイコンから「ファイルをアップロード」クリックし、先ほどダウンロードしたインストーラーをアップロードします。 f:id:sennanvolar44:20200803162849p:plain

CData Sync のインストール

インストールを始める前に、Java が入っていない場合はインスタンスにインストールしておきます。
sudo yum install java-1.8.0-openjdk
f:id:sennanvolar44:20200803163911p:plain

jar ファイルを実行してCDataSync をインストールします。
sudo java -jar setup.jar
f:id:sennanvolar44:20200803164257p:plain

これでインストールが完了です。

HTTP でCData Sync を起動

では、CDataSync を起動します。インストールディレクトリに移動し、datasync.jar を実行します。 ※インストーラーを実行してそのまま起動を行うとした場合は既に起動されています。 f:id:sennanvolar44:20200803164901p:plain

以下のメッセージが表示されましたらOKです。
f:id:sennanvolar44:20200803165009p:plain

それではCData Sync にアクセスします。GCE のIPアドレスと8181 ポートでアクセスします。
正常にアクセスできれば、以下のようにログイン画面が表示されますので「admin/admin」 でログインします。
f:id:sennanvolar44:20200803165221p:plain

ログインすると、アクティベートされていないメッセージが表示されていますので、情報タブより「30日間の評価版をアクティベート」からアクティベートを行ってください。
※ライセンスキーをお持ちの方は、左の「新しいライセンスをインストール」からアクティベートします。
f:id:sennanvolar44:20200803165526p:plain

アクティベートされますと以下のようなメッセージに切り替わります。
f:id:sennanvolar44:20200803165836p:plain

これでHTTP での接続が完了しました。

Salesforce の接続設定

それでは、最初にSalesforce の接続設定を行います。
「接続」タブより下記画面に遷移し、赤枠の「データソース」を選択し、Salesforceアイコンを選択します。
f:id:sennanvolar44:20190729084201p:plain

次に接続設定画面で接続情報を入力していきます。 接続するにあたり、プロキシ設定やログ出力設定、タイムアウト設定などさまざまな設定を行うことができますが、今回は最低限接続できる下記項目だけを設定していきます。

  • User:Salesforce に登録しているアカウント
  • Password:Salesforce に登録しているアカウントのパスワード
  • Security Token:Salesforce に登録しているアカウントに対して発行されたセキュリティトーク

f:id:sennanvolar44:20190729095250p:plain


では、これより同期先DBのBigQuery の接続設定を行っていこうと思いますが、 注意点としてCData Sync にlocalhost で接続する以外は、BigQuery の認証の際に少し設定が必要となります。
1つはサービスアカウントでの接続を行う方法、もう1つはHTTPS でCData Sync を起動させてから認証を行う方法です。

今回は後者のHTTPS 化を行う設定を行っていきます。サービスアカウントで接続を行いたい場合は以下の記事をご参考ください。
www.cdatablog.jp

HTTPS でCData Sync を起動

証明書の準備になりますが、現在手元に有効な証明書がないので、ダミーの証明書を作って対応していきます。

まずはインストールディレクトリにkeystore というディレクトリを作成します。

[miyamotok@cdatasync-gcp ]$ pwd
/opt/datasync
[miyamotok@cdatasync-gcp ]$ sudo mkdir keystore
[miyamotok@cdatasync-gcp ]$ cd keystore/

その中にダミー用の証明書を以下のコマンドで作成します。
「What is your first and last name?」の回答にはインスタンスのホスト名かIPアドレスを設定してください。

[miyamotok@cdatasync-gcp keystore]$ sudo keytool -genkey -alias cdatasync -keyalg RSA -keystore dummy.keystore -validity 3650
Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  XX.XXX.XXX.XXX
What is the name of your organizational unit?
  [Unknown]:  cdata
What is the name of your organization?
  [Unknown]:  cdata
What is the name of your City or Locality?
  [Unknown]:  cdata
What is the name of your State or Province?
  [Unknown]:  cdata
What is the two-letter country code for this unit?
  [Unknown]:  ja
Is CN=XX.XXX.XXX.XXX, OU=cdata, O=cdata, L=cdata, ST=cdata, C=ja correct?
  [no]:  y

Enter key password for <cdatasync>
        (RETURN if same as keystore password):  
Re-enter new password: 

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore dummy.keystore -destkeystore dummy.keystore -deststoretype pkcs12".
[miyamotok@cdatasync-gcp keystore]$ 
[miyamotok@cdatasync-gcp keystore]$ ll
total 4
-rw-r--r--. 1 root root 2237 Aug  3 08:27 dummy.keystore
[miyamotok@cdatasync-gcp keystore]$   

証明書の作成が完了しましたら、インストールディレクトリのwebapp 配下にあるdatasync.xml を修正します。
例:/opt/datasync/webapp/datasync.xml

httpConnectorの定義の中に以下の内容を追加します。(KeyStorePassword の内容は証明書を作成したときに設定したもの)

        <Arg name="sslContextFactory">
          <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
            <Set name="KeyStorePath"><SystemProperty name="sync.home" default="." />/keystore/dummy.keystore</Set>
            <Set name="KeyStorePassword">xxxxxxxx</Set>
          </New>
        </Arg>

次に、8181で定義しているポートを8443 に変更します。(8443はGCPファイアウォール設定で定義済み)
f:id:sennanvolar44:20200803230038p:plain

以上でCData Sync のHTTPS化の設定が完了しましたので、インストールディレクトリに戻ってdatasync.jar を実行して正常に起動されることを確認します。

f:id:sennanvolar44:20200803230409p:plain

正常に起動されれば設定は以上となります。

BigQuery の接続設定

接続画面の同期先タブをクリックし、BigQueryを選択します。
f:id:sennanvolar44:20200803231310p:plain

BigQuery の使用するプロジェクトとデータセット名を入力し、接続ボタンをクリックします。
f:id:sennanvolar44:20200803231526p:plain

使用するGCPアカウントを選択後、以下の画面が表示されますので、CDataSync からBigQuery へのアクセス許可を行います。
f:id:sennanvolar44:20200803231730p:plain

接続が完了しましたら、「変更を保存ボタン」をクリックし保存します。

ジョブの作成~実行

実際にレプリケートを行うジョブの設定を行っていきます。
内容は以下記事の「同期ジョブの設定」からご参照ください。同手順でジョブを作成することができます。
www.cdatablog.jp

CentOS に CData Sync をサービスとして登録

通常の実行方法である「java -jar sync.jar」では フォアグラウンド実行となってしまい、 SSH が切れたタイミングで CData Sync が止まってしまうので、CData Sync をインスタンスにサービス登録して SSH の影響を受けないようにします。
※インストール直後はバックグラウンドでサービスが起動されます。

CData Sync ではサービスに簡単に登録できるスクリプトが用意されています。
では、さっそく実行してみます。

[user1@centos sync]$ cd /opt/sync/
[user1@centos sync]$ sudo ./service 
JAVA: [/bin/java]
PRODUCT_HOME: [/opt/sync]
Installing CData Sync service into /etc/systemd/system/sync.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sync.service to /etc/systemd/system/sync.service.
Done
[user1@centos sync]$ 

ここでもし以下のようなエラーが発生した場合は、手動で sync というグループを作成したあとに、再度 service スクリプトを実行してください。

[user1@centos sync]$ sudo ./service 
JAVA: [/bin/java]
PRODUCT_HOME: [/opt/sync]
chown: invalid group: ‘sync:sync’

グループ作成コマンド

[user1@centos sync]$ sudo groupadd sync

これでサービスに登録されたので systemctl コマンドで CData Sync の起動・停止・再起動を操作することができるようになり、SSH が切れた後でも起動し続けられるようになりました。

[user1@centos sync]$ sudo systemctl start sync
[user1@centos sync]$ sudo systemctl stop sync
[user1@centos sync]$ sudo systemctl restart sync

おわりに

いかがでしたでしょうか。今回はGoogle Compute Engine にCData Sync をホスティングするところをメインにご紹介いたしました。
CData Sync ではSalesforce、BigQuery 以外にもkintone やMarketo、スマレジなどのデータソース、RedShiftやOracleSQLServerなどのデータベースを選択することも可能です。また、30日間無料で利用できますので是非この機会にお試しください!

www.cdata.com