Versenden von Webhook-Benachrichtigungen

Sie können Snowflake-Benachrichtigungen in die folgenden externen Systeme integrieren, indem Sie die von diesen Systemen bereitgestellten Webhooks verwenden:

Bemerkung

Snowflake sendet keine Webhook-Benachrichtigungen an andere als die oben aufgeführten externen Systeme.

Um eine Benachrichtigung an eines dieser Systeme zu senden:

  1. Erstellen Sie das Geheimnis für den Webhook-URL für das externe System.

  2. Erstellen Sie die Integration der Webhook-Benachrichtigung für das externe System.

  3. Senden Sie die Benachrichtigung an das externe System, indem Sie die Integration der Webhook-Benachrichtigung verwenden.

In den nächsten Abschnitten erfahren Sie mehr darüber, wie Sie Benachrichtigungen für diese externen Systeme einstellen und versenden.

Erstellen eines Geheimnisses für einen Webhook-URL

Die meisten Webhooks erfordern ein Geheimnis oder einen Integrationsschlüssel in der eingehenden HTTP-Anfrage. Beispiel:

Für diesen geheimen oder Integrationsschlüssel empfehlen wir, ein geheimes Objekt vom Typ generische Zeichenfolge zu erstellen. Dieses geheime Objekt wird auf die folgenden Arten verwendet:

  • Wenn Sie eine Webhook-Benachrichtigungsintegration erstellen, geben Sie dieses geheime Objekt in der Anweisung CREATE NOTIFICATION INTEGRATION an.

  • Wenn Sie eine Benachrichtigung senden, wird das geheime Objekt verwendet, um die HTTP-Anfrage für den Webhook zu erstellen.

Beachten Sie Folgendes:

  • Wenn Sie die Webhook-Benachrichtigungsintegration erstellen, müssen Sie eine Rolle verwenden, die über die Berechtigung USAGE für dieses Geheimnis verfügt.

  • Wenn Sie eine Benachrichtigung an diesen Webhook senden, müssen Sie eine Rolle verwenden, die über die Berechtigung READ für dieses Geheimnis sowie über Berechtigung USAGE für die Datenbank und das Schema verfügt, die das Geheimnis enthalten.

Um dieses Objekt zu erstellen, verwenden Sie den Befehl CREATE SECRET, und geben Sie TYPE=GENERIC_STRING an. Sie müssen eine Rolle verwenden, die über die Berechtigung CREATE SECRET für das Schema verfügt, in dem Sie planen, dieses Objekt zu erstellen.

In den nächsten Abschnitten finden Sie Beispiele für die Erstellung des geheimen Objekts.

Beispiel 1: Erstellen eines Geheimnisses für einen Slack-Webhook

Angenommen, Sie möchten Benachrichtigungen an einen Slack-Webhook mit der folgenden URL senden:

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

In diesem Beispiel enthält die Webhook-URL das Geheimnis T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX.

Führen Sie die folgende Anweisung aus, um ein geheimes Objekt für dieses Geheimnis zu erstellen:

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

Beispiel 2: Erstellen eines Geheimnisses für einen Teams-Webhook

Angenommen, Sie möchten Benachrichtigungen an einen Teams-Webhook mit der folgenden URL senden:

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

In diesem Beispiel enthält die Webhook-URL das Geheimnis xxxxxxxx.

Führen Sie die folgende Anweisung aus, um ein geheimes Objekt für dieses Geheimnis zu erstellen:

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

Beispiel 3: Erstellen eines Geheimnisses für einen PagerDuty-Webhook

Angenommen, Sie möchten Benachrichtigungen an einen PagerDuty-Webhook senden und Ihr Integrationschlüssel (der Wert, den Sie in das Feld routing_key in Anfragen einfügen müssen) lautet:

xxxxxxxx
Copy

Führen Sie die folgende Anweisung aus, um ein geheimes Objekt für dieses Geheimnis zu erstellen:

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

Erstellen einer Webhook-Benachrichtigungsintegration

Um eine Benachrichtigungsintegration vom Typ Webhook zu erstellen, verwenden Sie den Befehl CREATE NOTIFICATION INTEGRATION.

