Attunity Replicate と CData ODBC Driverを使って、MySQLにDynamics 365 Customer Engagement データを複製してみる


# はじめに

本記事ではAttunity Replicateを使って、Dynamics 365 Customer Engagement の顧客データ（取引先担当者）を取得し、MySQL に複製する方法を紹介します。

# Attunity Replicate とは？

Attunity Replicate とは Attunity社が提供するマルチプラットフォーム対応、高性能データレプリケーションツールです。
以下のようなUIをベースに、簡単な設定で高速なデータベース間レプリケートを実現します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/d3a017d0-81ef-0d00-07f4-25d47ad057a7.png)

https://www.insight-tec.com/products/Attunity/Replicate

>Attunity Replicateは、データベース、DWH、Hadoopなどの異なるソース/ターゲット間において、高速で簡単なリアルタイム・データ・レプリケーションを可能にするソリューションです。Time-to-Value (価値が生み出される時間)を短縮し、ビジネス・ニーズに最適化したデータ分析処理・分析基盤の構築を支援します。
>ビッグデータ時代といわれる今、企業は既存の情報資産を分析し、新たな価値を発見し、新しいビジネスをスタートさせるチャンスと言われています。データレプリケーション製品、Attunity Replicateはそんなデータ分析をスタートさせるための特効薬です。データベースに眠る既存の情報資産をクリック操作だけで、リアルタイムで、データウェアハウスに転送する事ができ、すぐにデータ分析を開始する事が可能です。

# 今回のシナリオ

今回は前述の通り、Attunity Replicateを使って、Dynamics 365 Customer Engagement から顧客データをMySQLにレプリケートしますが、通常Attunity ReplicateはDynamics 365 for Salesをデータソースとして扱うことはできません。

それはAttunity Replicateがどのように Dynamics 365 API側へリクエストを投げるべきかの判断材料やメタデータの情報が無いためです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/d06caa18-13c9-badd-50e6-0cadc440f8a5.png)


そこで、CData ODBC Dynamics 365 Driverを用いて、このボトルネックを解決します。

まず、Attunity Replicate からはODBCインタフェースでSQL（Select文）をCData Dynamics 365 ODBC Driverに向けて発行してもらいます。そのリクエストを受け取った、CData Dynamics 365 ODBC Driverは、Dynamics 365 の Web API のエンドポイントに対して、SQL文を解釈し、HTTPリクエスト形式に変換して発行します。

リクエスト後、JSONフォーマットで返ってきたデータセットはCData Dynamics 365 ODBC DriverがODBCインタフェースのResultsetに変換して Attunity Replicate に返します。

その後、Attunity Replicate は標準機能で TargetとなるDB、MySQLやSQL Server、MongoDBなどへデータを複製を行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/9db36b93-c0fc-7e6f-43d5-0c1419ee765c.png)

# 必要なもの

1.Attunity Replicate
2.Dynamics 365 Customer Engagement カウント
3.CData Dynamics 365 Driver

# 実施手順

# Attunity Replicateのインストール

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/6e19a368-5970-931b-40bc-a0303537c6d3.png)


## CData Dynamics 365 ODBC Driverのインストール

以下のサイトから評価版ビルドをダウンロードします。

- [CData Dynamics 365 ODBC Driver](http://www.cdata.com/jp/drivers/d365sales/odbc/)

ダウンロードされたインストーラ形式(.exe)のファイルを起動します。
(注)ODBCデータアドミニストレーターを閉じてから実行してください。
(注)途中オンラインでのアクティベーションが実行されるためインターネットアクセス出来る環境で行ってください。

下記のようなインストーラが起動するので、ライセンス契約書を確認した上で、デフォルト設定のままインストールを進めて完了させます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/fb7fb1c4-88a3-f1f4-a4b9-da3c9a325589.png)

インストールが完了するとデフォルトブラウザが起動して製品ヘルプファイルが起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/b56230af-d0ad-0b77-6e67-471c3ae9871b.png)


また、ODBCのDSN構成ダイアログが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/943f9cd2-f2f7-b403-d1b2-0eb6201d1ebd.png)


（注）ODBCデータソースアドミニストレーターはマシンのビット数（32bit, 64bit）にあった方をご利用ください。

## CData Dynamics 365 ODBC Driverの接続設定

ODBCのDSN設定

起動した「ODBCのDSN構成」ダイアログ内の下記の項目に、事前に取得したDynamics 365 の接続情報を設定します。

| Dynamics 365 の接続情報 | 設定項目 |
|:-----------------|------------------|
| 組織URL（例えばhttps://test.crm7.dynamics.com） | Organization URL|

「接続テスト」ボタンをクリックします。すると下記のようにDynamics 365 APIを利用するためのOAuth認証フローが実行されます。

対象となるユーザー情報でログインし

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/f248a75d-1975-9978-433a-604cce22e6f1.png)

以下のアクセス許可を承諾してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/0957c16d-99c2-d50c-8170-43f54f77e8fc.png)

承諾後、以下のように「接続テストに成功しました」と表示されれば、設定完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/cb80a92d-9c05-9ee4-6440-62322365e8a4.png)

## Attunity Replicate のタスクを作成

それでは、実際に Attunity Replicate を用いて、Replicateの構成を行っていきます。

