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>' ]
ํ์ ๋งค๊ฐ ๋ณ์ยถ
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>
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'
์ ํ์ ๋งค๊ฐ ๋ณ์ยถ
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
์ด ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํ๋ ค๋ฉด ์ํฌ๋ฆฟ๊ณผ ์ํฌ๋ฆฟ์ ํฌํจํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง์ ๋ํ USAGE ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ: ๊ฐ ์์
WEBHOOK_BODY_TEMPLATE = 'template_for_http_request_body'
์๋ฆผ์ ์ํด ๋ณด๋ผ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ํ ํ๋ฆฟ์ ์ง์ ํฉ๋๋ค.
์นํํฌ์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ๋ํด ํน์ ํ์(์: ํน์ JSON ํ์)์ด ํ์ํ ๊ฒฝ์ฐ, ์ด๋ฅผ ํ์์ ์ง์ ํ๋ ๋ฌธ์์ด๋ก ์ค์ ํฉ๋๋ค. ์ด ๋ฌธ์์ด์์ ๋ค์์ ์ํํฉ๋๋ค.
๋ฉ์์ง์ ์ํฌ๋ฆฟ์ ํฌํจํด์ผ ํ๊ณ ํด๋น ์ํฌ๋ฆฟ์ ๋ํ ์ํฌ๋ฆฟ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ๋ฉ์์ง์ ์ํฌ๋ฆฟ์ด ๋ํ๋์ผ ํ ์์น์ SNOWFLAKE_WEBHOOK_SECRET ์๋ฆฌ ํ์์๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์๋ฆผ ๋ฉ์์ง๋ฅผ ํฌํจํด์ผ ํ๋ ๊ณณ์ SNOWFLAKE_WEBHOOK_MESSAGE ์๋ฆฌ ํ์์๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์:
WEBHOOK_BODY_TEMPLATE='{ "routing_key": "SNOWFLAKE_WEBHOOK_SECRET", "event_action": "trigger", "payload": { "summary": "SNOWFLAKE_WEBHOOK_MESSAGE", "source": "Snowflake monitoring", "severity": "INFO", } }'
WEBHOOK_BODY_TEMPLATE์ ์ค์ ํ๋ ๊ฒฝ์ฐ ๋ฉ์์ง ์ ํ๊ณผ ํจ๊ป
Content-Type
ํค๋๋ฅผ ํฌํจํ๋๋ก WEBHOOK_HEADERS๋ ์ค์ ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, WEBHOOK_BODY_TEMPLATE์ JSON ํ์์ ํ ํ๋ฆฟ์ผ๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ ํค๋Content-Type: application/json
์ ํฌํจํ๋๋ก WEBHOOK_HEADERS๋ฅผ ์ค์ ํ์ญ์์ค.WEBHOOK_HEADERS=('Content-Type'='application/json')
๊ธฐ๋ณธ๊ฐ: ๊ฐ ์์
WEBHOOK_HEADERS = ( 'header'='value' [ , 'header'='value', ... ] )
์นํํฌ์ ๋ํ HTTP ์์ฒญ์ ํฌํจํ HTTP ํค๋์ ๊ฐ์ ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค.
HTTP ํค๋์ ์ํฌ๋ฆฟ(์:
Authorization
ํค๋)์ ํฌํจํด์ผ ํ๋ ๊ฒฝ์ฐ ํด๋น ์ํฌ๋ฆฟ์ ๋ํ ์ํฌ๋ฆฟ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ํค๋ ๊ฐ์ SNOWFLAKE_WEBHOOK_SECRET ์๋ฆฌ ํ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์:WEBHOOK_HEADERS=('Authorization'='Basic SNOWFLAKE_WEBHOOK_SECRET')
๊ธฐ๋ณธ๊ฐ: ๊ฐ ์์
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 <์ค๋ธ์ ํธ> ๋ฌธ์ ์์์ฑ์ ๋๋ค. ์ฆ, ์ค๋ธ์ ํธ๊ฐ ๋ฐ๋ ๋ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์ด์ ์ค๋ธ์ ํธ๊ฐ ์ญ์ ๋๊ณ ์ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
์ยถ
์นํ ์๋ฆผ ํตํฉ ๋ง๋ค๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.