Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

Dynamics 365 for Customer Engagement (Dynamics CRM) のデータを ローカルの SQL Server に1時間に1回バックアップする:CData Sync

クラウドサービスを使っていて、一番面倒なことの筆頭として、「バックアップどうするの?」があげられるんじゃないかなと思います。

もちろん、何を観点として「バックアップ」と言うのか? については多くの議論が必要になるでしょう。

Dynamics 365 自体もクラウドとしてディザスタリカバリやデータセンターのバックアップについては十分ちゃんとした対応を取っています。

でも、自分たちの手元に自分たちがコントロールできる状態にデータを持っておきたい、という考えはベンダーに依存するよりも健全であるし、多様なクラウドサービスの選択肢がある今の時代においては適切な判断ではないかと思っています。

それは採算やコスト度外視なアプローチではなく、現実的なラインで自分たちが適切にコントロールしメリットを感じられるスケールで行うことが大事かなと。

今回はそんなバックアップ手段の一つの選択肢として、Dynamics 365 for Customer Engagement のデータをローカルのSQL Serverにバックアップする方法を書き留めておきたいと思います。

どんな感じになるの?

API を使ってスクラッチで開発することも可能ですが、今回はお手軽に CData Sync というレプリケートツールを使って実現します。

f:id:sugimomoto:20190411210226p:plain

もともと Dynamics 365 (CRM)のオンプレミス時代を経験している方には馴染み深いと思いますが、まさにあのようなデータベースが見える状態に持っていくのが今回の目的です。

f:id:sugimomoto:20190411210236p:plain

1時間に1回というのは設定次第ですが、パフォーマンス的にもボトルネックになりづらく、ある程度リアルタイム性も持って、扱える頻度ではないかと考えての設定です。

ローカルのSQL Serverに同期してしまっているので、そのまま帳票ツールから接続したり、.NET アプリケーションもSQL Serverで開発する時と同じように使ってもらえます。

欠点としては、あくまでSQL Serverにレプリケートしているだけなので、実際のDynamics 365 環境には復元することができません。

その点は Dynamics 365標準のバックアップ機能を使うのが望ましいです。

f:id:sugimomoto:20190411210248p:plain

kageura.hatenadiary.jp

必要なもの

  • Dynamics 365 for Customer Engagement ユーザーアカウント

  • CData Sync

バックアップ手順

特に難しいところはありません。

接続先となるデータソースに Dynamics 365 のアカウントを設定し、

バックアップ先となるSQL Serverのアクセス情報を設定、

最後にバックアップ対象のエンティティやバックアップ頻度を設定します。

1. CData Syncのダウンロードとセットアップ

まず下記サイトから CData Syncをダウンロードしておきます。

今回は30日間のトライアル版を利用します。

https://www.cdata.com/jp/sync/

f:id:sugimomoto:20190411210303p:plain

インストール後、自動的に以下のような画面が立ち上がるので、セットアップの際に設定したユーザーIDとパスワードでログインします。

f:id:sugimomoto:20190411210316p:plain

2. データソースの設定

最初にデータソースの設定を行います。ここでは Dynamics 365のアカウントを設定するので、あらかじめ接続を行うユーザーアカウントや接続先のテナントURLを控えておいてください。

CData Syncの管理画面から「接続」→「接続の追加」→「Dynamics CRM」を選びます。

f:id:sugimomoto:20190411210324p:plain

もし、Dynamics CRM Portが無い場合は、こちらからダウンロードして追加することが可能です。

https://www.cdata.com/sync/download/#sources

f:id:sugimomoto:20190411210332p:plain

「Dynamics CRM」をクリックすると、接続情報を入力する画面が表示されるので、それぞれ

  • URL:接続先のDynamics 365 URLを入力(例:https://XXX.crm7.dynamics.com/)日本テナントの場合
  • User:ログインユーザー情報を入力(例:XXX@XXX.onmicrosoft.com)
  • Password:ログインユーザーのパスワードを入力
  • CRM Version:CRM Onlineを選択

f:id:sugimomoto:20190411210341p:plain

入力後、「接続のテスト」をクリックして、「Success」と表示されればOKです。

「変更を保存」をクリックして閉じます。

3. 同期先の設定

次に同期先となるSQL Serverの接続情報を入力します。

今回はあらかじめローカルのSQL Serverをインストールした状態から始めますが、SQL ServerではなくともMySQLPostgreSQL、もしくはAzure SQLでもかまいません。

対象のマシンから接続できるように、あらかじめPortの設定などは済ませておくといいです。

バックアップ処理を実施するアカウントも登録するので、アカウントはテーブルのCRUD操作ができるものを用意しておいてください。

先程と同じように「接続」→「接続の追加」の画面から、今度は「同期先」→「SQL Server」を選択します。

f:id:sugimomoto:20190411210351p:plain

Dynamics 365の時と同様な接続情報の入力画面が表示されるので、

  • Authentication:ログインするSQL Server ユーザーのタイプを選択します。
  • Server:接続先となるSQL Serverのサーバーアドレスを入力します。
  • Database:バックアップ先となるDBを指定します。対象のDBはあらかじめ作成しておきます。
  • User:バックアップ処理を行うSQL ServerのユーザーIDを入力します。
  • Password:対象ユーザーのパスワードを入力します。

f:id:sugimomoto:20190411210359p:plain

入力後、「接続のテスト」をクリックして、「Suceess」が表示されればOKです。

同じように変更を保存すれば、接続設定は完了です。

4. 同期ジョブの設定

最後に同期する対象のエンティティ選択や同期頻度を指定するジョブを作成します。

メニューから「ジョブ」→「ジョブを追加」をクリックします。

f:id:sugimomoto:20190411210408p:plain

最初に、データソースと同期先を指定します。初期状態であればおそらくそのまま作成した Dynamics 365とSQL Serverの設定が入力されていると思います。

もし複数DBや複数Dynamics 365の接続先を入力している場合は、ここでジョブ単位で変更することが可能です。

f:id:sugimomoto:20190411210417p:plain

次に同期対象となるエンティティ(テーブル)を指定します。

「+テーブルを追加」をクリックし

f:id:sugimomoto:20190411210425p:plain

表示されたエンティティ(テーブル)の一覧から、バックアップ対象を選択します。

f:id:sugimomoto:20190411210433p:plain

テーブルを設定後、最後に同期頻度として「スケジュール」を入力すれば設定完了です。

Run Jobで「Hourly」を選択すれば、1時間ごとに同期されます。

何時何分という項目はわかりづいらいですが、1時間毎の動機する「分」を指定します。10分を指定するば、1時10分、2時10分といった時間に同期されていきます。

もう少し細かな設定として、CRON式で入力することも可能です。

f:id:sugimomoto:20190411210439p:plain

ちなみに、一番下のタブには詳細設定として細かな同期処理の調整が可能なプロパティ一覧があります。

f:id:sugimomoto:20190411210449p:plain

それでは、実際に一度手動で同期してみたいと思いmさう。

「変更を保存」をクリックしてから、同期対象のテーブルを選択し「実行」を押します。

実際には「変更を保存」をクリックしたタイミングでジョブは構成され、次の時間のタイミングで同期が行われます。

f:id:sugimomoto:20190411210459p:plain

成功すれば以下のように同期されたレコード数が表示されます。

f:id:sugimomoto:20190411210506p:plain

これで、以下のようにSQL Serverにデータが同期されます。

1時間毎に設定したので、Dynamics 365上で作成、更新されたデータは自動的にSQL Serverに反映されます。

f:id:sugimomoto:20190411210518p:plain