🔖

Azure Logic Apps で SharePoint Online から Blob Storage にファイルをコピーする手順

2022/04/01に公開

昨今の機械学習の進化により、既存のドキュメントから様々なノウハウ抽出をしたいというニースが増えてきています。Azure の機械学習サービスを使うためには Azure のストレージにあるデータを使うのが効率が良いため、ここでは Azure Logic Apps を利用して、ドキュメントを管理する代表的なサービスである SharePoint Online から Azure の代表的なストレージサービスである Blob Storage にドキュメントをコピーするフローの作成手順について記載します。

作成するフローは、SharePoint Online の指定したフォルダ以下のファイルを、フォルダ構造を維持して全てコピーするものとしています。完成版のフローの全体像は以下のようなイメージになります。

Azure Logic Apps の基本的な使い方については、以下のドキュメントを参照してください。
https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-overview

Azure Logic Apps のリソースの作成

プランの種類は問いませんが、ドキュメントを定期的に Blob Storage にコピーするという要件であれば、通常は消費プランで良いと思います。リソースの作成方法については上記のドキュメントを参照してください。

トリガーの指定

実運用を考えた場合には、定期実行や何かしらのイベントによりフローが実行されることになるため、ここでは HTTP 要求を受信することでフローが起動する HTTP トリガーを使います。

最初にロジックアプリデザイナーを開くと、トリガーやテンプレートが選択できます。ここでは、「HTTP 要求の受信時」トリガーを選択します。

SharePoint Online のドキュメントフォルダからプロパティ一覧を取得

指定したサイトとライブラリ配下にあるフォルダとファイルのプロパティ一覧を取得します。このプロパティは、後でファイルの実体の取得や BLOB Storage に格納する際のパラメータとして使用します。

使用するアクションは、SharePoint コネクタの「ファイルの取得 (プロパティのみ)」です。

最初にアクションを設定するときに、SharePoint へのサインイン情報を求められます。適切なサインイン情報を入力してください。

以下のパラメータを設定します。

  • サイトのアドレス:ドロップダウンリストから選択
  • ライブラリ名:ドロップダウンリストから選択

なお、ドロップダウンリストにはサインインしたユーザーがアクセスできるサイトのみ表示されます。また、デフォルトではサブフォルダ配下のプロパティも取得します。特定のフォルダのみ対象とする場合には「入れ子になった項目を含める」パラメータを「No」に設定してください。

ファイルパスを格納する変数の初期化

SharePoint Online のフォルダ構造を維持してコピーするために、フォルダ構造を格納する変数を定義します。 使用するアクションは「変数を初期化する」です。

以下のパラメータを設定します。

  • 名前:任意 (ここでは filePath とします)
  • 種類:文字列

ファイルコンテンツの取得と Blob Storage への書き出し

取得したプロパティ一覧を1件ずつ処理するループ処理を設定します。使用するアクションは「For each」です。

以下のパラメータを設定します。

  • 以前の手順から出力を選択:動的なコンテンツとして「ファイルの取得 (プロパティのみ)」(アクション名を変更していたら、変更した名前になっています) → 「value」を選択

「For each」アクション内のループ処理はデフォルトで20並行実行されるのですが、SharePointコネクタは60秒で600呼び出しの調整制限があり、これを越えると HTTP 429 コードが返され、リトライ処理が発生します。サイズの小さいファイルが多い場合にはこの調整制限にかかる可能性があるため、これを避けるために並列度を下げることをお勧めします。並列度は「For each」アクションの設定で指定することができます。

  • コンカレンシー制御:オン
  • 並列処理の次数:(次数を設定:例として10)

以下、「For each」アクション内のステップとして追加します。

ファイルのみを選択する条件を設定します。使用するアクションは「条件」です。

「条件」アクションのパラメータで、以下の3つの値を設定します

  • 動的コンテンツとして「ファイルの取得 (プロパティのみ)」→ 「フォルダーである」
  • 「次の値に等しい」
  • 式として「false」


以下、「条件」アクション内のステップとして追加します。

ファイルのプロパティからファイルのコンテンツを取得します。使用するアクションは SharePoint コネクタの「パスによるファイルコンテンツの取得」です。

以下のパラメータを設定します。

  • サイトのアドレス:プロパティを取得したサイトと同じものを選択
  • ファイルパス:動的なコンテンツとして「ファイルの取得 (プロパティのみ)」 → 「完全パス」を選択

フォルダ構造を変数に設定します。使用するアクションは「変数の設定」です。

以下のパラメータを設定します。

  • 名前:filePath を選択
  • 値:動的なコンテンツとして「ファイルの取得 (プロパティのみ)」→ 「ファイルのパス」を選択

最後に Blob Storage に書き出します。使用するアクションは Azure Blob Storage コネクタの「BLOB を作成する (V2)」アクションです。

アクション設定時には、Blob Storage に接続しておく必要があります。接続方法については以下のドキュメントを参照してください。
https://docs.microsoft.com/ja-jp/azure/connectors/connectors-create-api-azureblobstorage?tabs=consumption#connect-to-azure-storage-account

以下のパラメータを設定します。

  • ストレージアカウント名:接続時に設定した名前
  • フォルダーのパス:式として「concat('<ファイルを格納するルートフォルダパス>', variables('filePath'))」
  • BLOB 名:動的なコンテンツとして「ファイルの取得 (プロパティのみ)」→ 「拡張子付きのファイル名」
  • BLOB コンテンツ:「パスによるファイルコンテンツの取得」→ 「ファイルコンテンツ」


以上でフローの作成は完了です。あとは、特定のフォルダからのみ取得、ファイルが追加されたらフローを走らせる、といった実際の要件に合わせてカスタマイズして頂ければと思います。

Discussion