작업에 대한 오류 알림 활성화하기

이 항목에서는 클라우드 메시징을 사용한 작업에 대한 오류 알림 지원 구성 지침을 제공합니다. 이 기능은 작업이 SQL 코드를 실행할 때 발생한 오류를 설명하는 알림을 트리거합니다.

오류 알림 기능은 서버리스 작업과 사용자 관리 작업(즉, 가상 웨어하우스에 의존해 컴퓨팅 리소스를 제공하는 작업)에 모두 지원됩니다.

참고

현재, 오류 알림은 Amazon Simple Notification Service(SNS) 서비스에서 제공하는 클라우드 메시징에 의존합니다. Google Cloud Pub/Sub 큐 및 Microsoft Azure Event Grid에 대한 지원이 계획되어 있습니다.

이 항목의 내용:

참고

  • Snowflake는 오류 알림의 메시지 전달을 보장하려고 최선을 다하지만, 메시지 전달을 보장할 수 없습니다.

  • 이 기능은 알림 통합 오브젝트를 사용하여 구현됩니다. 알림 통합은 Snowflake와 서드 파티 클라우드 메시지 큐 서비스 간의 인터페이스를 제공하는 Snowflake 오브젝트입니다.

Amazon SNS로 오류 알림 활성화하기

1단계: Amazon SNS 항목 만들기

모든 오류 메시지를 처리하기 위해 AWS 계정에 SNS 항목을 만듭니다. SNS 항목의 ARN(Amazon Resource Name)을 기록합니다.

참고

오류 알림에 사용할 SNS FIFO(first in, first out) 항목을 만들지 마십시오. 현재, FIFO 항목으로 전송된 오류 알림은 자동으로 실패합니다.

대기 시간을 줄이고 전체 리전 으로 알림을 보내기 위한 데이터 송신 요금이 발생하지 않도록 하려면 Snowflake 계정과 동일한 리전에 SNS 항목을 만드는 것이 좋습니다.

지침은 SNS 설명서에서 Amazon SNS 항목 만들기 를 참조하십시오.

2단계: IAM 정책 만들기

SNS 항목에 대한 게시 권한을 부여하는 AWS IAM(Identity and Access Management) 정책을 만듭니다. 이 정책은 다음 작업을 정의합니다.

  • sns:publish

    SNS 항목에 게시합니다.

  1. AWS 관리 콘솔에 로그인합니다.

  2. 홈 대시보드에서 Identity & Access Management (IAM)를 선택합니다.

  3. 왼쪽 탐색 창에서 Account settings 을 선택합니다.

  4. Security Token Service Regions 목록을 확장하고 계정이 위치한 리전 에 해당하는 AWS 리전을 찾아 상태가 Inactive 이면 Activate 을 선택합니다.

  5. 왼쪽 탐색 창에서 Policies 을 선택합니다.

  6. Create Policy 를 클릭합니다.

  7. JSON 탭을 클릭합니다.

  8. SNS 항목에 대해 취할 수 있는 조치 사항을 정의하는 정책 문서를 추가합니다.

    다음 텍스트를 복사하여 정책 편집기에 붙여넣습니다.

    {
        "Version": "2012-10-17",
        "Statement": [
          {
             "Effect": "Allow",
             "Action": [
                 "sns:Publish"
             ],
             "Resource": "<sns_topic_arn>"
          }
        ]
     }
    

    sns_topic_arn 을 이 항목의 1단계: Amazon SNS 항목 만들기 에서 만든 SNS 항목의 ARN으로 바꿉니다.

  9. Review policy 를 클릭합니다.

  10. 정책 이름(예: snowflake_sns_topic)과 선택 사항으로 설명을 입력합니다. Create policy 를 클릭합니다.

3단계: AWS IAM 역할 만들기

SNS 항목에 대한 권한을 할당할 AWS IAM 역할을 만듭니다.

  1. AWS 관리 콘솔에 로그인합니다.

  2. 홈 대시보드에서 Identity & Access Management (IAM)를 선택합니다.

  3. 왼쪽 탐색 창에서 Roles 을 선택합니다.

  4. Create role 버튼을 클릭합니다.

  5. Another AWS account 을 신뢰할 수 있는 엔터티 타입으로 선택합니다.

  6. Account ID 필드에 본인의 AWS 계정 ID를 임시로 입력합니다.

  7. Require external ID 옵션을 선택합니다. 이 옵션을 사용하면 Amazon 계정 리소스(즉, SNS)에 대한 권한을 서드 파티(즉, Snowflake)에 부여할 수 있습니다.

    지금은 0000 과 같은 더미 ID를 입력하십시오. 나중에 신뢰 관계를 수정하고 더미 ID를 계정에 대해 생성된 Snowflake IAM 사용자의 외부 ID로 바꿉니다. Snowflake 사용자는 IAM 역할에 대한 신뢰 정책의 조건을 통해 나중에 만들 알림 통합 오브젝트를 사용하여 역할을 맡을 수 있습니다.

  8. Next 버튼을 클릭합니다.

  9. 이 항목의 2단계: IAM 정책 만들기 에서 만든 정책을 찾아 이 정책을 선택합니다.

  10. Next 버튼을 클릭합니다.

  11. 역할의 이름과 설명을 입력하고 Create role 버튼을 클릭합니다.

  12. 역할 요약 페이지에 있는 Role ARN 값을 기록합니다. 하나 이상의 이후 단계에서 이 값을 지정하게 됩니다.

