Webhook通知の送信

これらのシステムが提供するWebhookを使用して、Snowflake通知を以下の外部システムと統合できます。

注釈

Snowflakeは、上記以外の外部システムにはwebhook通知を送信しません。

これらのシステムのいずれかに通知を送信するには:

  1. 外部システム用のWebhook URL のシークレットを作成します

  2. 外部システム用のWebhook通知統合を作成します

  3. Webhook通知統合を使用して、外部システムに通知を送信します

次のセクションでは、これらの外部システムへの通知の設定と送信方法について詳しく説明します。

Webhook URL のシークレットの作成

ほとんどのWebhookは、受信する HTTP リクエストに秘密キーまたは統合キーを必要とします。例:

  • Slackで受信Webhookを作成 する場合、Webhookの URL にはシークレットが含まれます。

    https://hooks.slack.com/services/<secret>
    
    Copy
  • Teamsで受信Webhookを作成 する場合、Webhookの URL にはシークレットが含まれます。

    https://<hostname>.webhook.office.com/webhookb2/<secret>
    
    Copy
  • PagerDuty サービスの統合を設定 する場合、統合は、Webhookリクエストに含める必要のある統合キーを提供します。

    {
       "routing_key" : "<integration_key>",
       ...
    
    Copy

この秘密キーまたは統合キーには、一般的な文字列型の秘密オブジェクトを作成することをお勧めします。このシークレットオブジェクトは、以下のように使用されます。

  • Webhook通知統合を作成するとき、 CREATE NOTIFICATION INTEGRATION ステートメントでこのシークレットオブジェクトを指定します。

  • 通知を送信するとき、シークレットオブジェクトはWebhookの HTTP リクエストを構築するために使用されます。

次の点に注意してください。

  • Webhook通知統合を作成する場合、このシークレットで USAGE 権限を持つロールを使用する必要があります。

  • このWebhookに通知を送信する場合、このシークレットの READ 権限と、シークレットを含むデータベースとスキーマの USAGE 権限を持つロールを使用する必要があります。

このオブジェクトを作成するには、 CREATE SECRET コマンドを使用し、 TYPE = GENERIC_STRING を指定します。そのオブジェクトを作成するスキーマで CREATE SECRET 権限を持つロールを使用する必要があります。

次のセクションでは、シークレットオブジェクトの作成例を示します。

例 1: Slack Webhookのシークレットの作成

URL で Slack Webhook に通知を送信したいとします。

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Copy

この例では、Webhook URL にシークレット T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX が含まれています。

次のステートメントを実行して、このシークレット用のシークレットオブジェクトを作成します。

CREATE OR REPLACE SECRET my_slack_webhook_secret
  TYPE = GENERIC_STRING
  SECRET_STRING = 'T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX';
Copy

例 2: Teams Webhookのシークレットの作成

URL で Teams Webhook に通知を送信したいとします。

https://mymsofficehost.webhook.office.com/webhookb2/xxxxxxxx
Copy

この例では、Webhook URL にシークレット xxxxxxxx が含まれています。

次のステートメントを実行して、このシークレット用のシークレットオブジェクトを作成します。

CREATE OR REPLACE SECRET my_teams_webhook_secret
  TYPE = GENERIC_STRING
  SECRET_STRING = 'xxxxxxxx';
Copy

例 3: PagerDuty Webhookのシークレットの作成

PagerDuty Webhook に通知を送信したい場合、統合キー(リクエストの routing_key フィールドに含める必要がある値)が以下であるとします。

xxxxxxxx
Copy

次のステートメントを実行して、このシークレット用のシークレットオブジェクトを作成します。

CREATE OR REPLACE SECRET my_pagerduty_webhook_secret
  TYPE = GENERIC_STRING
  SECRET_STRING = 'xxxxxxxx';
Copy

Webhook通知統合の作成

Webhookタイプの通知統合を作成するには、 CREATE NOTIFICATION INTEGRATION コマンドを使用します。

このコマンドを実行する場合、以下のプロパティを設定して、通知用に送信されるべき HTTP リクエストを設定します。

  • TYPE を WEBHOOK に設定します。

  • URL、 HTTP リクエストボディ、またはヘッダーに含めるシークレットのために、 シークレットオブジェクトを作成 した場合、 WEBHOOK_SECRET にそのシークレットオブジェクトの名前を設定します。

  • Webhookの URL に WEBHOOK_URL を設定します。

    Webhook URL にシークレットが含まれ、そのシークレット用にシークレットオブジェクトを作成した場合は、 URL のシークレットを SNOWFLAKE_WEBHOOK_SECRET に置き換えます。

  • Webhookのメッセージ本文が、この外部システム用に特定のフォーマットである必要がある場合(例えば、このシステムに送信されるすべてのメッセージが同じフォーマットを使用する必要がある場合)、 WEBHOOK_BODY_TEMPLATE をメッセージのテンプレートに設定します。このテンプレートでは:

    • メッセージの本文でシークレットが表示される SNOWFLAKE_WEBHOOK_SECRET プレースホルダーを使用します。

    • 通知メッセージを表示するには、 SNOWFLAKE_WEBHOOK_MESSAGE プレースホルダーを使用します。

    SYSTEM$SEND_SNOWFLAKE_NOTIFICATION を呼び出してメッセージを渡すと、ストアドプロシージャはテンプレートを使用してWebhookリクエストの本文を構築します。ストアドプロシージャは、 SNOWFLAKE_WEBHOOK_MESSAGE のプレースホルダーを、あなたが渡したメッセージに置き換えます。

  • Webhookへの HTTP リクエストが特定の HTTP ヘッダーを含まなければならない場合、 WEBHOOK_HEADERS にヘッダー名と値のリストを設定します。

    ヘッダーの値で秘密が表示されるべき SNOWFLAKE_WEBHOOK_SECRET プレースホルダーを使用します。

次のセクションでは、さまざまなタイプの外部システム用にWebhook通知統合を作成する例を示します。

例1: Slack Webhookの通知統合を作成する

URL でSlack Webhookに通知を送信したいとします。

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Copy

URL に表示されるシークレット T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX のために、 my_slack_webhook_secret という名前の シークレットオブジェクトを作成した とします。

以下のステートメントを実行して、通知統合を作成します。

CREATE OR REPLACE NOTIFICATION INTEGRATION my_slack_webhook_int
  TYPE=WEBHOOK
  ENABLED=TRUE
  WEBHOOK_URL='https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET'
  WEBHOOK_SECRET=my_secrets_db.my_secrets_schema.my_slack_webhook_secret
  WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}'
  WEBHOOK_HEADERS=('Content-Type'='application/json');
