Morning Girl

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

Azure Datafactory(V2)にSSIS(SQL Server Integartion Service)パッケージをデプロイしてみた

この前Azure Datafactoryの記事を書いたんですが

kageura.hatenadiary.jp

勉強会でAzure DatafactoryV2なら、SSISパッケージをデプロイして、実行できる! というのを聞きまして、試してみました。

docs.microsoft.com

Azure で SSIS パッケージを配置、実行、および監視する | Microsoft Docs

ちなみにこの記事はMicrosoft Azure Advent Calendar 2017の23日目です!

qiita.com

どんなことができるの?

SSISを知っている人なら、わかりやすいと思いますが、

以下のようなデータの移行や処理の機能をAzure Datafactory上で実行できるようになりますよ! というものです。

f:id:sugimomoto:20171223003703p:plain

それだけといえば、それだけなのですが、IaaSの基盤を必要とせず、PaaSベースでETL/EAIの機能が使えるようになるというのは結構大きいのではないかと思います。

必要なもの

・Azure サブスクリプション

SQL Server

・SSDT(SQL Server Datatools)

・SSMS(SQL Server Management studio)

PowerShell

・Azure Powershell (最新版がよろしいかと)

docs.microsoft.com

構築手順

さて、実際に構築をしていきたいと思います。

全体のステップとしては以下のような感じなんですが

1.Azure SQL Serverの構成

2.Azure Datafactory(V2)の構成

3.Azure IRの構成・起動

4.デプロイするSSISパッケージの作成

5.SSISプロジェクトのインポート

6.SSISパッケージの配置・実行

たぶん、Azure IRってなんなんだ? ってなると思います。

これは、Azure Datafactory上でSSISパッケージを動かすために必要となるIR(統合ランタイム)です。

docs.microsoft.com

実はAzure IRにはSSISの実行以外にもランタイムの機能が提供されていますが、今回は解説しませんので詳しくは上記資料からどうぞー。

各種Azureのリソースを構成

さて、最初にAzureの各種リソースを構成したいと思いますが、悲しいことにAzure IRは今のところ構成用のUIが提供されていません。

docs.microsoft.com

なので、PowerShellスクリプトベースで実行する必要があります。

以下に、なんにもリソースが無い状態から全部生成するためのPowerShellスクリプトのベースを配置しましたので、ご参考までにどうぞ。

最終的には、以下のような3種類のリソースが構成されます。

f:id:sugimomoto:20171223003815p:plain

SSISプロジェクト・パッケージの作成

続いて、SSDTを用いて、SSISプロジェクトおよびパッケージを作成します。

ここは通常のSSISの使い方で大丈夫です。

f:id:sugimomoto:20171223003823p:plain

今回は単純にAzure SQLのテーブル間コピーを実行するだけのパッケージです。

クラウドにアップするので、やはり全部クラウド上で構成されているものがやりやすくていいですね。

f:id:sugimomoto:20171223003829p:plain

SSISプロジェクトをデプロイ

それでは、作成したSSISプロジェクトをデプロイしてみましょう。プロジェクトをデプロイした後に、パッケージを配置することで、パッケージを実行できるようになります。

ここでは、SSMS(SQL Server Managerment Studio)を使った方法を紹介します。(色々方法があるっぽいですが、これしか試せていません)

まず、SSMSを立ち上げて、普通に[データベースエンジン接続]をクリックします。

f:id:sugimomoto:20171223003836p:plain

ここで、最初のポイントです。

ただ、Azure SQL Serverに接続するのではなく、[オプション]をクリックします。

f:id:sugimomoto:20171223003842p:plain

ここの[接続プロパティ]タブの[データベースへの接続]で[SSISDB]を入力し

f:id:sugimomoto:20171223003847p:plain

改めてログインタブへ戻って、事前に作成したAzure SQL Serverの接続情報を入力してから、接続します。

この事前のSSISDBの指定が無いと駄目です。

f:id:sugimomoto:20171223003854p:plain

すると、以下のような感じでデータベース配下に、[Integration Service カタログ]、[SSISDB]が表示され、SSISパッケージをデプロイできるようになります。

f:id:sugimomoto:20171223003859p:plain

さて、SSISパッケージをデプロイと行きたいところですが、その前にフォルダーを作成する必要があるので、作成しましょう。

[SSISDB]を右クリックし[フォルダーの作成]をクリックします。

f:id:sugimomoto:20171223003903p:plain

適当な名前を入力し[OK]をクリック。

f:id:sugimomoto:20171223003909p:plain

その後、[プロジェクトフォルダ]と[環境フォルダ]が自動生成されるので、このプロジェクトフォルダに対して、パッケージを構成していきます。

[プロジェクト]フォルダを右クリックし[パッケージのインポート]をクリックします。

f:id:sugimomoto:20171223003918p:plain

あとは、ある程度ウィザードに従って、構成していくだけです。[次へ]をクリックし

f:id:sugimomoto:20171223003924p:plain

SSISのパッケージが配置されたフォルダを指定して[次へ]をクリック

f:id:sugimomoto:20171223003931p:plain

デプロイするSSISパッケージを選択した上で、[次へ]をクリックします。

f:id:sugimomoto:20171223003940p:plain

任意のプロジェクト名を入力し

f:id:sugimomoto:20171223003947p:plain

そのまま[次へ]

f:id:sugimomoto:20171223003955p:plain

ここもとりあえず[次へ]進みます。

f:id:sugimomoto:20171223004004p:plain

f:id:sugimomoto:20171223004009p:plain

f:id:sugimomoto:20171223004016p:plain

最後に[変換]をクリックすると、

f:id:sugimomoto:20171223004022p:plain

SSISプロジェクトがSSISDB上にデプロイされます。

f:id:sugimomoto:20171223004030p:plain

SSISパッケージの配置

プロジェクトのデプロイが完了したので、ようやく実行するためのパッケージを配置します。

これによってようやくパッケージが実行できる状態が整います。

プロジェクトデプロイ後、自動的に以下の画面が表示されるので[次へ]をクリック

f:id:sugimomoto:20171223004044p:plain

プロジェクトの配置先サーバとして、事前に構成したAzure SQL Serverの情報を入力し、[構成]をクリック。接続完了後[次へ]をクリックします。

f:id:sugimomoto:20171223004052p:plain

これで[配置]をクリックすると

f:id:sugimomoto:20171223004058p:plain

パッケージがAzure SQL Server上に配置され

f:id:sugimomoto:20171223004105p:plain

以下のように実行できうようになります!

プロジェクト配下のパッケージを右クリックし、[実行]をクリックしてみましょう。

f:id:sugimomoto:20171223004110p:plain

とりあえず、一回だけ起動するので、そのまま[OK]をクリック

f:id:sugimomoto:20171223004118p:plain

実行状況は以下のようなレポートで確認することが可能です。

f:id:sugimomoto:20171223004125p:plain

無事完了しました!

f:id:sugimomoto:20171223004134p:plain

データもうまく移行されていました。

f:id:sugimomoto:20171223004140p:plain

おわりに

いやぁ、正直結構たいへんでした。

PowerShellはそうでもなかったんですが、Deployする方法が、なかなか回りくどく、調べるのに苦労しました・・・。

PowerShellでデプロイもできるはずなので、そのあたりは追々調べていきたいと思います。