Openflowで実現するSharePoint × Snowflake連携

ブログ

はじめに


こんにちは!STS技術チームです。

私たちは日々、Snowflakeを活用したデータ基盤の構築・運用に取り組んでいます。

今回ご紹介する内容は、Openflowを用いてSharePointとSnowflakeを連携する方法です。SharePointは多くの企業で利用されているファイル共有ツールであり、業務データが蓄積される重要な場所の一つです。Openflowを用いることで、SharePoint上の様々なファイルなどをSnowflakeへ自動的に取り込み、データ分析基盤として活用できるようになります。

本記事では、OpenflowでSharePoint上のExcelファイルをSnowflakeの内部ステージに連携する方法をご紹介します。また、Azureでのアプリケーション登録からOpenflowの構築、コネクタの設定まで、実際の手順を分かりやすく解説していきます。

本記事でわかること


  • Microsoft Entra IDへのアプリケーション登録方法
  • SharePoint にアクセスするためのAPIアクセス許可の設定方法
  • Openflowデプロイメント、ランタイムの構築手順
  • Openflowコネクタのインストール、および設定手順
  • Openflowコネクタを実行し、SharePointのファイルをSnowflakeへ連携する手順

概要


Openflowは、Snowflakeが提供するデータ統合ツールで、GUI操作でデータパイプラインを構築できるサービスです。様々なデータソースからSnowflakeへのデータ取り込みを容易に実現できます。
本記事では、以下の流れでSharePointとSnowflakeを連携させるために必要となるOpenflowの構築手順を解説します。

  1. Azure へのアプリケーションの登録
  2. Openflowデプロイメント、ランタイムの構築
  3. Openflowコネクタの設定、実行

前提事項


  • Azureへのアプリケーションの登録には、Microsoft Entra IDの管理者権限が必要
  • Openflowの初期セットアップには、ACCOUNTADMINロールを持つSnowflakeユーザーが必要
  • Openflowはデプロイメントやランタイムが起動している時間分だけ課金される

ACCOUNTADMINロールは最も強いロールであるため、使用時は事前に管理者の許可を得るか、管理者に対してコマンド実行を依頼してください。

構築手順


1. Azureへのアプリケーションの登録

1-1. アプリケーションの登録

まずは、SnowflakeからSharePointにアクセスするためのアプリケーションをMicrosoft Entra IDに登録します。

  • Azure Portalにログイン
Microsoft Azure
  • 「Microsoft Entra ID」を開く
  • 管理 > アプリの登録 > 「+ 新規登録」の順にクリック
  • 名前、サポートされているアカウントの種類を設定し、「登録」をクリック

1-2. APIアクセス許可の設定

次に、SharePointにアクセスするためのAPIアクセス許可の設定を行います。

  • 登録したアプリケーションを選択し、
    管理 > APIのアクセス許可 > 「+ アクセス許可の追加」の順にクリック
  • Microsoft Graph > アプリケーションの許可 の順にクリック
  • 以下の権限を選択し、「アクセス許可の追加」をクリック
    • Sites.Selected:選択したサイトへのアクセス

※検索バーを活用し、上記の権限を選択した状態で「アクセス許可の追加」をクリックしてください。

1-3. 対象SharePointサイトへのアプリ権限付与

Sites.Selected 権限は、Microsoft Entra ID 上で管理者同意を実施しただけでは利用できません。
対象となる SharePoint サイトに、アプリケーションへ明示的にアクセス権を付与する必要があります。

  • 対象サイトに FullControl 権限を付与
    この権限付与は、PnP PowerShell や Microsoft Graph API を利用して実施します。
    実施方法については、以下のドキュメントをご参照ください。
Set up the Openflow Connector for SharePoint | Snowflake Documentation
Grant-PnPAzureADAppSitePermission | PnP PowerShell
PnP PowerShell is an open source, community driven, PowerShell Module designed to work with Microsoft 365.
Create permission - Microsoft Graph v1.0
Create a new permission object.

