Azure SynapseからSharePoint Online上のファイルを直接参照してデータロードする手順の紹介

技術者が語るMicrosoft Azure

利用者が日々メンテナンスするファイルを自動でAzure Synapseへアップロードできるようにしたいという要望はよくあると思います。

今回はその手順を紹介します。

1. SharePoint Online側の設定

まずは、Azure SynapseからSharePoint Onlineへアクセスできるようにする必要があります。
SharePoint Onlineの「サイト管理者」権限を持つユーザーで以下の設定を実施してください。

1-1. アプリIDを作成

https://[company_name].sharepoint.com/sites/[site_name]/_layouts/15/appregnew.aspxにブラウザでアクセスします。

[company_name]にはご自身の環境の値を、[site_name]にはアクセス権を設定するサイト名を指定してください。
以下のようなアプリ情報登録画面が表示されます。

1-2.各項目を設定・入力

①~⑤までの設定を行い、最後に⑥の「作成」を押します(1-1の画像参照)。

①クライアントID:「生成」ボタンを押して値を生成します。
(※この値は次の手順およびAzure Synapse側での設定で必要になりますので、どこかにコピーしておくことをお勧めします)
②クライアントシークレット:「生成」ボタンを押して値を生成します。
(※この値はAzure Synapse側での設定で必要になりますので、どこかにコピーしておくことをお勧めします)
③タイトル:アプリの表示名になります。
任意の値で問題ありませんが目的(Azure Synapse用の権限設定など)が分かるような値を推奨します。
④アプリ ドメイン:「www.localhost.com」とします(これ以外でも問題はありません)。
⑤リダイレクト先のURI:「https://www.localhost.com」とします(これ以外でも問題はありません)。

正常に作成されたことを確認し、「OK」を押します。

1-3. アプリへの権限付与

https://[company_name].sharepoint.com/sites/[site_name]/_layouts/15/appinv.aspxにブラウザでアクセスします。
手順1-1と同様ですが[company_name]にはご自身の環境の値を、[site_name]にはアクセス権を設定するサイト名を指定してください。

以下のような設定画面が表示されます。

①~③まで設定し、④の「作成」を押します。

①アプリID:手順1-2で生成した②の「クライアントID」を入力します。
②「参照」ボタンをクリックします。「タイトル」、「アプリ ドメイン」、「リダイレクト先の URL」は手順1-2で指定した値が表示されます。
③権限の要求 XML:以下のコードをそのままコピーして貼り付けます。

  

確認画面が表示されます。
「信頼する」をクリックします。

SharePoint Online側の設定は以上になります。
続いて、Azure側へのデータ取得へ進んでください。

2. Azure側へのデータ取得

次に、AzureのSynapse Analyticsサービスから、Synapse Studioを起動し、パイプラインを使ってデータを取得する手順を紹介します。

SharePoint OnlineのテナントIDがAzure Synapse側での設定で必要になります。

2-1. 「リンクサービス」、「データセット」の設定

■リンクサービス

種類 HTTP
ベースURL https://[company_name].sharepoint.com/sites/[site_name]
認証の種類 匿名

■データセット(Excelファイル内のデータを取得する場合)

種類 HTTP → Excel
リンクサービス 上記手順で作成したリンクサービス
ベースURL(例) https://[company_name].sharepoint.com/sites/[site_name]/_api/web/GetFileByServerRelativeUrl(‘/sites/[site_name]/Shared Documents/[file_name]‘)/$value
ワークシートモード 名前
シート名 シート名を直接記載するか、パラメータ化する場合は「@dataset().sheet_name」のように設定

■データセット(Excelファイルをそのまま取得する場合)

種類 HTTP → バイナリ
リンクサービス 上記手順で作成したリンクサービス

2-2. 「新しいパイプライン」を選択

2-3.「Web」アクティビティを追加

2-4.「設定」タブで項目を設定

以下、①から④の項目を設定します。

① URL:以下のURLで赤字の部分をSharePoint OnlineのテナントIDに変え、設定します。

https://accounts.accesscontrol.windows.net/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/tokens/OAuth/2

②メソッド:「POST」を指定します。
③本文:以下のコードを赤字の部分を変え、コピーして貼り付けます(改行無しの1行にしてください)。

grant_type=client_credentials
&client_id=SharePointOnlineで生成したクライアントID@SharePointOnlineのテナントID
&client_secret=SharePointOnlineで生成したクライアントシークレット
&resource=00000003-0000-0ff1-ce00-000000000000/company_name.sharepoint.com@SharePointOnlineのテナントID

④ヘッダー:「新規」をクリックして以下の値を設定します。

名前 Content-Type
application/x-www-form-urlencoded

2-5.「データのコピー」アクティビティを「Web」アクティビティの後に追加

2-6.「ソース」と「シンク」の設定

例)Excelファイル内のデータを取得する場合

ソース データセットには手順2-1で作成したデータセット(Excelファイル内のデータを取得する場合)を指定します。

①要求メソッド : GET
②追加ヘッダー : @{concat(‘Authorization: Bearer ‘, activity(‘Web1’).output.access_token)}
シンク データセットには「Delimited Text」を指定したデータセットを選びます。

例)Excelファイルをそのまま取得する場合

①要求メソッド:GET
②追加ヘッダー:@{concat(‘Authorization: Bearer ‘, activity(‘Web1’).output.access_token)}
シンク データセットには「バイナリ」を指定したデータセットを選びます。

2-7.確認手順

設定は以上です。

パイプラインをデバッグ実行して正常終了し、ストレージにファイルが連携されたことを確認できました(Excelファイルをそのまま連携した例)。

3. 最後に

最後に注意点ですが、SharePointのテナントが、2018年11月7日以降に作成されている場合、SharePoint側ではアクセストークンによるアクセスがデフォルトで無効になっているため、SharePoint Online 管理シェルを使用して以下のコマンドを実行し、無効にするオプションをFalseに設定する必要があります。

コマンド

set-spotenant -DisableCustomAppAuthentication $false

Webアクティビティで正常にアクセストークンが取得できているのに、その後のコピーアクティビティで401認証エラーが出てしまう場合には一度ご確認ください。