Legen Sie bei der Ausführung dieses Befehls die folgenden Eigenschaften fest, um die HTTP-Anfrage für die Benachrichtigung einzurichten.

  • Setzen Sie TYPE auf WEBHOOK.

  • Wenn Sie ein geheimes Objekt für ein Geheimnis erstellt haben, das in die URL den Textteil (Body) oder Header der HTTP-Anfrage, aufgenommen werden soll, legen Sie WEBHOOK_SECRET für den Namen dieses geheimen Objekts fest.

  • Legen Sie WEBHOOK_URL die URL für den Webhook fest.

    Wenn die Webhook-URL ein Geheimnis enthält und Sie ein geheimes Objekt für dieses Geheimnis erstellt haben, ersetzen Sie das Geheimnis in der URL durch SNOWFLAKE_WEBHOOK_SECRET.

  • Wenn der Nachrichtentext für den Webhook in einem bestimmten Format für dieses externe System vorliegen muss (z. B. wenn alle an dieses System gesendeten Meldungen das gleiche Format verwenden müssen), legen Sie WEBHOOK_BODY_TEMPLATE als Vorlage für die Meldung fest. In dieser Vorlage:

    • Verwenden Sie den Platzhalter SNOWFLAKE_WEBHOOK_SECRET an der Stelle, an der das Geheimnis im Nachrichtentext erscheinen soll.

    • Verwenden Sie den Platzhalter SNOWFLAKE_WEBHOOK_MESSAGE an der Stelle, an der Benachrichtigungsmeldung erscheinen soll.

    Wenn Sie SYSTEM$SEND_SNOWFLAKE_NOTIFICATION aufrufen und eine Meldung übergeben, verwendet die Prozedur die Vorlage, um den Body der Webhook-Anfrage zu erstellen. Die gespeicherte Prozedur ersetzt den Platzhalter SNOWFLAKE_WEBHOOK_MESSAGE durch die Meldung, die Sie übergeben.

  • Wenn die HTTP-Anfrage an den Webhook bestimmte HTTP-Header enthalten muss, legen Sie WEBHOOK_HEADERS für Liste der Headernamen und -werte fest

    Verwenden Sie den Platzhalter SNOWFLAKE_WEBHOOK_SECRET, wenn das Geheimnis im Wert eines Headers erscheinen soll.

In den nächsten Abschnitten finden Sie Beispiele für Webhook-Benachrichtigungsintegrationen für verschiedene Arten von externen Systemen.

Beispiel 1: Erstellen einer Benachrichtigungsintegration für einen Slack-Webhook

Angenommen, Sie möchten Benachrichtigungen an einen Slack-Webhook mit der folgenden URL senden:

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

Nehmen wir an, dass Sie ein geheimes Objekt mit dem Namen my_slack_webhook_secret für das Geheimnis T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX erstellt haben, das in der URL erscheint.

Führen Sie die folgende Anweisung aus, um eine Benachrichtigungsintegration für diesen Webhook zu erstellen:

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

Beispiel 2: Erstellen einer Benachrichtigungsintegration für einen Teams-Webhook

Angenommen, Sie möchten Benachrichtigungen an einen Teams-Webhook mit der folgenden URL senden:

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

Nehmen wir an, dass Sie ein geheimes Objekt mit dem Namen my_teams_webhook_secret für das Geheimnis xxxxxx erstellt haben, das in der URL erscheint.

Führen Sie die folgende Anweisung aus, um eine Benachrichtigungsintegration für diesen Webhook zu erstellen:

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

Beispiel 3: Erstellen einer Benachrichtigungsintegration für einen PagerDuty-Webhook

Angenommen, Sie möchten Benachrichtigungen an einen PagerDuty-Webhook mit der folgenden URL senden:

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

Nehmen wir an, dass Sie ein geheimes Objekt mit dem Namen my_pagerduty_webhook_secret für den Integrationsschlüssel xxxxxx erstellt haben, das in das Feld routing_key im Body der Meldung aufgenommen werden soll.

Führen Sie die folgende Anweisung aus, um eine Benachrichtigungsintegration für diesen Webhook zu erstellen:

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

Senden einer Benachrichtigung an einen Webhook

So senden Sie eine Benachrichtigung an einen Webhook:

  1. Übergeben Sie die Funktion SANITIZE_WEBHOOK_CONTENT, um alle Platzhalter (wie SNOWFLAKE_WEBHOOK_SECRET) aus der Meldung zu entfernen.

  2. Rufen Sie die gespeicherte Prozedur SYSTEM$SEND_SNOWFLAKE_NOTIFICATION auf, übergeben Sie die bereinigte Meldung und geben Sie den Namen der zu verwendenden für Webhook-Benachrichtigungsintegration an.

Die folgende Anweisung sendet beispielsweise eine JSON-Meldung an einen Slack-Webhook und verwendet dabei die zuvor erstellte Benachrichtigungsintegration:

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

In diesem Beispiel wird in der Anweisung eine Meldung in Klartext übergeben (my message). Wenn Sie den Body der Webhook-Anfrage anhand der durch die Eigenschaft WEBHOOK_BODY_TEMPLATE der Benachrichtigungsintegration festgelegten Vorlage erstellen, ersetzt SYSTEM$SEND_SNOWFLAKE_NOTIFICATION SNOWFLAKE_WEBHOOK_MESSAGE den Platzhalter durch die von Ihnen übergebene Meldung.

Nehmen wir zum Beispiel an, dass Sie die folgende Vorlage für den Body der Anfrage angegeben haben:

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

SYSTEM$SEND_SNOWFLAKE_NOTIFICATION erstellt eine Anfrage mit dem folgenden Body:

{"text": "my message"}
Copy