本設定においては、FullControl 権限の付与を推奨します。
これは、取り込み後にフォルダの権限変更があっても、その変更を正しく検知し、適切に対応できるためです。
なお、Read 権限でも初回のデータ取得など基本的な操作は可能です。
ただし、フォルダのアクセス権が変更された場合には、コネクタがその変更に正常に追従できなくなる可能性があります

なお、本番環境では、貴社のセキュリティポリシーに従い、必要最小限の権限の利用を強く推奨します。

1-4. アプリケーション情報の取得

Openflowコネクタの設定に必要なアプリケーション情報を取得し、控えておきます。

取得する情報

  • SharePointサイトURL
  • SharePointクライアントID
  • SharePointテナントID
  • SharePointクライアントシークレット

SharePointサイトURL の取得

  • 連携対象のSharePointサイトのURLを取得し、控えておく
    例)https://<yourdomain>.sharepoint.com/sites/<YourSiteName>

SharePointクライアントID の取得

  • 登録したアプリケーションを選択し、概要から「アプリケーション(クライアント)ID」の値をコピーし、控えておく

SharePointテナントID の取得

  • 登録したアプリケーションを選択し、概要から「ディレクトリ (テナント) ID」の値をコピーし、控えておく

SharePointクライアントシークレット の取得

  • アプリを選択し、管理 > 証明書とシークレット > クライアントシークレット > 「+ 新しいクライアントシークレット」 の順にクリック
  • 説明、有効期限を設定し、「追加」 をクリック
  • 作成されたシークレットの「値」をコピーし、
    安全な場所(パスワードマネージャーなど)に保管する
    ※コピーせずに他ページに遷移した場合、値がマスキングされ、参照できなくなります。
     その場合は、再度クライアントシークレットを追加してください。

2. Openflowデプロイメント、ランタイムの構築

2-1. Snowflakeオブジェクトの作成(任意)

以下のSQLを実行し、Openflowで使用するSnowflakeオブジェクト(データベース、スキーマ、ウェアハウス)を作成します。
既存のオブジェクトを使用する場合は、この手順をスキップしてください。

-- 1. Warehouse作成
USE ROLE SYSADMIN;
CREATE WAREHOUSE IF NOT EXISTS <OPENFLOW_WAREHOUSE>
WITH WAREHOUSE_SIZE = 'XSMALL'
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE
INITIALLY_SUSPENDED = TRUE;

-- 2. Database作成
USE ROLE SYSADMIN;
CREATE DATABASE IF NOT EXISTS <OPENFLOW_DATABASE>;

-- 3. Schema作成
USE ROLE SYSADMIN;
CREATE SCHEMA IF NOT EXISTS <OPENFLOW_DATABASE>.<OPENFLOW_SCHEMA>;

2-2. Snowflakeコアの設定

Openflowデプロイメントの構築に入る前に、Openflow管理者ロールの作成、必要な権限付与を行います。

公式ドキュメントでは ACCOUNTADMINロールを使用していますが、本番環境では、貴社のセキュリティポリシーに従い、必要最小限の権限を持つ専用ロールの利用を強く推奨します。

  • OPENFLOW_ADMINロールを作成
USE ROLE ACCOUNTADMIN;
CREATE ROLE IF NOT EXISTS OPENFLOW_ADMIN;
GRANT ROLE OPENFLOW_ADMIN TO USER <OPENFLOW_USER>;

<OPENFLOW_USER> は、Openflowへのアクセスに使用されるユーザーを示します。

デフォルトロールが ACCOUNTADMIN、ORGADMIN、GLOBALORGADMIN、SECURITYADMINに設定されているユーザーは、Openflow – Snowflake Deploymentランタイムにログインできず、ログイン時にエラーメッセージが表示される場合があります。
そのため、Snowflakeではランタイムにログインするユーザーについては、上記以外のロールをデフォルトロールとして設定することが推奨されています。
また、すべてのOpenflowユーザーに対して、デフォルトのセカンダリロール(ALL)を設定しておくことも推奨されています。

デフォルトロールの変更およびすべてのセカンダリロールを有効化するには、以下を実行してください。

USE ROLE ACCOUNTADMIN;

ALTER USER <OPENFLOW_USER> SET DEFAULT_ROLE = OPENFLOW_ADMIN;
ALTER USER <OPENFLOW_USER> SET DEFAULT_SECONDARY_ROLES = ('ALL');
  • 必要な権限を設定