4단계: 알림 통합 만들기

CREATE NOTIFICATION INTEGRATION 을 사용하여 알림 통합을 만듭니다. 통합은 만든 SNS 항목을 참조하는 Snowflake 오브젝트입니다.

단일 알림 통합은 여러 파이프를 지원할 수 있습니다.

참고

계정 관리자(ACCOUNTADMIN 역할의 사용자) 또는 전역 CREATE INTEGRATION 권한이 있는 역할만 이 SQL 명령을 실행할 수 있습니다.

CREATE NOTIFICATION INTEGRATION <integration_name>
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AWS_SNS
  DIRECTION = OUTBOUND
  AWS_SNS_TOPIC_ARN = '<topic_arn>'
  AWS_SNS_ROLE_ARN = '<iam_role_arn>'

여기서:

<통합_이름>

새 통합의 이름입니다.

DIRECTION = OUTBOUND

Snowflake에 관한 클라우드 메시징의 방향입니다. 오류 알림을 구성할 때만 필요합니다.

<항목_arn>

이 항목의 1단계: Amazon SNS 항목 만들기 에서 기록한 SNS 항목 ARN입니다.

<iam_역할_arn>

이 항목의 3단계: AWS IAM 역할 만들기 에서 기록한 IAM 역할 ARN입니다.

예:

CREATE NOTIFICATION INTEGRATION my_notification_int
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AWS_SNS
  DIRECTION = OUTBOUND
  AWS_SNS_TOPIC_ARN = 'arn:aws:sns:us-east-2:111122223333:sns_topic'
  AWS_SNS_ROLE_ARN = 'arn:aws:iam::111122223333:role/error_sns_role';

5단계: SNS 항목에 대한 Snowflake 액세스 권한 부여하기

IAM 사용자 ARN과 SNS 항목 외부 ID를 검색합니다.

  1. DESCRIBE INTEGRATION 실행:

    DESC NOTIFICATION INTEGRATION <integration_name>;
    

    여기서:

    • integration_name4단계: 알림 통합 만들기 에서 만든 알림 통합의 이름입니다.

    예:

    DESC NOTIFICATION INTEGRATION my_notification_int;
    
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    |   property                |   property_type   |   property_value                                     |   property_default   |
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    |   ENABLED                 |   Boolean         |   true                                               |   false              |
    |   NOTIFICATION_PROVIDER   |   String          |   AWS_SNS                                            |                      |
    |   DIRECTION               |   String          |   OUTBOUND                                           |   INBOUND            |
    |   AWS_SNS_TOPIC_ARN       |   String          |   arn:aws:sns:us-east-2:111122223333:myaccount       |                      |
    |   AWS_SNS_ROLE_ARN        |   String          |   arn:aws:iam::111122223333:role/myrole              |                      |
    |   SF_AWS_IAM_USER_ARN     |   String          |   arn:aws:iam::123456789001:user/c_myaccount         |                      |
    |   SF_AWS_EXTERNAL_ID      |   String          |   MYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq=   |                      |
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    
  2. 생성된 다음 값을 기록합니다.

    SF_AWS_IAM_USER_ARN

    계정에 대해 생성된 Snowflake IAM 사용자의 ARN. Snowflake 계정의 사용자는 알림 통합을 사용하여 이 사용자의 외부 ID를 제출하여 3단계: AWS IAM 역할 만들기 에서 만든 IAM 역할을 맡게 됩니다.

    SF_AWS_EXTERNAL_ID

    계정에 대해 생성된 Snowflake IAM 사용자의 외부 ID입니다.

    다음 단계에서는 이러한 값으로 IAM 역할의 신뢰 관계를 업데이트합니다.

Snowflake에 관한 클라우드 메시징의 방향을 나타내는 DIRECTION 속성에 유의하십시오.

