웹훅 알림 보내기

다음 시스템에서 제공하는 웹훅을 사용하면 Snowflake 알림을 다음 외부 시스템과 통합할 수 있습니다.

참고

Snowflake는 위에 나열된 시스템 이외의 외부 시스템에는 웹훅 알림을 보내지 않습니다.

이러한 시스템 중 하나에 알림을 보내려면:

  1. 외부 시스템에 대한 웹훅 URL의 시크릿을 생성합니다.

  2. 외부 시스템에 대한 웹훅 알림 통합을 생성합니다.

  3. 웹훅 알림 통합을 사용하여 외부 시스템에 알림을 보냅니다.

다음 섹션에서는 이러한 외부 시스템에 알림을 설정하고 보내는 방법에 대한 자세한 내용을 제공합니다.

웹훅 URL에 대한 시크릿 만들기

대부분의 웹훅은 수신되는 HTTP 요청에 시크릿 또는 통합 키가 필요합니다. 예:

이 시크릿 키나 통합 키의 경우 일반 문자열 유형의 시크릿 오브젝트를 생성하는 것이 좋습니다. 이 시크릿 오브젝트는 다음과 같은 방식으로 사용됩니다.

  • 웹훅 알림 통합을 생성할 때 CREATE NOTIFICATION INTEGRATION 문에 이 시크릿 오브젝트를 지정합니다.

  • 알림을 보낼 때 시크릿 오브젝트는 웹훅에 대한 HTTP 요청을 구성하는 데 사용됩니다.

다음 사항을 참고하십시오.

  • 웹훅 알림 통합을 생성할 때 이 시크릿에 대한 USAGE 권한이 있는 역할을 사용해야 합니다.

  • 이 웹훅으로 알림을 보낼 때는 이 시크릿에 대한 READ 권한과 시크릿이 포함된 데이터베이스 및 스키마에 대한 USAGE 권한이 있는 역할을 사용해야 합니다.

이 오브젝트를 만들려면 CREATE SECRET 명령을 사용하고 TYPE=GENERIC_STRING으로 지정합니다. 해당 오브젝트를 생성하려면 스키마에 대해 CREATE SECRET 권한이 있는 역할을 사용해야 합니다.

다음 섹션에서는 시크릿 오브젝트를 생성하는 예제를 제공합니다.

예제 1: Slack 웹훅에 대한 시크릿 만들기

URL을 사용하여 Slack 웹훅 으로 알림을 보내려고 한다고 가정해 보겠습니다.

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

이 예제에서 웹훅 URL에는 시크릿 T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX 가 포함되어 있습니다.

다음 문을 실행하여 이 시크릿에 대한 시크릿 오브젝트를 생성합니다.

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

예제 2: Teams 웹훅에 대한 시크릿 만들기

URL을 사용하여 Teams 웹훅 으로 알림을 보내려고 한다고 가정해 보겠습니다.

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

이 예제에서 웹훅 URL에는 시크릿 xxxxxxxx 가 포함되어 있습니다.

다음 문을 실행하여 이 시크릿에 대한 시크릿 오브젝트를 생성합니다.

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

예제: PagerDuty 웹훅에 대한 시크릿 만들기

PagerDuty 웹훅 으로 알림을 보내려고 하고 통합 키(요청의 routing_key 필드에 포함해야 하는 값)가 다음과 같다고 가정해 보겠습니다.

xxxxxxxx
Copy

다음 문을 실행하여 이 시크릿에 대한 시크릿 오브젝트를 생성합니다.

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

웹훅 알림 통합 만들기

웹훅 유형의 알림 통합을 생성하려면 CREATE NOTIFICATION INTEGRATION 명령을 사용합니다.

이 명령을 실행할 때 다음 속성을 설정하여 알림을 위해 전송할 HTTP 요청을 설정합니다.

  • TYPE를 WEBHOOK으로 설정합니다.

  • URL, HTTP 요청 본문 또는 헤더에 포함할 시크릿 오브젝트를 생성한 경우 WEBHOOK_SECRET을 해당 시크릿 오브젝트의 이름으로 설정합니다.

  • 웹훅의 경우 WEBHOOK_URL을 URL로 설정합니다.

    웹훅 URL에 시크릿이 포함되어 있고 이 시크릿에 대한 시크릿 오브젝트를 생성한 경우 URL의 시크릿을 SNOWFLAKE_WEBHOOK_SECRET으로 바꿉니다.

  • 웹훅용 메시지 본문이 이 외부 시스템의 특정 형식이어야 하는 경우(예: 이 시스템으로 보내는 모든 메시지가 동일한 형식을 사용해야 하는 경우) WEBHOOK_BODY_TEMPLATE을 메시지의 템플릿으로 설정합니다. 이 템플릿에서:

    • 메시지 본문에 시크릿이 표시되어야 하는 위치에 SNOWFLAKE_WEBHOOK_SECRET 자리 표시자를 사용합니다.

    • 알림 메시지가 표시되어야 하는 위치에 SNOWFLAKE_WEBHOOK_MESSAGE 자리 표시자를 사용합니다.

    SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 을 호출하고 메시지를 전달하면 저장 프로시저가 템플릿을 사용하여 웹훅 요청의 본문을 구성합니다. 저장 프로시저는 SNOWFLAKE_WEBHOOK_MESSAGE 자리 표시자를 사용자가 전달한 메시지로 대체합니다.

  • 웹훅에 대한 HTTP 요청에 특정 HTTP 헤더를 포함해야 하는 경우 헤더 이름 및 값 목록에 WEBHOOK_HEADERS를 설정합니다.

    헤더 값에 시크릿이 표시되어야 하는 위치에 SNOWFLAKE_WEBHOOK_SECRET 자리 표시자를 사용합니다.

다음 섹션에서는 다양한 유형의 외부 시스템에 대한 웹훅 알림 통합을 생성하는 예제를 제공합니다.

예제 1: Slack 웹훅에 대한 알림 통합 만들기

URL을 사용하여 Slack 웹훅으로 알림을 보내려고 한다고 가정해 보겠습니다.

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 웹훅에 대한 알림 통합 만들기

URL을 사용하여 Teams 웹훅으로 알림을 보내려고 한다고 가정해 보겠습니다.

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 웹훅에 대한 알림 통합 만들기

URL을 사용하여 PagerDuty 웹훅으로 알림을 보내려고 한다고 가정해 보겠습니다.

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

메시지 본문의 routing_key 필드에 포함되어야 하는 통합 키 xxxxxx 에 대해 이름이 my_pagerduty_webhook_secret시크릿 오브젝트를 생성 했다고 가정해 보겠습니다.

다음 문을 실행하여 이 웹훅에 대한 알림 통합을 생성합니다.

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

웹훅에 알림 보내기

웹훅에 알림을 보내려면:

  1. SANITIZE_WEBHOOK_CONTENT 함수를 전달하여 메시지에서 자리 표시자(예: SNOWFLAKE_WEBHOOK_SECRET)를 제거합니다.

  2. SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 저장 프로시저를 호출하여 위생 처리된 메시지를 전달하고 사용할 웹훅 알림 통합의 이름을 지정합니다.

예를 들어, 다음 문은 앞서 만든 알림 통합을 사용하여 JSON 메시지를 Slack 웹훅으로 보냅니다.

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 속성으로 지정된 템플릿에서 웹훅 요청의 본문을 작성할 때 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