Snowflakeには、クラウドデータウェアハウスとして他のサービスと柔軟に連携するために、「統合(INTEGRATION)」と呼ばれるオブジェクトが存在します。
本記事では、6種類の統合オブジェクトとそれぞれが接続可能な外部サービスなどの概要についてまとめます。
1. STORAGE INTEGRATION(ストレージ統合)
役割
どの外部ストレージに対して、どの認証情報を用いて接続するのかといった情報を格納したSnowflakeオブジェクトです。
主に外部ステージの作成やSnowpipeによる自動データ取り込みに利用されます。
接続可能な外部ストレージサービスと認証方式
- Amazon S3
対象のS3バケットに対する権限を持ったI AMロールを用いて統合オブジェクトを作成後、Snowflakeアカウントに自動的に付与される外部IDを用いてAWS側の設定も行う。
- Google Cloud Strage
ストレージプロバイダーをGCSに指定して統合オブジェクトを作成後、Snowflakeアカウント用に自動的に作成されるCloud Storageサービスアカウントの ID を用いてGCS側の認証設定も行う。
- Azure Blob Storage
Office 365テナントIDを用いて統合オブジェクトを作成後、Snowflakeアカウント用に自動的に作成されるMicrosoftのアクセス許可リクエストページへの URLとアカウント用に作成されるSnowflakeクライアントアプリケーション名を用いてAzure側の設定も行う。
使用例(Amazon S3との統合の作成)
以下のCREATEコマンドでは、's3://my-bucket/data/'というロケーションに対して'arn:aws:iam::123456789012:role/my-s3-role'というARNのI AMロールを用いて接続するためのストレージ統合を作成しています。
CREATE STORAGE INTEGRATION my_s3_integration
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = 'S3'
ENABLED = TRUE
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/my-s3-role'
STORAGE_ALLOWED_LOCATIONS = ('s3://my-bucket/data/');
STORAGE_BLOCKED_LOCATIONS オプションを使用して、任意のURLsの参照を明示的に禁止することも可能です。
接続するクラウドプロバイダーにより使用できるパラメータの種類が異なる点に注意が必要です。
外部データの具体的な取り込み方法については以下ブログに詳細な手順を掲載していますのであわせてご覧ください。
Snowflake の外部データ取り込み方法まとめ (AWS・GCP・Azure)
2. NOTIFICATION INTEGRATION(通知統合)
役割
外部のメッセージサービス(サードパーティのクラウドメッセージキューサービス、メールサービス、Webhooksなど)と接続するための情報を格納したSnowflakeオブジェクトです。
Snowflake内のタスクエラー通知を外部のメッセージサービスを用いて通知を行ったり、ファイルアップロードなどのイベント通知をSnowpipeに伝える際に用いられます。
接続可能な外部サービス
- Amazon SNS
- Microsoft Azure Event Grid
- Google Pub/Sub
- メール
- ウェブフック
使用例
以下の例では'arn:aws:sns:us-west-2:123456789012:my_topic'というARNのAmazon SNS のトピックに'arn:aws:iam::123456789012:role/my-sns-role'というARNのIAMロールを用いてアウトバウンド接続するための通知統合を作成しています。
CREATE NOTIFICATION INTEGRATION my_sns_integration ENABLED = TRUE TYPE = QUEUE DIRECTION = OUTBOUND NOTIFICATION_PROVIDER = AWS_SNS AWS_SNS_TOPIC_ARN = 'arn:aws:sns:us-west-2:123456789012:my_topic' AWS_SNS_ROLE_ARN = 'arn:aws:iam::123456789012:role/my-sns-role';
3. API INTEGRATION(API統合)
役割
外部関数や外部接続 を介して外部のREST APIなどと連携する際に使用します。必要なセキュリティ情報や接続情報を格納し、Snowflakeから外部Webサービスへ安全にリクエストを送信できるようになります。
接続可能な外部サービス(例)
- 任意のREST API(社内API、外部SaaS APIなど)
- OpenWeatherMap, Stripe, Slack, Google Maps APIなど
- Amazon API Gateway,Azule API Manegement,Google Cloud API Getewayなど
4. SECURITY INTEGRATION(セキュリティ統合)
役割
SSO(シングルサインオン)やOAuth認証などを行うための統合です。
Snowflakeのログイン時や、外部サービスとの認証に必要な情報を格納したSnowflakeオブジェクトです。
設定可能な認証
- AWS IAM認証
- 外部API認証
- 外部OAuth
- Snowflake OAuth
- SAML2
- SCIM
など
5. EXTERNAL ACCESS INTEGRATION(外部アクセス統合)
役割
Snowflakeから外部ネットワークに安全にアクセスする際に必要な情報を格納したSnowflakeオブジェクトです。主にUDFs、プロシージャから外部サービスへ接続する場合に必要となります。
接続可能な対象
- 任意のFQDN(完全修飾ドメイン名)
- 例: api.example.com, functions.company.com
認証
- 許可された ネットワークルール を指定
使用例
CREATE EXTERNAL ACCESS INTEGRATION my_external_access
ALLOWED_NETWORK_RULES = ('my_network_rule')
ENABLED = TRUE;
ALLOWED_NETWORK_RULES で設定可能なルールはエグレスルールのみです。
6. CATALOG INTEGRATION(カタログ統合)
役割
Snowflakeアカウント内で Apache Iceberg™ テーブル(Snowflakeに保存できない、または保存しないことを選択した既存のデータレイク)を使用する際に外部のカタログサービスからメタデータを取得するための接続情報を格納したSnowflakeオブジェクトです。
接続可能な対象
- AWS Glue
- オブジェクトストレージ(Apache Iceberg™ メタデータファイル, デルタテーブルファイル)
- Snowflake Open Catalog
-
Apache Iceberg™ REST
まとめ
統合オブジェクト種別 | 主な用途 | 接続対象例 |
STORAGE INTEGRATION | 外部ストレージとの接続 | S3, Blob Storage, GCS |
NOTIFICATION INTEGRATION | イベント通知 | Amazon SNS, Event Grid,Pub/Sub |
API INTEGRATION | 外部APIとの連携 | 任意のREST API |
SECURITY INTEGRATION | SSO・OAuthなどの認証 | 外部のIdP |
EXTERNAL ACCESS INTEGRATION | 外部ネットワークへの接続 | 任意のFQDN |
CATALOG INTEGRATION | Apache Iceberg™ 用の設定 | Glue, オブジェクトストレージ, Apache Iceberg™ REST |
統合オブジェクトの種類によっては接続サービスやユースケースに応じて構文が大きく異なるため場合があるため、必要なオプションパラメータなどを見落とさないようにする必要があります。
また、外部サービス側での事前,事後の設定(AWS SNSと接続するための通知統合用のIAMの作成や編集など)が必要になる場合があるため、インフラ構築作業を分担している場合は作業者間のシームレスな連携が求められます。