Morning Girl

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

Azure Data Factoryを使って、API Server(OData)経由でSharePointからAzure SQLにデータをコピーしてみる

今日は最近気になっていたAzure Data Factoryを触ってみました。

ただ、Azure Data Factoryって何?って声も多いと思うので、まずざっくりと概要です。

個人的には、Azure 版SSISSQL Server Integration Service)って呼んじゃっていますが

公式から引用すると、クラウドの完全管理型 ETL/ELT サービスっていうのが一番しっくりくるかと思います。

azure.microsoft.com

2年前のですが、以下のBlogがとてもわかりやすくて参考になりました。

sqlazure.jp

日本マイクロソフトの大田さんのセッション資料もとてもわかりやすいです。

docs.com

最近V2もプレビューに入り、SSISとの統合もさらに進んで、今なかなか注目(個人的に)のAzure PaaSの一つです。

今回試してみたこと

Azure Datafactoryではウィザード形式でクラウドデータソース間でのデータコピーアクティビティが簡単に構成できます。

コピー アクティビティを使用したデータの移動(V1)

docs.microsoft.com

例えば、Azure SQL DatabaseからAzure Blob Storageに移動したり

CosumosDBからAzure Searchにデータを投げ込んだり

ただ、そこまでコネクタが多いわけではなく、かつAzure/Microsoft サービス系に偏っている感じです。

なので、今回私の大好きなODataコネクタを利用して、Datafacotryが対応していないデータソースをCData API Server経由で増やすというアプローチを試してみました!

以下のような感じです。

f:id:sugimomoto:20171219180345p:plain

API Serverがあれば、90種類ほどのデータソースをOdataとして扱えるようになります。

今回はその中からイメージしやすい一例としてSharePointをデータ・ソースに、Azure SQL にオールクラウド・オールPaaSでデータをコピーさせてみました。

ちなみにこの記事はCData Software User Group Advent Calendar 2017の19日目です。

qiita.com

接続元の構成

まずはそれぞれの接続サービスの確認です。

データソースはSharePint Onlineのタスクを対象にし、

f:id:sugimomoto:20171219180558p:plain

接続先はAzure SQL Databaseで、移行先のテーブルを以下のように構成しました。

f:id:sugimomoto:20171219180604p:plain

ODataとしてSharePoint接続を可能にするためのAPI Serveの構成

最初にSharePointをDatafactoryにつなげるようにするために、ハブとしてAPI Serverを構成します。

Azure Web Apps上にAPI Serverの構成する場合は、以下の記事を参照ください。

kageura.hatenadiary.jp

kageura.hatenadiary.jp

API Serveを構成後、SharePointの接続先を追加します。

f:id:sugimomoto:20171219180741p:plain

接続先一覧から、SharePointを選択し

f:id:sugimomoto:20171219180749p:plain

接続先となるSharePointサイトのURLとID・パスワードを入力します。

f:id:sugimomoto:20171219180755p:plain

接続後、リソースとしてタスクのエンドポイントを定義します。

リソースから[リソースを追加]をクリックし

f:id:sugimomoto:20171219180801p:plain

先程追加したSharePointの接続先を選択

f:id:sugimomoto:20171219180808p:plain

タスクが格納されているテーブルを選択し

f:id:sugimomoto:20171219180815p:plain

Azure SQLに連係する項目を選択します。

今回はシンプルにSubject、ID、AssingToだけにしています。

f:id:sugimomoto:20171219180820p:plain

あとは、接続時に使用するユーザーを構成すれば、準備完了です。

f:id:sugimomoto:20171219180828p:plain

Azure Data Factoryの構成

それでは、実際にAzure Data Factoryを構成していきましょう。

Azure管理ポータルから、Data Factoryを検索し[作成]をクリックします。

f:id:sugimomoto:20171219180833p:plain

コピーアクティビティは現在V1でしかウィザード形式で構成できないので、バージョンでV1を選択します。

それ以外は任意の値を入力してください。

f:id:sugimomoto:20171219180841p:plain

これだけで、Azure Data Factoryのベースは構成完了です。

コピーアクティビティの構成

さて、実際にデータコピーのアクティビティを構成します。

Azure Data Factoryの管理画面から、[データをコピー(プレビュー)]をクリックします。

f:id:sugimomoto:20171219180849p:plain

すると別ウィンドウで、ウィザード画面が立ち上がります。

ここでTaskNameと、今回は一回こっきりのコピーを試すので、[Task cadence or Task Schedule]から[Run Once Now]を選択して、[Next]をクリックします。

f:id:sugimomoto:20171219180914p:plain

次にコピー元のソースを選択します。

今回は先程構成したAPI ServerのSharePointに接続するので、ODataを選択します。

f:id:sugimomoto:20171219180919p:plain

ODataを選択後、Odata Connection のプロパティを定義する画面に移るので以下のように各種プロパティを設定します。

DataSourceType ← Cloud Data Sourceを選択

Service URL ← API ServerのWeb APIエンドポイントURLを指定

Authentication Type ← Basic Authenticationを選択

User Name ← API Serverで構成したユーザーIDを入力

Password ← API Serverで構成したユーザーのAuthトークンを入力

f:id:sugimomoto:20171219180930p:plain

正常にOdataに接続できれば、次の画面で以下のような形でAPI Serverで構成されたWeb API リソースの一覧が表示されます。

ここから、先程構成したSharePoint Taskのエンドポイントを選択し、データが正常に表示されていることを確認の上、[Next]をクリックします。

f:id:sugimomoto:20171219180935p:plain

次は、データコピー先の定義です。ちなみにOdataをデータコピー先に指定できないので、要注意。

今回コピー先はAzure SQL Databaseを対象にするので、以下の通り選択し[Next]をクリックします。

f:id:sugimomoto:20171219180942p:plain

Azure SQL Databaseの接続情報を入力して、[Next]をクリック(詳細は省きます)

f:id:sugimomoto:20171219180948p:plain

接続完了後、DestinationのプルダウンにAzure SQL Databaseのテーブル一覧が表示されるので、コピー先とするテーブルを選択します。

f:id:sugimomoto:20171219180958p:plain

あとは、データ・ソースと移送先の項目マッピングを行って完了になります。

ここで型が合わない等あればエラーが返ってくるので注意しましょう。

f:id:sugimomoto:20171219181004p:plain

最後に失敗時の細かな設定等が出てきますが、今回は割愛。

標準のまま[Next]をクリックします。

f:id:sugimomoto:20171219181010p:plain

全体構成の確認画面が出てくるので、確認の上[Next]をクリック

f:id:sugimomoto:20171219181019p:plain

Validationが通れば、コピーアクティビティの実行が開始されます。

f:id:sugimomoto:20171219181026p:plain

Datafactoryでちょっとおもしろいのが以下の画面ですよね。

このような画面で各種パイプラインの状況や接続先の情報、失敗・成功状況等がグラフィカルに確認できます。

(この画面で開発もできるようになればいいのにと思わずにはいれません。)

f:id:sugimomoto:20171219181034p:plain

無事Successになれば、以下のようにAzure SQL Databaseにデータのコピーが生成されます。

f:id:sugimomoto:20171219181045p:plain

おわりに

Azure はFlowやFunctions等、データ統合のサービスが様々あって楽しいですね。

中でもData Factoryはクラウド上でデータを集約するのに、とても向いているサービスだと思います。

是非、API Serverと繋いで、うまくクラウドデータをコントロールできればなーと思います。