Webhook通知の送信¶
これらのシステムが提供するWebhookを使用して、Snowflake通知を以下の外部システムと統合できます。
注釈
Snowflakeは、上記以外の外部システムにはwebhook通知を送信しません。
これらのシステムのいずれかに通知を送信するには:
次のセクションでは、これらの外部システムへの通知の設定と送信方法について詳しく説明します。
Webhook URL のシークレットの作成¶
ほとんどのWebhookは、受信する HTTP リクエストに秘密キーまたは統合キーを必要とします。例:
Slackで受信Webhookを作成 する場合、Webhookの URL にはシークレットが含まれます。
https://hooks.slack.com/services/<secret>
Teamsで受信Webhookを作成 する場合、Webhookの URL にはシークレットが含まれます。
https://<hostname>.webhook.office.com/webhookb2/<secret>
PagerDuty サービスの統合を設定 する場合、統合は、Webhookリクエストに含める必要のある統合キーを提供します。
{ "routing_key" : "<integration_key>", ...
この秘密キーまたは統合キーには、一般的な文字列型の秘密オブジェクトを作成することをお勧めします。このシークレットオブジェクトは、以下のように使用されます。
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
この例では、Webhook URL にシークレット T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
が含まれています。
次のステートメントを実行して、このシークレット用のシークレットオブジェクトを作成します。
CREATE OR REPLACE SECRET my_slack_webhook_secret
TYPE = GENERIC_STRING
SECRET_STRING = 'T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX';
例 2: Teams Webhookのシークレットの作成¶
URL で Teams Webhook に通知を送信したいとします。
https://mymsofficehost.webhook.office.com/webhookb2/xxxxxxxx
この例では、Webhook URL にシークレット xxxxxxxx
が含まれています。
次のステートメントを実行して、このシークレット用のシークレットオブジェクトを作成します。
CREATE OR REPLACE SECRET my_teams_webhook_secret
TYPE = GENERIC_STRING
SECRET_STRING = 'xxxxxxxx';
例 3: PagerDuty Webhookのシークレットの作成¶
PagerDuty Webhook に通知を送信したい場合、統合キー(リクエストの routing_key
フィールドに含める必要がある値)が以下であるとします。
xxxxxxxx
次のステートメントを実行して、このシークレット用のシークレットオブジェクトを作成します。
CREATE OR REPLACE SECRET my_pagerduty_webhook_secret
TYPE = GENERIC_STRING
SECRET_STRING = 'xxxxxxxx';
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
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');
例2: Teams Webhookの通知統合を作成する¶
URL でTeams Webhookに通知を送信したいとします。
https://mymsofficehost.webhook.office.com/webhookb2/xxxxxxxx
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');
例3: PagerDuty Webhookの通知統合の作成¶
PagerDuty Webhookに URL で通知を送信したいとします。
https://events.pagerduty.com/v2/enqueue
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');
Webhookに通知を送信する¶
Webhookに通知を送信するには:
SANITIZE_WEBHOOK_CONTENT 関数を渡して、メッセージからプレースホルダー(SNOWFLAKE_WEBHOOK_SECRET など)を削除します。
サニタイズされたメッセージを渡し、使用する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')
);
この例では、プレーンテキスト(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"}'
...
SYSTEM$SEND_SNOWFLAKE_NOTIFICATION は、以下の本文を持つリクエストを構築します。
{"text": "my message"}