웹훅 알림 보내기¶
다음 시스템에서 제공하는 웹훅을 사용하면 Snowflake 알림을 다음 외부 시스템과 통합할 수 있습니다.
참고
Snowflake는 위에 나열된 시스템 이외의 외부 시스템에는 웹훅 알림을 보내지 않습니다.
이러한 시스템 중 하나에 알림을 보내려면:
다음 섹션에서는 이러한 외부 시스템에 알림을 설정하고 보내는 방법에 대한 자세한 내용을 제공합니다.
웹훅 URL에 대한 시크릿 만들기¶
대부분의 웹훅은 수신되는 HTTP 요청에 시크릿 또는 통합 키가 필요합니다. 예:
Slack에서 수신 웹훅을 만들 때 웹훅의 URL에는 시크릿이 포함됩니다.
https://hooks.slack.com/services/<secret>
Teams에서 수신 웹훅을 만들 때 웹훅의 URL에는 시크릿이 포함됩니다.
https://<hostname>.webhook.office.com/webhookb2/<secret>
PagerDuty 서비스에 대한 통합 서비스를 설정 하면 통합 서비스에서 웹훅 요청에 포함해야 하는 연동 키를 제공합니다.
{ "routing_key" : "<integration_key>", ...
이 시크릿 키나 통합 키의 경우 일반 문자열 유형의 시크릿 오브젝트를 생성하는 것이 좋습니다. 이 시크릿 오브젝트는 다음과 같은 방식으로 사용됩니다.
웹훅 알림 통합을 생성할 때 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
이 예제에서 웹훅 URL에는 시크릿 T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
가 포함되어 있습니다.
다음 문을 실행하여 이 시크릿에 대한 시크릿 오브젝트를 생성합니다.
CREATE OR REPLACE SECRET my_slack_webhook_secret
TYPE = GENERIC_STRING
SECRET_STRING = 'T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX';
예제 2: Teams 웹훅에 대한 시크릿 만들기¶
URL을 사용하여 Teams 웹훅 으로 알림을 보내려고 한다고 가정해 보겠습니다.
https://mymsofficehost.webhook.office.com/webhookb2/xxxxxxxx
이 예제에서 웹훅 URL에는 시크릿 xxxxxxxx
가 포함되어 있습니다.
다음 문을 실행하여 이 시크릿에 대한 시크릿 오브젝트를 생성합니다.
CREATE OR REPLACE SECRET my_teams_webhook_secret
TYPE = GENERIC_STRING
SECRET_STRING = 'xxxxxxxx';
예제: PagerDuty 웹훅에 대한 시크릿 만들기¶
PagerDuty 웹훅 으로 알림을 보내려고 하고 통합 키(요청의 routing_key
필드에 포함해야 하는 값)가 다음과 같다고 가정해 보겠습니다.
xxxxxxxx
다음 문을 실행하여 이 시크릿에 대한 시크릿 오브젝트를 생성합니다.
CREATE OR REPLACE SECRET my_pagerduty_webhook_secret
TYPE = GENERIC_STRING
SECRET_STRING = 'xxxxxxxx';
웹훅 알림 통합 만들기¶
웹훅 유형의 알림 통합을 생성하려면 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
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 웹훅에 대한 알림 통합 만들기¶
URL을 사용하여 Teams 웹훅으로 알림을 보내려고 한다고 가정해 보겠습니다.
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 웹훅에 대한 알림 통합 만들기¶
URL을 사용하여 PagerDuty 웹훅으로 알림을 보내려고 한다고 가정해 보겠습니다.
https://events.pagerduty.com/v2/enqueue
메시지 본문의 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');
웹훅에 알림 보내기¶
웹훅에 알림을 보내려면:
SANITIZE_WEBHOOK_CONTENT 함수를 전달하여 메시지에서 자리 표시자(예: SNOWFLAKE_WEBHOOK_SECRET)를 제거합니다.
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')
);
이 예제에서 문은 일반 텍스트(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"}'
...
SYSTEM$SEND_SNOWFLAKE_NOTIFICATION은 다음과 같은 본문으로 요청을 구성합니다.
{"text": "my message"}