IAM 역할의 신뢰 관계 수정하기

  1. AWS 관리 콘솔에 로그인합니다.

  2. 홈 대시보드에서 Identity & Access Management (IAM)를 선택합니다.

  3. 왼쪽 탐색 창에서 Roles 을 선택합니다.

  4. 이 항목의 3단계: AWSIAM 역할 만들기 에서 만든 역할을 클릭합니다.

  5. Trust relationships 탭을 클릭합니다.

  6. Edit trust relationship 버튼을 클릭합니다.

  7. 이 항목의 IAM 사용자 ARN 및 SNS 항목 외부 ID 검색하기 에서 기록한 DESC NOTIFICATION INTEGRATION 출력값으로 정책 문서를 수정합니다.

    IAM 역할에 대한 정책 문서

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "<sf_aws_iam_user_arn>"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "<sf_aws_external_id>"
            }
          }
        }
      ]
    }
    

    여기서:

    • sf_aws_iam_user_arn 은 사용자가 기록한 SF_AWS_IAM_USER_ARN 값입니다.

    • sf_aws_external_id 는 사용자가 기록한 SF_AWS_EXTERNAL_ID 값입니다.

  8. Update Trust Policy 버튼을 클릭합니다. 변경 사항이 저장됩니다.

6단계: 작업에서 오류 알림 활성화하기

ERROR_INTEGRATION 매개 변수 값을 설정하여 개별 독립 실행형 또는 루트 작업의 오류 알림 통합을 활성화합니다. (CREATE TASK를 사용해) 작업을 생성하거나 (ALTER TASK를 사용해) 이후에 생성할 때 매개 변수 값을 설정할 수 있습니다.

오류 알림 통합이 루트 작업에 지정되더라도 동일한 작업 트리에서 실패한 작업은 통합에 오류 알림을 보냅니다.

참고

알림 통합을 참조하는 작업을 만들거나 수정하려면 알림 통합에 대한 USAGE 권한이 있는 역할이 필요합니다. 또한, 역할에는 각각 스키마에 대한 CREATE TASK 권한이나 작업에 대한 OWNERSHIP 권한도 있어야 합니다.

새 작업

CREATE TASK 를 사용하여 새 작업을 만듭니다. 사용 가능한 모든 작업 매개 변수에 대한 설명은 SQL 명령 항목을 참조하십시오.

CREATE TASK <name>
  [...]
  ERROR_INTEGRATION = <integration_name>
  AS <sql>

여기서:

ERROR_INTEGRATION = <통합_이름>

이 항목의 4단계: 알림 통합 만들기 에서 만든 알림 통합의 이름입니다.

다음 예에서는 오류 알림을 지원하는 서버리스 작업을 생성합니다. 이 작업은 현재 타임스탬프를 5분마다 테이블 열에 삽입합니다.

CREATE TASK mytask
  SCHEDULE = '5 MINUTE'
  ERROR_INTEGRATION = my_notification_int
  AS
  INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);

기존 작업

ALTER TASK 를 사용하여 기존 작업을 수정합니다.

ALTER TASK <name> SET ERROR_INTEGRATION = <integration_name>;

여기서 <통합_이름>4단계: 알림 통합 만들기 에서 만든 알림 통합의 이름입니다.

예:

ALTER TASK mytask SET ERROR_INTEGRATION = my_notification_int;

오류 알림 메시지 페이로드

오류 메시지의 본문에서 작업과 작업 실행 중에 발생한 오류를 파악할 수 있습니다.

다음은 작업 오류를 설명하는 샘플 메시지 페이로드입니다. 페이로드는 하나 이상의 오류 메시지를 포함할 수 있습니다.

{\"version\":\"1.0\",\"messageId\":\"3ff1eff0-7ad7-493c-9552-c0307087e0c6\",\"messageType\":\"USER_TASK_FAILED\",\"timestamp\":\"2021-11-11T19:46:39.648Z\",\"accountName\":\"AWS_UTEN_DPO_ACC\",\"taskName\":\"AWS_UTEN_DPO_DB.AWS_UTEN_SC.UTEN_AWS_TK1\",\"taskId\":\"01a03962-2b57-889e-0000-000000000001\",\"rootTaskName\":\"AWS_UTEN_DPO_DB.AWS_UTEN_SC.UTEN_AWS_TK1\",\"rootTaskId\":\"01a03962-2b57-889e-0000-000000000001\",\"messages\":[{\"runId\":\"2021-11-11T19:46:23.826Z\",\"scheduledTime\":\"2021-11-11T19:46:23.826Z\",\"queryStartTime\":\"2021-11-11T19:46:24.879Z\",\"completedTime\":\"null\",\"queryId\":\"01a03962-0300-0002-0000-0000000034d8\",\"errorCode\":\"000630\",\"errorMessage\":\"Statement reached its statement or warehouse timeout of 10 second(s) and was canceled.\"}]}

페이로드의 값을 처리하려면 문자열을 JSON 오브젝트로 구문 분석해야 합니다.

맨 위로 이동