USE ROLE ACCOUNTADMIN;
GRANT CREATE ROLE ON ACCOUNT TO ROLE OPENFLOW_ADMIN;
GRANT CREATE OPENFLOW DATA PLANE INTEGRATION ON ACCOUNT TO ROLE OPENFLOW_ADMIN;
GRANT CREATE OPENFLOW RUNTIME INTEGRATION ON ACCOUNT TO ROLE OPENFLOW_ADMIN;
GRANT CREATE COMPUTE POOL ON ACCOUNT TO ROLE OPENFLOW_ADMIN;

2-3. Openflowデプロイメントの作成

Openflowデプロイメントとは、Openflowで動作するランタイムやコネクタを、用途やチームごとに分けて管理し、ワークロードを分離するための仕組みです。
噛み砕いて言うと、「Openflowの実行環境(ランタイム)を入れる箱」のようなものです。
Snowflakeのコア設定の完了後、Openflowデプロイメントを作成します。

  • Snowsightにサインインし、取り込み > 「Openflow」の順でクリック
  • 「Openflowを起動」をクリック
  • Openflowのユーザーインターフェースへ遷移後、「Create a deployment」をクリック
  • 「Next」をクリック
  • 「Snowflake」を選択し、デプロイメントの名前を入力して「Next」をクリック
  • 「Create a deployment」をクリック
  • デプロイメントが作成され、ステータスが「Active」になっていることを確認
    ※15~20分ほどかかる場合があります。

2-4. ランタイム用ロールの作成

ランタイムの構築に入る前に、ランタイム専用のSnowflakeロールを作成します。
このロールは、ランタイムが必要な操作のみを、適切かつ安全に実行できるようにするために作成します。

公式ドキュメントでは ACCOUNTADMINロールを使用していますが、本番環境では、貴社のセキュリティポリシーに従い、必要最小限の権限を持つ専用ロールの利用を強く推奨します。

  • ランタイム用ロールの作成
USE ROLE ACCOUNTADMIN;
CREATE ROLE IF NOT EXISTS OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;
GRANT ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME> TO ROLE OPENFLOW_ADMIN;
GRANT ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME> TO USER <OPENFLOW_USER>;
  • ランタイムが使用するウェアハウスへのアクセス権をロールに付与
GRANT USAGE, OPERATE ON WAREHOUSE <OPENFLOW_WAREHOUSE> TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;
  • ランタイムが使用するSnowflakeオブジェクトへのアクセス権をロールに付与
USE DATABASE <OPENFLOW_DATABASE>;
GRANT USAGE ON DATABASE <OPENFLOW_DATABASE> TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;
GRANT USAGE ON SCHEMA <OPENFLOW_SCHEMA> TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;
GRANT CREATE TABLE, CREATE DYNAMIC TABLE, CREATE STAGE, CREATE SEQUENCE
ON SCHEMA <OPENFLOW_DATABASE>.<OPENFLOW_SCHEMA> TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;

2-5. ネットワークルール、および外部アクセス統合(EAI)の作成

ネットワークルールとは、ランタイムがどこに通信してよいかを定義するためのルールです。
外部アクセス統合(EAI)とは、その通信をSnowflakeから正式に許可し、実際に利用可能にするための仕組みです。
Snowflakeでは、ネットワークルールと外部アクセス統合を組み合わせることで、ランタイムから外部システムへの通信を安全に制御します。

公式ドキュメントでは ACCOUNTADMINロールを使用していますが、本番環境では、貴社のセキュリティポリシーに従い、必要最小限の権限を持つ専用ロールの利用を強く推奨します。

  • 適切なネットワークルールを作成
USE DATABASE <OPENFLOW_DATABASE>;
CREATE NETWORK RULE IF NOT EXISTS OPENFLOW_<RUNTIMENAME>_NETWORK_RULE
    MODE = EGRESS
    TYPE = HOST_PORT
    VALUE_LIST = (
     'graph.microsoft.com:443',
     'login.microsoftonline.com:443',
     '<yourtenant>.sharepoint.com:443'
     );
  • 外部アクセス統合(EAI)を作成