まず、Attunity Replicate を立ち上げて新しい同期タスクの作成を行います。タスクの作成には、「＋ New Task」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/2423e909-da82-2ebf-0e74-d41de6ad5e46.png)

任意のTask Nameを設定し、Task Operationは「Full Load」を選択します。

（ODBC接続の場合はFull Loadを選択する必要があります。）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/77396d30-9fae-1f42-a88e-7f59c707aabc.png)

入力後「OK」をクリックすれば、タスクの作成は完了です。

## Endpoint Connection (Souce)の設定

続いて、ODBCへの接続設定を行います。

画面右上の「Manage Endpoint Connections」からAttunity Replicateに登録されている接続情報を管理できる画面へ移動できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/71531f53-9675-92ba-8713-c716bad3f2cd.png)

この画面から、複製元となる「Source」と複製先となる「Target」の接続情報を構成していきます。

まず「Source」を構成します。

「＋ New Endpoint Connection」をクリックすると、新しく接続情報入力画面が表示されるので、任意の名称を入力の上「Role：Source」「Type：ODBC」を選択します。

ODBC選択後、「Browse」のボタンをクリックすると、ODBC DSNの一覧画面に移動できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/cb0c2a13-6dc9-10a3-6c8b-c2bb40ac0742.png)

この画面から、先程構成したDynamics 365 ODBC DSNを選択し「OK」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/9e47b347-f255-ee99-2ff7-2a28dbd0afea.png)

「Test Connection」をクリックし接続が成功すれば、Saveを行って接続先の作成は完了となります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/07bc63e8-fe35-35b8-e726-4379a4164fca.png)

## Endpoint Connection (Target)の設定

続いて、複製先となる「Target」の接続情報を構成します。

本記事ではLocalhostにインストール済みのMySQLを対象とします。

先程と同じように「＋ New Endpoint Connection」をクリックし、任意のNameを入力の上、今度は「Role：Target」を設定し、「Type：MySQL」を選択します。

MySQLのServer・Port・Username：Passwordを入力すると、「Browse」ボタンからデータベースの一覧画面に移動できるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/1bf731ee-1e7c-5cca-04cc-79f191ba6f21.png)

この画面から複製先の対象となるデータベースを選択し「OK」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/3fa11f07-5099-d664-693d-7b90b8256b3d.png)

「Test Connection」ボタンをクリックし、接続が成功したら「Save」をクリックして、接続先情報の作成は完了となります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/7d0f75f0-d258-b432-cd59-b20b7c895fdc.png)

## SourceとTargetの接続とマッピングの調整

それぞれの接続情報の作成が完了しましたので、最後にSourceとTargetの紐づけ、同期のマッピング設定を行います。

以下のようにTask画面にて、作成したSourceとTargetの接続情報を適切にドラッグ・アンド・ドロップで配置します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/23421367-2dcd-abd4-62c3-0a140715841f.png)

次に同期先のテーブルを決定するため、画面右上の「Table Selection」をクリックし

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/7480ae4d-a531-3010-7402-01153faa9dad.png)

スキーマを検索し、テーブル一覧を表示します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/7069dae4-896b-853a-131d-53a45a9dd628.png)

一覧から複製したいテーブルを「Selected Tables/Views」のリストボックスに移動させることで、同期対象のテーブルを決定できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/c5ec4129-2002-6e8e-e081-a95ac68b4fd2.png)

次に、同期対象となるカラムを確認します。

同期対象となるカラムはSelected Tablesの一覧の対象テーブルをダブルクリックし

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/ed294971-437f-c9f5-3db2-b07e6ef6da75.png)

「Transform」タブに移動することで確認できます。この画面で「Output」の一覧に表示されているカラムが同期対象となるカラムです。

任意のカラムを選択し、「OK」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/b5ab7723-d39c-79f7-828f-206d1f11b6ba.png)

以上で同期タスクの作成は完了です。

## 実行

それでは実際に同期処理を手動で実行してみます。

手動の実行はTask画面の「Run」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/d62fa057-ab8f-322a-e6bd-cc2fb8acc04b.png)

同期処理が開始されると以下のような画面で同期の状況を確認可能です。Complete ゲージが満杯になれば同期完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/638e476a-9dad-70f0-60c8-a62fee3abde8.png)

今回はDynamics 365 Customer Engagement の以下のデータを対象としました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/35c2b02c-91ff-67c3-96ee-77a3be48affc.png)

それが、Attunity Replicateを実行することで、以下のようにMySQLに複製されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/ba3e47e7-2fea-834d-dad7-1e8a5c54d945.png)

あとは、MySQLのデータとして利用が可能ですので、DWH的に利用したり、各種プログラムから扱ったりと、通常Dynamics 365 の認証やAPI仕様を把握して、利用しなければいけないところを、そのままMySQLのデータとして利用することができるようになります。

# おわりに

今回は Dynamics 365 Customer Engagement のデータを取得してみましたが、CData では Dynamics 365 Customer Engagement 以外にもおよそ100種類ほどの ODBC Driver を提供しています。

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

ERP・CRM・NoSQLやSNS等、様々なツールからODBC 経由でデータが取得できるので、是非 Attunity Replicate と組み合わせて様々なデータレプリケートに役立ててみてもらえればと思います。