Notification Integrationは、Snowflakeと外部の通知サービスを安全に接続するオブジェクトです。 クラウドのメッセージキュー(QUEUE)、メール(EMAIL)、 HTTPSエンドポイント(WEBHOOK)の3タイプがあり、 Snowpipeの自動トリガー、タスク失敗通知、アラート発火など幅広い用途で使用されます。
| タイプ | 接続先 | 主な用途 | 方向 |
|---|---|---|---|
| QUEUE | AWS SQS / Azure Storage Queue / GCS Pub/Sub | Snowpipe自動トリガー、External Table自動リフレッシュ | 外部 → Snowflake(受信) |
| Snowflake内蔵メール送信 | Alert通知、エラー通知 | Snowflake → 外部(送信) | |
| WEBHOOK | HTTPSエンドポイント(Slack / PagerDuty等) | リアルタイム通知、ChatOps連携 | Snowflake → 外部(送信) |
Snowpipeの自動トリガーで最も使用されるタイプです。 クラウドプロバイダーごとにパラメータが異なります。
-- AWS SQS用のNotification Integration
CREATE OR REPLACE NOTIFICATION INTEGRATION aws_s3_notification
ENABLED = TRUE
TYPE = QUEUE
NOTIFICATION_PROVIDER = AWS_SQS
DIRECTION = INBOUND
AWS_SQS_ARN = 'arn:aws:sqs:ap-northeast-1:123456789012:snowpipe-queue'
AWS_SQS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake-sqs-role';
-- Integration情報の確認(SF_AWS_IAM_USER_ARN / SF_AWS_EXTERNAL_IDを取得)
DESCRIBE NOTIFICATION INTEGRATION aws_s3_notification;-- Azure Storage Queue用のNotification Integration
CREATE OR REPLACE NOTIFICATION INTEGRATION azure_blob_notification
ENABLED = TRUE
TYPE = QUEUE
NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
DIRECTION = INBOUND
AZURE_STORAGE_QUEUE_PRIMARY_URI =
'https://myaccount.queue.core.windows.net/snowpipe-queue'
AZURE_TENANT_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
DESCRIBE NOTIFICATION INTEGRATION azure_blob_notification;-- GCS Pub/Sub用のNotification Integration
CREATE OR REPLACE NOTIFICATION INTEGRATION gcs_notification
ENABLED = TRUE
TYPE = QUEUE
NOTIFICATION_PROVIDER = GCP_PUBSUB
DIRECTION = INBOUND
GCP_PUBSUB_SUBSCRIPTION_NAME =
'projects/my-project/subscriptions/snowpipe-sub';
DESCRIBE NOTIFICATION INTEGRATION gcs_notification;QUEUE型Notification IntegrationとSnowpipeを組み合わせて、 ファイルがクラウドストレージに到着した時点で自動的にデータを取り込みます。
-- Snowpipeの作成(Notification Integration参照)
CREATE OR REPLACE PIPE raw_data_pipe
AUTO_INGEST = TRUE
INTEGRATION = aws_s3_notification
AS
COPY INTO raw.events
FROM @raw.s3_stage/events/
FILE_FORMAT = (TYPE = 'PARQUET')
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
-- Pipeの状態確認
SHOW PIPES LIKE 'RAW_DATA_PIPE';
SELECT SYSTEM$PIPE_STATUS('raw_data_pipe');
-- Pipeのコピー履歴
SELECT *
FROM TABLE(INFORMATION_SCHEMA.COPY_HISTORY(
TABLE_NAME => 'RAW.EVENTS',
START_TIME => DATEADD('HOUR', -24, CURRENT_TIMESTAMP())
));EMAIL型はAlert機能やストアドプロシージャからメール通知を送信する際に使用します。
-- Email Notification Integrationの作成
CREATE OR REPLACE NOTIFICATION INTEGRATION email_alerts
ENABLED = TRUE
TYPE = EMAIL
ALLOWED_RECIPIENTS = (
'[email protected]',
'[email protected]'
);
-- Alert機能でのメール通知(異常検知の例)
CREATE OR REPLACE ALERT high_cost_alert
WAREHOUSE = monitor_wh
SCHEDULE = '60 MINUTE'
IF (EXISTS (
SELECT 1
FROM TABLE(INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY(
DATE_RANGE_START => DATEADD('HOUR', -1, CURRENT_TIMESTAMP())
))
WHERE CREDITS_USED > 100
))
THEN
CALL SYSTEM$SEND_EMAIL(
'email_alerts',
'[email protected]',
'Snowflake高コストアラート',
'直近1時間のクレジット消費が100を超えました。確認してください。'
);
ALTER ALERT high_cost_alert RESUME;-- Webhook Notification Integrationの作成
CREATE OR REPLACE NOTIFICATION INTEGRATION slack_webhook
ENABLED = TRUE
TYPE = WEBHOOK
WEBHOOK_URL = 'https://hooks.slack.com/services/T00/B00/xxxxx'
WEBHOOK_SECRET = snowflake.secrets.slack_secret
WEBHOOK_BODY_TEMPLATE = '{
"text": "SNOWFLAKE_WEBHOOK_MESSAGE"
}'
WEBHOOK_HEADERS = ('Content-Type' = 'application/json');-- Integration作成(ACCOUNTADMINで実行)
USE ROLE ACCOUNTADMIN;
-- 作成済みIntegrationの使用権限を付与
GRANT USAGE ON INTEGRATION aws_s3_notification
TO ROLE data_engineer_role;
GRANT USAGE ON INTEGRATION email_alerts
TO ROLE monitoring_role;
-- data_engineer_roleでSnowpipeを作成
USE ROLE data_engineer_role;
CREATE PIPE ... INTEGRATION = aws_s3_notification ...;| 症状 | 原因 | 対処 |
|---|---|---|
| Snowpipeがファイルを検知しない | SQSキューのポリシーでSnowflakeのIAMロールが許可されていない | DESCRIBE INTEGRATIONで取得したSF_AWS_IAM_USER_ARNをSQSポリシーに追加 |
| メール通知が届かない | ALLOWED_RECIPIENTSに受信者が含まれていない | ALTER INTEGRATION SET ALLOWED_RECIPIENTS = (...)で追加 |
| Webhookが403を返す | Secret/URLの設定ミス、またはNetwork Ruleが未設定 | WEBHOOK_URLとWEBHOOK_SECRETを確認し、必要ならExternal Access Integrationを設定 |
| INTEGRATIONの作成でエラー | CREATE INTEGRATION権限がない | ACCOUNTADMINロールで作成し、USAGEを他ロールに付与 |
SnowPro
問題 1
AWS S3にファイルが到着するたびにSnowpipeで自動的にデータを取り込むパイプラインを構築しています。Notification Integrationの設定で正しい組み合わせはどれですか?
正解: B
S3イベント通知 → SQSキュー → Snowflake Notification Integration(QUEUE型/AWS_SQS)→ Snowpipe(AUTO_INGEST = TRUE + INTEGRATION句)が正しいフローです。EMAIL型やWEBHOOK型はSnowpipeの自動トリガーには使用できません。AUTO_INGEST = TRUEだけではクラウドキューとの接続が確立されず、イベントを受信できません。
Notification IntegrationのQUEUE/EMAIL/WEBHOOKはどう使い分けますか?
QUEUE型はクラウドのメッセージキュー(AWS SQS / Azure Storage Queue / GCS Pub/Sub)と連携し、Snowpipeの自動トリガーやExternal Tableの自動リフレッシュに使用します。EMAIL型はSnowflakeからのアラート通知やタスク失敗通知をメール送信する際に使います。WEBHOOK型は外部のHTTPSエンドポイント(Slack / PagerDuty等)に直接通知を送る用途です。Snowpipe連携にはQUEUE型が必須です。
Snowpipeの自動取り込みにNotification Integrationは必ず必要ですか?
クラウドイベント通知でSnowpipeを自動トリガーする場合は必要です。AWSではS3のEvent NotificationをSQSに送り、それをSnowpipeがポーリングする構成でQUEUE型のNotification Integrationを使います。一方、REST APIでSnowpipe(insertFiles)を明示的に呼び出す場合はNotification Integrationは不要です。
Notification Integrationの権限はどのロールに付与すべきですか?
CREATE INTEGRATION権限はACCOUNTADMINが持つため、Integration自体の作成はACCOUNTADMINで行います。作成後にUSAGE ON INTEGRATION権限を必要なロール(例:data_engineer_role)に付与し、そのロールでSnowpipeやAlertのNotification Integration参照を設定します。セキュリティの観点から、ACCOUNTADMINで直接パイプラインを構築するのは避けるべきです。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...