こんにちは、CDataの宮本です。
今回はGCP のCompute Engine(GCE) 上にCDataSync をホスティングさせて、Salesforce からBigQuery にレプリケートする方法についてご紹介いたします。
必要なもの
- Salesforce アカウント
- GCP アカウント
- レプリケート先として使用するBigQuery のデータセット
GCP 上にCDataSync をホスティングする手順
基本的な流れは、VMインスタンス作成、ファイアウォールの設定、CDataSync のインストールとなります。
ちなみにCData Sync はwarファイルをデプロイするか、インストールするかの方式があります。war ファイルのデプロイであれば、JettyやTomcat、WebLogicなどサーブレットコンテナ上で起動でき、インストーラーを実行する方式であれば組み込みのJettyサーバーを使用してCData Sync が起動されます。
今回は後者のインストーラーでCData Sync をインストールする方式でやっていきます。
GCE を作成
サイドメニューから「Compute Engine」→「VMインスタンス」をクリックします。
「インスタンスを作成」をクリックします。
今回はCentOS で使用します。
HTTP、HTTPSにチェックをつけます。
ここでは外部用のIPアドレスを設定します。
HTTPだけの利用であればデフォルト設定だけで良いのですが、HTTPS での接続の場合、インスタンスの起動停止でIPアドレスが毎回変わってしまうと接続できなくなってしまうため、ここで静的IPアドレスを取得し、「完了ボタン」をクリックします。
ひと通り設定しましたら、画面下部にある「保存ボタン」をクリックして、インスタンスを作成します。
CData Sync のポートを開放
HTTPでの接続には8181、HTTPSでの接続には8443 を使用するようデフォルトでは設定されていますので今回はそのまま流用していきます。
ではさっそくポートの開放をしていきます。
GCP にメニューから VPCネットワーク → ファイアウォール の順にクリックします。
ファイアウォール ルールを作成をクリックします。
このファイアウォールの名前とターゲットタグを任意の名前で設定し、送信元のIP アドレスは今回は全て対象にするために 0.0.0.0/0 を設定しています。
次に、「指定したプロトコルとポート」とtcp を選択し、 8181,8443 を指定して、作成ボタンをクリックします。
今度は先ほど作成したGCE のインスタンスを編集します。ネットワークタグにファイアウォールで作成したタグ(今回はcdatasyncというタグを作成)を設定します。
これで、CData Sync が使用するポートの開放設定が完了しました。
CData Sync のインストール
インストーラーのダウンロード
まずはCData のWebサイトからダウンロードします。右上にある「ダウンロードボタン」をクリックします。
https://www.cdata.com/jp/sync/
Cross-Platform 版のJavaエディションを選択します。
各項目入力後、ダウンロードボタンをクリックしてインストーラーをダウンロードします。
インストーラーのアップロード
ダウンロードしたインストーラーをGCE にアップロードするために、コンソール画面を開きます。開き方は対象インスタンスの接続のプルダウンから「ブラウザウィンドウで開く」をクリックします。
右の歯車アイコンから「ファイルをアップロード」クリックし、先ほどダウンロードしたインストーラーをアップロードします。
CData Sync のインストール
インストールを始める前に、Java が入っていない場合はインスタンスにインストールしておきます。
sudo yum install java-1.8.0-openjdk
jar ファイルを実行してCDataSync をインストールします。
sudo java -jar setup.jar
これでインストールが完了です。
HTTP でCData Sync を起動
では、CDataSync を起動します。インストールディレクトリに移動し、datasync.jar を実行します。 ※インストーラーを実行してそのまま起動を行うとした場合は既に起動されています。
以下のメッセージが表示されましたらOKです。
それではCData Sync にアクセスします。GCE のIPアドレスと8181 ポートでアクセスします。
正常にアクセスできれば、以下のようにログイン画面が表示されますので「admin/admin」 でログインします。
ログインすると、アクティベートされていないメッセージが表示されていますので、情報タブより「30日間の評価版をアクティベート」からアクティベートを行ってください。
※ライセンスキーをお持ちの方は、左の「新しいライセンスをインストール」からアクティベートします。
アクティベートされますと以下のようなメッセージに切り替わります。
これでHTTP での接続が完了しました。
Salesforce の接続設定
それでは、最初にSalesforce の接続設定を行います。
「接続」タブより下記画面に遷移し、赤枠の「データソース」を選択し、Salesforceアイコンを選択します。
次に接続設定画面で接続情報を入力していきます。 接続するにあたり、プロキシ設定やログ出力設定、タイムアウト設定などさまざまな設定を行うことができますが、今回は最低限接続できる下記項目だけを設定していきます。
- User:Salesforce に登録しているアカウント
- Password:Salesforce に登録しているアカウントのパスワード
- Security Token:Salesforce に登録しているアカウントに対して発行されたセキュリティトークン
では、これより同期先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 のファイアウォール設定で定義済み)
以上でCData Sync のHTTPS化の設定が完了しましたので、インストールディレクトリに戻ってdatasync.jar を実行して正常に起動されることを確認します。
正常に起動されれば設定は以上となります。
BigQuery の接続設定
接続画面の同期先タブをクリックし、BigQueryを選択します。
BigQuery の使用するプロジェクトとデータセット名を入力し、接続ボタンをクリックします。
使用するGCPアカウントを選択後、以下の画面が表示されますので、CDataSync からBigQuery へのアクセス許可を行います。
接続が完了しましたら、「変更を保存ボタン」をクリックし保存します。
ジョブの作成~実行
実際にレプリケートを行うジョブの設定を行っていきます。
内容は以下記事の「同期ジョブの設定」からご参照ください。同手順でジョブを作成することができます。
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やOracle、SQLServerなどのデータベースを選択することも可能です。また、30日間無料で利用できますので是非この機会にお試しください!