CREATE NOTIFICATION INTEGRATION

CREATE NOTIFICATION INTEGRATION (webhooks)

웹훅(webhook)용으로 계정에 새 알림 인티그레이션(notification integration)을 만들거나 기존 인티그레이션을 교체하는 명령이에요. 웹훅 알림 인티그레이션은 Snowflake가 외부 HTTP 엔드포인트에 알림을 보낼 수 있게 해요.

출처: 문서

본문

웹훅용으로 새 알림 인티그레이션을 만들거나 기존 인티그레이션을 교체해요.

함께 보기: ALTER NOTIFICATION INTEGRATION (webhooks), DESCRIBE NOTIFICATION INTEGRATION, DROP INTEGRATION, SHOW NOTIFICATION INTEGRATIONS

구문 (Syntax)

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>' ]

필수 매개변수 (Required parameters)

name 인티그레이션의 식별자(즉 이름)를 지정하는 문자열로, 계정 안에서 고유해야 해요.

또한 식별자는 반드시 알파벳 문자로 시작해야 하며, 전체 식별자 문자열이 큰따옴표로 묶이지 않는 한 공백이나 특수 문자를 포함할 수 없어요 (예: "My object"). 큰따옴표로 묶인 식별자는 대소문자를 구분해요.

자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.

ENABLED = { TRUE | FALSE } 인티그레이션의 운영을 시작할지 일시 중지할지를 지정해요.

  • TRUE는 인티그레이션을 활성화해요.
  • FALSE는 유지보수를 위해 인티그레이션을 비활성화해요. Snowflake와 타사 서비스 사이의 어떤 인티그레이션도 작동하지 않아요.

값은 대소문자를 구분하지 않아요. 기본값은 TRUE예요.

TYPE = WEBHOOK 이것이 웹훅용 알림 인티그레이션이라고 지정해요.

WEBHOOK_URL = 'url' 웹훅의 URL을 지정해요. URL은 https:// 프로토콜을 사용해야 해요.

다음 URL만 지정할 수 있어요.

  • Slack 웹훅 URL: https://hooks.slack.com/services/로 시작해야 해요.
  • Microsoft Teams 웹훅 URL: 다음 일반 형식을 사용해야 해요.
    • 2025년 11월 30일까지 Microsoft Teams는 다음 형식의 URL을 지원해요.
      https://<hostname>.<region>.logic.azure.com:443/workflows/<secret>
      
    • 2025년 11월 30일부터 Microsoft Teams는 다음 형식의 URL을 지원해요.
      https://default<hostname>.environment.api.powerplatform.com/powerautomate/automations/direct/workflows/<secret>/triggers/manual/paths/invoke
      
    • 참고: WEBHOOK_URL 매개변수에서 URL의 포트 번호(:443)는 생략해야 해요. Microsoft API 데이터 형식에 대한 정보는 https://adaptivecards.io/를 참고해요.

  • PagerDuty 웹훅 URL: https://events.pagerduty.com/v2/enqueue여야 해요.
  • Jira 자동화 웹훅 URL: https://api-private.atlassian.com/automation/webhooks/jira/로 시작해야 해요.
  • ServiceNow 웹훅 URL: ServiceNow 인스턴스의 호스트를 사용하며 다음 일반 형식을 가져요.
    https://<instance>.service-now.com/<path>
    

URL에 시크릿이 포함되어 있고 그 시크릿에 대한 시크릿 객체를 만들었다면, 그 시크릿을 URL에서 SNOWFLAKE_WEBHOOK_SECRET으로 바꿔요. 예를 들어 Slack 웹훅 URL의 시크릿에 대한 시크릿 객체를 만들었다면 WEBHOOK_URL을 다음과 같이 설정해요.

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

Jira와 ServiceNow 웹훅의 경우 시크릿은 URL의 일부가 아니에요. HTTP 헤더로 시크릿을 전달해요(WEBHOOK_HEADERS 매개변수 사용). 자세한 내용은 웹훅 알림 보내기(Sending webhook notifications)를 참고해요.

선택 매개변수 (Optional parameters)

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' 인티그레이션에 대한 설명(comment)을 지정하는 문자열(리터럴)이에요.

  • 기본값: 값 없음

접근 제어 요구 사항 (Access control requirements)

이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.

권한 (Privilege) 객체 (Object) 비고
CREATE INTEGRATION Account 기본적으로 ACCOUNTADMIN 역할만 이 권한을 가져요. 필요에 따라 추가 역할에 부여될 수 있어요.
USAGE Secret WEBHOOK_SECRET 속성을 시크릿 객체로 설정했다면 그 시크릿과 그것을 포함하는 데이터베이스·스키마에 대한 USAGE 권한이 있어야 해요.
CREATE NOTIFICATION INTEGRATION Account 알림 인티그레이션을 만들 수 있는 권한을 부여해요. 이 권한은 다른 유형의 인티그레이션을 만들 수 있는 권한은 부여하지 않아요.

지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.

사용 메모 (Usage notes)

메타데이터에 관해서는 다음 사항에 주의해요.

⚠️ 주의: 고객은 Snowflake 서비스를 사용할 때 (User 객체를 제외하고) 개인 데이터·민감 데이터·수출 통제 데이터·기타 규제 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고해요.

OR REPLACEIF NOT EXISTS 절은 서로 배타적이에요. 같은 문에서 둘 다 사용할 수 없어요.

CREATE OR REPLACE <object> 문은 원자적(atomic)으로 동작해요. 즉, 객체를 교체할 때 기존 객체는 삭제되고 새 객체는 단일 트랜잭션 안에서 생성돼요.

예시 (Examples)

웹훅 알림 인티그레이션 만들기(Creating a webhook notification integration)를 참고해요.

더 알아보기 (Learn more)