CREATE NOTIFICATION INTEGRATION(์›นํ›„ํฌ)ยถ

์›นํ›„ํฌ ์— ๋Œ€ํ•ด ์ƒˆ ์•Œ๋ฆผ ํ†ตํ•ฉ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ธฐ์กด ํ†ตํ•ฉ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ:

ALTER NOTIFICATION INTEGRATION(์›นํ›„ํฌ) , DESCRIBE NOTIFICATION INTEGRATION , DROP INTEGRATION , SHOW NOTIFICATION INTEGRATIONS

๊ตฌ๋ฌธยถ

CREATE [ OR REPLACE ] NOTIFICATION INTEGRATION [ IF NOT EXISTS ] <name>
  TYPE = WEBHOOK
  ENABLED = { TRUE | FALSE }
  WEBHOOK_URL = '<url>'
  [ WEBHOOK_SECRET = <secret_name> ]
  [ WEBHOOK_BODY_TEMPLATE = '<template_for_http_request_body>' ]
  [ WEBHOOK_HEADERS = ( '<header_1>'='<value_1>' [ , '<header_N>'='<value_N>', ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

ํ•„์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

name

ํ†ตํ•ฉ์— ๋Œ€ํ•œ ์‹๋ณ„์ž(์ฆ‰, ์ด๋ฆ„)๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ, ๊ณ„์ •์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์‹๋ณ„์ž๋Š” ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ์ „์ฒด ์‹๋ณ„์ž ๋ฌธ์ž์—ด์„ ํฐ๋”ฐ์˜ดํ‘œ(์˜ˆ: "My object")๋กœ ๋ฌถ์ง€ ์•Š๋Š” ํ•œ ๊ณต๋ฐฑ์ด๋‚˜ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์‹๋ณ„์ž๋„ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹๋ณ„์ž ์š”๊ตฌ ์‚ฌํ•ญ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ENABLED = { TRUE | FALSE }

ํ†ตํ•ฉ ์ž‘์—…์„ ์‹œ์ž‘ํ• ์ง€ ์ผ์‹œ ์ค‘๋‹จํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • TRUE ๋กœ ์ง€์ •ํ•˜๋ฉด ํ†ตํ•ฉ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

  • FALSE ๋กœ ์ง€์ •ํ•˜๋ฉด ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ†ตํ•ฉ์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. Snowflake์™€ ์„œ๋“œ ํŒŒํ‹ฐ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ตํ•ฉ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

TYPE = WEBHOOK

์ด๊ฒƒ์ด ์›นํ›„ํฌ์— ๋Œ€ํ•œ ์•Œ๋ฆผ ํ†ตํ•ฉ์ž„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

WEBHOOK_URL = 'url'

์›นํ›„ํฌ์˜ URL์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. URL์€ https:// ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ URL๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Slack ์›นํ›„ํฌ์˜ URL. ์ด๋Ÿฌํ•œ URL์€ https://hooks.slack.com/services/ ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Teams ์›นํ›„ํฌ์˜ URL. ์ด๋Ÿฌํ•œ URL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜ ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    https://<hostname>.webhook.office.com/webhookb2/<path_components>/IncomingWebhook/<path_components>
    
    Copy
  • PagerDuty ์›นํ›„ํฌ์˜ URL. ์ด URL์€ https://events.pagerduty.com/v2/enqueue ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

URL์— ์‹œํฌ๋ฆฟ์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ํ•ด๋‹น ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•œ ์‹œํฌ๋ฆฟ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ URL์—์„œ ํ•ด๋‹น ์‹œํฌ๋ฆฟ์„ SNOWFLAKE_WEBHOOK_SECRET์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Slack ์›นํ›„ํฌ URL์—์„œ ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•œ ์‹œํฌ๋ฆฟ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ WEBHOOK_URL์„ ๋‹ค์Œ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

WEBHOOK_URL='https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET'
Copy

์„ ํƒ์  ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

WEBHOOK_SECRET = secret_name

์ด ํ†ตํ•ฉ์—์„œ ์‚ฌ์šฉํ•  ์‹œํฌ๋ฆฟ ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

WEBHOOK_URL, WEBHOOK_BODY_TEMPLATE ๋˜๋Š” WEBHOOK_HEADERS์— SNOWFLAKE_WEBHOOK_SECRET ์ž๋ฆฌ ํ‘œ์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ๋•Œ ์ž๋ฆฌ ํ‘œ์‹œ์ž๊ฐ€ ์ด ์‹œํฌ๋ฆฟ์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

์•Œ๋ฆผ์„ ๋ณด๋‚ผ ๋•Œ ์‹œํฌ๋ฆฟ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์Šคํ‚ค๋งˆ ์ด๋ฆ„์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์Šคํ‚ค๋งˆ ์ด๋ฆ„์œผ๋กœ ์‹œํฌ๋ฆฟ ์ด๋ฆ„์„ ํ•œ์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

WEBHOOK_SECRET = my_secrets_db.my_secrets_schema.my_slack_webhook_secret
Copy

์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ์‹œํฌ๋ฆฟ๊ณผ ์‹œํฌ๋ฆฟ์„ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ USAGE ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: ๊ฐ’ ์—†์Œ

WEBHOOK_BODY_TEMPLATE = 'template_for_http_request_body'

์•Œ๋ฆผ์„ ์œ„ํ•ด ๋ณด๋‚ผ HTTP ์š”์ฒญ ๋ณธ๋ฌธ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์›นํ›„ํฌ์—์„œ HTTP ์š”์ฒญ ๋ณธ๋ฌธ์— ๋Œ€ํ•ด ํŠน์ • ํ˜•์‹(์˜ˆ: ํŠน์ • JSON ํ˜•์‹)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ด๋ฅผ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ž์—ด์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ:

WEBHOOK_BODY_TEMPLATE='{
  "routing_key": "SNOWFLAKE_WEBHOOK_SECRET",
  "event_action": "trigger",
  "payload":
    {
      "summary": "SNOWFLAKE_WEBHOOK_MESSAGE",
      "source": "Snowflake monitoring",
      "severity": "INFO",
    }
  }'
Copy

WEBHOOK_BODY_TEMPLATE์„ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€ ์œ ํ˜•๊ณผ ํ•จ๊ป˜ Content-Type ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๋„๋ก WEBHOOK_HEADERS๋„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, WEBHOOK_BODY_TEMPLATE์„ JSON ํ˜•์‹์˜ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ํ—ค๋” Content-Type: application/json ์„ ํฌํ•จํ•˜๋„๋ก WEBHOOK_HEADERS๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

WEBHOOK_HEADERS=('Content-Type'='application/json')
Copy

๊ธฐ๋ณธ๊ฐ’: ๊ฐ’ ์—†์Œ

WEBHOOK_HEADERS = ( 'header'='value' [ , 'header'='value', ... ] )

์›นํ›„ํฌ์— ๋Œ€ํ•œ HTTP ์š”์ฒญ์— ํฌํ•จํ•  HTTP ํ—ค๋”์™€ ๊ฐ’์˜ ๋ชฉ๋ก์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

HTTP ํ—ค๋”์— ์‹œํฌ๋ฆฟ(์˜ˆ: Authorization ํ—ค๋”)์„ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•œ ์‹œํฌ๋ฆฟ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ ํ—ค๋” ๊ฐ’์— SNOWFLAKE_WEBHOOK_SECRET ์ž๋ฆฌ ํ‘œ์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

WEBHOOK_HEADERS=('Authorization'='Basic SNOWFLAKE_WEBHOOK_SECRET')
Copy

๊ธฐ๋ณธ๊ฐ’: ๊ฐ’ ์—†์Œ

COMMENT = 'string_literal'

ํ†ตํ•ฉ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด(๋ฆฌํ„ฐ๋Ÿด)์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: ๊ฐ’ ์—†์Œ

์•ก์„ธ์Šค ์ œ์–ด ์š”๊ตฌ ์‚ฌํ•ญยถ

์ด ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ญํ•  ์—๋Š” ์ตœ์†Œํ•œ ๋‹ค์Œ ๊ถŒํ•œ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ

์˜ค๋ธŒ์ ํŠธ

์ฐธ๊ณ 

CREATE INTEGRATION

๊ณ„์ •

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

USAGE

์‹œํฌ๋ฆฟ

WEBHOOK_SECRET ์†์„ฑ์„ ์‹œํฌ๋ฆฟ ์˜ค๋ธŒ์ ํŠธ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์‹œํฌ๋ฆฟ๊ณผ ํ•ด๋‹น ์‹œํฌ๋ฆฟ์ด ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•ด USAGE ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง€์ •๋œ ๊ถŒํ•œ ์„ธํŠธ๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ• ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ•  ๋งŒ๋“ค๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ณด์•ˆ ์˜ค๋ธŒ์ ํŠธ ์— ๋Œ€ํ•ด SQL ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์—ญํ• ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๋Š” ์•ก์„ธ์Šค ์ œ์–ด์˜ ๊ฐœ์š” ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ จ:

    ์ฃผ์˜

    ๊ณ ๊ฐ์€ Snowflake ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ(์‚ฌ์šฉ์ž ์˜ค๋ธŒ์ ํŠธ ์ œ์™ธ), ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ, ์ˆ˜์ถœ ํ†ต์ œ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ธฐํƒ€ ๊ทœ์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์ž…๋ ฅ๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Snowflake์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • OR REPLACE ๋ฐ IF NOT EXISTS ์ ˆ์€ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฌธ์ž๋ฅผ ๊ฐ™์€ ๋ฌธ์— ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • CREATE OR REPLACE <์˜ค๋ธŒ์ ํŠธ> ๋ฌธ์€ ์›์ž์„ฑ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ด์ „ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์ƒˆ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์˜ˆยถ

์›นํ›… ์•Œ๋ฆผ ํ†ตํ•ฉ ๋งŒ๋“ค๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.