Copy

例2: Teams Webhookの通知統合を作成する

URL でTeams Webhookに通知を送信したいとします。

https://mymsofficehost.webhook.office.com/webhookb2/xxxxxxxx
Copy

URL に表示されるシークレット xxxxxx のために、 my_teams_webhook_secret という名前の シークレットオブジェクトを作成した とします。

以下のステートメントを実行して、通知統合を作成します。

CREATE OR REPLACE NOTIFICATION INTEGRATION my_teams_webhook_int
  TYPE=WEBHOOK
  ENABLED=TRUE
  WEBHOOK_URL='https://mymsofficehost.webhook.office.com/webhookb2/SNOWFLAKE_WEBHOOK_SECRET'
  WEBHOOK_SECRET=my_secrets_db.my_secrets_schema.my_teams_webhook_secret
  WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}'
  WEBHOOK_HEADERS=('Content-Type'='application/json');
Copy

例3: PagerDuty Webhookの通知統合の作成

PagerDuty Webhookに URL で通知を送信したいとします。

https://events.pagerduty.com/v2/enqueue
Copy

my_pagerduty_webhook_secret という名前の シークレットオブジェクトを、メッセージ本文の routing_key ` フィールドに含まれるべき統合キー `` xxxxxx`` のために作成した <label-notifications_webhook_secret_teams>` とします。

以下のステートメントを実行して、通知統合を作成します。

CREATE OR REPLACE NOTIFICATION INTEGRATION my_pagerduty_webhook_int
  TYPE=WEBHOOK
  ENABLED=TRUE
  WEBHOOK_URL='https://events.pagerduty.com/v2/enqueue'
  WEBHOOK_SECRET=my_secrets_db.my_secrets_schema.my_pagerduty_webhook_secret
  WEBHOOK_BODY_TEMPLATE='{
    "routing_key": "SNOWFLAKE_WEBHOOK_SECRET",
    "event_action": "trigger",
    "payload": {
      "summary": "SNOWFLAKE_WEBHOOK_MESSAGE",
      "source": "Snowflake monitoring",
      "severity": "INFO"
    }
  }'
  WEBHOOK_HEADERS=('Content-Type'='application/json');
Copy

Webhookに通知を送信する

Webhookに通知を送信するには:

  1. SANITIZE_WEBHOOK_CONTENT 関数を渡して、メッセージからプレースホルダー(SNOWFLAKE_WEBHOOK_SECRET など)を削除します。

  2. サニタイズされたメッセージを渡し、使用するWebhook通知統合の名前を指定して、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出します。

例えば、次のステートメントは、先に作成した通知統合を使用して、 JSON メッセージをSlack webhookに送信します。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(
    SNOWFLAKE.NOTIFICATION.SANITIZE_WEBHOOK_CONTENT('my message')
  ),
  SNOWFLAKE.NOTIFICATION.INTEGRATION('my_slack_webhook_int')
);
Copy

この例では、プレーンテキスト(my message)でメッセージを渡しています。通知統合の WEBHOOK_BODY_TEMPLATE プロパティによって指定されたテンプレートからWebhookリクエストの本文を構築するとき、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION は SNOWFLAKE_WEBHOOK_MESSAGE プレースホルダーをあなたが渡すメッセージで置き換えます。

例えば、リクエストの本文に以下のテンプレートを指定したとします。

CREATE OR REPLACE NOTIFICATION INTEGRATION my_slack_webhook_int
  ...
  WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}'
  ...
Copy

SYSTEM$SEND_SNOWFLAKE_NOTIFICATION は、以下の本文を持つリクエストを構築します。

{"text": "my message"}
Copy