こんにちは! Azure Integration サポート チームの 武田 です。
頻繁にいただくお問い合わせに、SharePoint Online からファイルを取得して Azure Blob Storage にアップロードしたいけれど、ファイルサイズが大きいためにコネクタを使用できない、というものがございます。
そこで今回は、SharePoint Online から Azure Blob Storage へ、大容量ファイルをコピーする方法を紹介させていただきます。
目次
- 処理の流れ
- Graph API を使用するための前準備
- 取得するファイルの itemID を取得する
- Graph API を使用してダウンロード URL を取得する
- URL を使用して、Azure Blob Storage に BLOB を作成する
- 実行結果の確認
- 留意点
- まとめ
処理の流れ
具体的な設定方法をご案内する前に、簡単に処理の流れをご案内します。
本手順の処理は、大きく以下の 3 つに分けることができます。
- SharePoint Online から取得するファイルの、itemId を取得する
- Graph API を使用して、1 のファイルをダウンロードする URL を発行する
- 2 で発行した URL を使用して、Azure Blob Storage に BLOB を作成する
詳細な設定手順は各項目でご説明致しますが、まずは上記のような流れで処理を行いますこと、お心に留めていただけますと幸いです。
Graph API を使用するための前準備
本手順には、Graph API を使用する手順が含まれます。
Graph API の認証に必要なアプリケーションにアクセス許可を付与する必要がございますため、事前にその設定をしておく必要がございます。
この設定方法については、当ブログの別記事にて詳細な手順をご案内しております。
後述する手順を実行される前に、以下ブログを参照の上、あらかじめ Graph API 実行のためのアクセス許可をご設定ください。
付与いただくアクセス権は以下の通りです。
今回使用する Graph API、「driveItem コンテンツのダウンロード」で必要とされるアクセス許可は、以下のいずれかとなります。
お客様のご要件に合わせて、付与するアクセス許可を選定ください。
取得するファイルの itemID を取得する
本記事では、SharePoint Online から任意のファイルをダウンロードするのに、「driveItem コンテンツのダウンロード」という Graph API を使用します。
この Graph API を使用するには、ダウンロードするファイルの siteId、driveId および itemId がわかっている必要があります。
このうち siteId と driveId は通常固定となりますため、あらかじめ確認して固定値ないしはパラメーター等に設定することが可能ですが、ファイルごとに変わる itemId は都度取得する必要がございます。
本記事では、Shared Document 直下に配置されているファイルを取得するものとして、手順をご紹介します。
余談ですが、こちらのファイルのサイズは 500 MB としております。
siteId と driveId の取得方法
siteId と driveId は、Graph Explorer よりあらかじめ確認することが可能です。
では実際に、Graph Explorer から siteId と driveId を確認してみます。
まずはGraph Explorer にアクセスし、ログインします。
ログインしているユーザーが対象となるドライブやファイル、フォルダの閲覧権限以上を持っている必要がありますのでご注意ください。
まずは siteId を取得します。
Graph Explorer に以下の URL をセットして、Run query を押下します。
検索する値は、SharePoint のサイト名やファイル名など、任意ものものを使用してください。
1 | GET https://graph.microsoft.com/v1.0/sites?search=<検索する値> |
以下は検索結果の例です。
value 内に記載されている id が siteId です。siteId は後続処理でも使用しますので、値を控えておきます。
siteId が取得できたので、続いては左記を使用して driveId を取得します。
Graph Explorer に以下の URL をセットして、Run query を押下します。
1 | GET https://graph.microsoft.com/v1.0/sites/<siteId>/drive |
以下は検索結果の例です。
黄色の枠で囲っている id が driveId です。driveId は後続処理でも使用しますので、値を控えておきます。
なお、webUrl に記載されている URL が、参照先の SharePoint になっていることをご確認ください。
以上で、siteId と driveId の取得は終了です。
itemId の取得方法
siteId と driveId が取得できたので、これらを使って SharePoint Online から取得対象のファイルの itemId を取得します。
itemId の取得につきましては、次の URI を [HTTP] アクションに設定いただくことで取得可能です。
1 | https://graph.microsoft.com/v1.0/sites/{siteId}/drives/{driveId}/root:/{fileName} |
上記形式に落とし込んだ URL が正しく実行できるかは、Graph Exolorer よりご確認いただくことが可能です。
[HTTP] アクションにご設定をいただきます前に、まずは Graph Explorer を使用して記述内容に問題がないかを確認することを、強くお勧めいたします。
上記を踏まえた、itemid を取得するための [HTTP] アクションの設定例がこちらです。
詳細パラメーターより設定する Authentication については、「Graph API を使用するための前準備」でご案内している内容に準拠しますため割愛します。
当アクションの実行結果は以下です。
body 直下にある「id」の値が、今回使用する itemId の値でございます。
Graph API を使用してダウンロード URL を取得する
取得対象のファイルの itemId が取得できましたので、Graph API「driveItem コンテンツのダウンロード」を使用して、対象のファイルのダウンロード URL を取得します。
当該 Graph API を呼び出すための URL のパターンはいくつかございますが、今回は下図黄色下線を引いている形式を使用します。
1 | https://graph.microsoft.com/v1.0/sites/{siteId}/drive/items/{itemId}/content |
上記を踏まえた、当該 Graph API を呼び出す [HTTP] アクションの設定がこちらです。
「items」と「content」の間に設定する itemId は可変値となりますため、前段で itemId を取得している [HTTP] アクションの body 部より取得する形をとっています。
コードで見た場合は以下の通りです。
1 | body('{itemId を取得した HTTP アクションのアクション名}')?['id'] |
当アクションの実行結果は以下です。
処理が正常に実行できた場合、応答として Status code: 302、Found を受け取ります。
しかし、Logic Apps では 302 応答を正常終了として取り扱えないため、後続処理に [Condition] アクションを設定することで処理を継続させます。
[Condition] アクションの設定内容は以下の通りです。
分岐条件として、ダウンロード URL を取得する [HTTP] アクションの Status code が 302 かどうかを設定します。
また、Status code: 302 を応答として受け取っても [Condition] アクションを実行できるよう、[設定] タブより、前段のアクションが失敗した場合も実行条件として設定します。
URL を使用して、Azure Blob Storage に BLOB を作成する
続いて、取得したダウンロード URL を用いて Azure Blob Storage に BLOB を作成します。
本手順には、REST API の「URL から BLOB を配置」を使用します。
[HTTP] アクションの URI 欄に設定する URI は、以下の形式となります。
1 | https://{ストレージ アカウント名}.blob.core.windows.net/{コンテナー名}/{保存するファイル名} |
今回の例では、以下のコンテナーに「testFile.txt」というファイル名で BLOB を作成するものとします。
上記を踏まえた、当該 REST API を呼び出す [HTTP] アクションの設定内容がこちらです。
今回は、認証に SAS 認証を使用しておりますため、URI の一部をマスキングしております。
認証方法を含め、設定内容を順番にご説明させていただきます。
認証方法
SAS 認証のほか、使用可能な認証方式のご用意がございます。
どの認証方式を採用されるかにつきましては、お客様のご要件に合わせてご検討ください。
x-ms-date
必須項目で、世界協定時刻(UTC)を設定します。
1 | utcNow('u') |
x-ms-copy-source
必須項目で、「Graph API を使用してダウンロード URL を取得する」にて取得したダウンロード URL を設定します。
ダウンロード URL は、以下の形で取得いただくことが可能です。
1 | outputs('{ダウンロード URL を取得した HTTP アクションのアクション名}')?['headers']?['Location'] |
x-ms-blob-type
固定値で「BlockBlob」と設定します。
なお、本設定が漏れますと、ファイルサイズ 0 の BLOB が作成されてしまいますので、ご注意ください。
Content-Length
固定値で「0」を設定します。
x-ms-version
2020-04-08 以降の、任意の API バージョンをご設定ください。
以上で、SharePoint Online から Azure Blob Storage へファイルをコピーする処理の設定が完了しました。
実行結果の確認
では、設定したワークフローを実際に動かしてみます。
まずは処理が正常終了したことを確認します。
指定した Blob Storage のコンテナーを確認します。
BLOB が作成されていることが確認できます。
留意点
「URL からの BLOB の配置」は、バージョン 2020-04-08 以降でサポートされております。
設定いただく API のバージョンにご注意ください。
「URL からの BLOB の配置」で取り扱えるのは 5000 MiB まででございます。
上記サイズを超えるファイルにつきましては、本記事でご紹介しております手順をもってしても、SharePoint Online から Azure Blob Storage へのコピーが叶いません。
まとめ
本記事では、以下についてご案内いたしましたが、ご理解いただけましたでしょうか。
- SharePoint Online に格納されているファイルの itemId を取得する方法
- Graph API を用いて、SharePoint Online に保存されているファイルのダウンロード URL を取得する方法
- URL を使用して Azure Blob Storage に BLOB を作成する方法
一連の処理としてご案内をしておりますが、それぞれ単独でもご使用いただける内容かと存じます。
本記事でご案内しております内容以外にも、是非ご活用ください。
本記事が少しでもお役に立ちましたら幸いです。最後までお読みいただき、ありがとうございました!
<Azure Logic Apps の参考サイト>
– 概要 - Azure Logic Apps とは
https://learn.microsoft.com/ja-jp/azure/logic-apps/logic-apps-overview
Azure Logic Apps とは、ロジック アプリ デザイナーでフロー チャートを用いて作成したワークフローを自動実行するソリューションです。
Azure Logic Apps では、条件分岐などを実装することができ、ワークフローの実行状況に応じて実行する処理を分岐することが可能です。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。