USE ROLE ACCOUNTADMIN;
CREATE EXTERNAL ACCESS INTEGRATION IF NOT EXISTS OPENFLOW_<RUNTIMENAME>_EAI
   ALLOWED_NETWORK_RULES = (OPENFLOW_<RUNTIMENAME>_NETWORK_RULE)
   ENABLED = TRUE;
  • EAIへのアクセス権をランタイム用ロールに付与
USE ROLE ACCOUNTADMIN;
GRANT USAGE ON INTEGRATION OPENFLOW_<RUNTIMENAME>_EAI TO ROLE OPENFLOW_RUNTIME_ROLE_<RUNTIMENAME>;

2-6. ランタイムの作成

ランタイムとは、Openflowのデータ連携処理を実際に実行するための実行環境です。
ランタイムの作成を行い、併せてランタイム専用のSnowflakeロールとの関連付けを行います。

  • Snowsightにサインインし、取り込み > 「Openflow」 の順でクリック
  • 「Openflowを起動」をクリック
  • 「Create a runtime」をクリック
  • 以下の項目を設定し、「Create」をクリック
    • Deployment Name:2-3で作成したデプロイメント
    • Runtime Name:ランタイムの名前
    • Node Type:ノードタイプ(ノードサイズ)
    • Min/Max node:最小・最大ノード数
    • Snowflake role:2-4で作成したランタイム用ロール
    • External access integration:2-5で作成した外部アクセス統合
  • ランタイムが作成され、ステータスが「Active」になっていることを確認
    ※15~20分ほどかかる場合があります。

3. Openflowコネクタの設定、実行

3-1. SharePoint用Openflowコネクタのインストール

Openflowコネクタとは、特定のデータソースやサービスと連携するために、あらかじめ用意された信頼性の高いデータ連携処理のひな形です。
SnowflakeにはSharePoint用のOpenflowコネクタが用意されており、これをランタイムにインストールして利用します。

  • 「View more connectors」をクリック
  • 検索バーに「SharePoint」と入力し、「Microsoft SharePoint (Simple Ingest, no document ACLs)」の「install」をクリック
  • 2-6で作成したランタイムを選択し、「Add」をクリック

3-2. Openflowコネクタの設定

インストールしたOpenflowコネクタのパラメータを設定します。

事前準備

  • 登録したアプリと同じテナントのSharePointに、連携対象のExcelファイルを格納しておく

Destination Parameters の設定(連携先パラメータの設定)

  • ランタイムを選択し、Openflowキャンバスを開く
  • インストールしたコネクタを右クリックし、「Parameters」をクリック
  • SharePoint (Simple Ingest, No ACL) Destination Parameters の
    三点リーダー(…)> 「Edit」の順にクリック
  • 以下の項目を設定し、「Apply」をクリック
    • Destination Database:Snowflake のデータベース名
    • Destination Schema:Snowflake のスキーマ名
    • Snowflake Account Identifier:空欄
    • Snowflake Authentication Strategy:SNOWFLAKE_MANAGED_TOKEN
    • Snowflake Private Key:空欄
    • Snowflake Private Key File:空欄
    • Snowflake Private Key Password:空欄
    • Snowflake Role:2-4で作成したランタイム用ロール
    • Snowflake Username:空欄
    • Snowflake Warehouse:使用するウェアハウス名

Source Parameters の設定(連携元パラメータの設定)

  • SharePoint (Simple Ingest, No ACL) Source Parameters の
    三点リーダー(…)> 「Edit」の順にクリック
  • 以下の項目を設定し、「Apply」をクリック
    • SharePoint Client ID:1-4で取得したSharePointクライアントID
    • SharePoint Client Secret:1-4で取得したSharePointクライアントシークレット
    • SharePoint Site URL:1-4で取得したSharePointサイトURL
    • SharePoint Tenant ID:1-4で取得したSharePointテナントID

Ingestion Parameters の設定(取り込みパラメータの設定)

  • SharePoint (Simple Ingest, No ACL) Ingestion Parameter の
    三点リーダー(…)> 「Edit」の順にクリック
  • 以下の項目を設定し、「Apply」をクリック
    • Sharepoint Document Library Name:SharePointのドキュメントライブラリ名
    • SharePoint Source Folder:SharePointのフォルダパス

不要なコネクタサービスを削除

  • コネクタを右クリックし、「Controller services」をクリック
  • StandardPrivateKeyService の三点リーダー(…)> 「Delete」の順にクリック

コネクタサービスを許可

  • コネクタを右クリックし、「Enable all controller services」をクリック

3-3. Openflowコネクタの実行

設定したコネクタを実行し、SharePointからSnowflakeへデータを取り込みます。

Openflowコネクタを実行

  • コネクタを右クリックし、「Start」をクリック

実行結果の確認

  • Snowflakeに内部ステージが作成され、
    SharePointのExcelファイルが取り込まれていることを確認

Openflowのスケジュール設定方法


以下の方法で、自動取り込みのスケジュール(頻度)を設定できます。

  • Openflowキャンバスのコネクタをダブルクリックし、
    「Capture Sharepoint Changes」を選択
  • Yield durationに自動取り込みの頻度を設定
    ※以下の設定値の場合、10分おきに自動取り込みが行われます。

Openflowにおける差分更新の仕様


Openflowにおける差分更新の仕様について検証したところ、
以下のような結果になることを確認しました。

  • SharePoint側で変更がない場合
    →ファイルは連携されない
  • SharePointにファイルを新規追加した場合
    →新規ファイルとしてSnowflakeに連携される
  • SharePointファイルの内容を更新した場合
    →連携され、Snowflakeの既存ファイルが上書きされる
  • SharePointファイルの名称を変更した場合
    →連携され、Snowflakeの既存ファイルは残り続ける
  • SharePointファイルを削除した場合
    →削除は反映されず、Snowflakeの既存ファイルは残り続ける

まとめ


Openflowを活用してSharePointとSnowflakeを連携する方法について解説しました。
ポイントは以下のとおりです。

  • セキュアな連携
    Microsoft Entra ID におけるアプリケーション登録と、適切な API アクセス許可の設定により、セキュアな連携を実現できる
  • Openflowの構築は段階的に実施
    デプロイメント、ロール、ランタイムを段階的に構築することで、適切なロール設計や権限管理を行う
  • コネクタの設定はシンプル
    必要なパラメータを設定するだけで、SharePointからSnowflakeへのデータ取り込みを自動化できる

この連携により、SharePointに保存された業務データを自動的にSnowflakeへ取り込み、BIツールや機械学習モデルでの活用が容易になります。
既存のSharePoint資産とSnowflakeの強力な分析基盤を組み合わせることで、よりデータドリブンな意思決定を支援できるでしょう。

ぜひ、皆さんの環境でも
Openflowを使ったSharePoint × Snowflakeの連携を試してみてください!

参考


  • Microsoft公式ドキュメント
Microsoft Entra ID でアプリを登録する方法 - Microsoft identity platform
Microsoft Entra ID でアプリを登録し、シングルテナントまたはマルチテナントで使用できるように構成する方法について説明します。
Microsoft Graph のアクセス許可のリファレンス - Microsoft Graph
Microsoft Graph は、アプリがアクセスするリソース (ユーザー、グループ、メールなど) を制御する詳細なアクセス許可を公開しています。 開発者は、アプリが要求する Microsoft Graph のアクセス許可を決定します。
  • Snowflake公式ドキュメント
ERROR: The request could not be satisfied
Set up Openflow - Snowflake Deployment: Core Snowflake | Snowflake Documentation
Set up Openflow - Snowflake Deployment: Create deployment | Snowflake Documentation
Set up Openflow - Snowflake Deployment: Create Snowflake role | Snowflake Documentation
Set up Openflow - Snowflake Deployment: Create runtime | Snowflake Documentation
Set up Openflow - Snowflake Deployment: Configure allowed domains for Openflow connectors | Snowflake Documentation
About Openflow Connector for SharePoint | Snowflake Documentation
Set up the Openflow Connector for SharePoint | Snowflake Documentation

コメント

タイトルとURLをコピーしました