3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowpipeでエラー発生時のエラー通知

Last updated at Posted at 2022-10-17

<やりたいこと>

「通知統合」を使うことで、Snowpipeでエラーが発生した時に自動でエラー通知できるようになります。

今後、Snowpipeを利用する際に備えて今回の記事に「通知統合」の設定手順をまとめておこうと思いました。

「通知統合」を有効化すると、Snowpipeでエラー発生後、以下①~④の流れで、AWSのSNSを利用してエラー通知できます。
① Snowpipeでエラー発生
② エラーが「通知統合」に通知される
③ 「通知統合」がAWSのSNSトピックにエラーを通知する
④ SNSサブスクリプションによりシステム運用者にエラーをメール通知する
image.png

<前提条件>

1.SnowflakeのエディションはStandard以上であること。
2.AWSとSnowflakeが同じリージョンであること。
3.Snowpipeが利用できること。

<作業手順>

① AWSでSNSを設定します。
② AWSでSNSの利用を許可するためのIAMロールを作成します。
③ Snowflakeで通知統合を作成します。
④ Snowpipeでエラー通知を有効化します。
⑤ AWSでIAMロールの信頼関係を修正します。

① AWSでSNSを設定します。

①-1 SNSトピックを作成します。

以下の項目を指定し、その他の設定項目はデフォルトとします。
・タイプ:スタンダード
・名前:任意
・表示名:任意
image.png

①-2 SNSサブスクリプションを作成し、メール通知させるようにします。

以下の項目を指定し、その他の設定項目はデフォルトとします。
・プロトコル:Eメール
・エンドポイント:エラーの通知先メールアドレス
image.png

①-3 SNSトピックのARNを取得します。

SNSトピックのARNを後述の手順で使用するので、メモ帳に控えます。

② AWSでSNSの利用を許可するためのIAMロールを作成します。

②-1 SNSトピックへの通知を許可するIAMポリシーを作成します。

JSONエディターに以下のポリシーをコピー&ペーストし、「Resource」に手順①-3でメモ帳に控えたSNSトピックのARNを適用します。

{
    "Version": "2012-10-17",
    "Statement": [
      {
         "Effect": "Allow",
         "Action": [
             "sns:Publish"
         ],
         "Resource": "arn:aws:sns:ap-northeast-1:<AWSのアカウントID>:<SNSトピック名>"
      }
    ]
 }

②-2 IAMロールを作成します。

②-2-1 信頼ポリシーを作成します。

JSONエディターにて信頼ポリシーを作成します。
以下の項目には、ダミー値を指定します。(後述の手順で修正します)

・Principal:現在ログインしているAWSアカウントの「アカウントID」
・Condition:0000

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<現在ログインしているAWSアカウントのID>:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": [
                        "0000"
                    ]
                }
            }
        }
    ]
}

②-2-2 IAMロールにSNSの使用を許可するIAMポリシーを紐付けます。

手順②-1で作成したIAMポリシーを紐付けます。
image.png

②-3 IAMロールのARNを取得します。

IAMロールのARNを後述の手順で使用するので、メモ帳に控えます。

③ Snowflakeで通知統合を作成します。

③-1 SnowflakeのWebインターフェースにログインし、CREATE NOTIFICATION INTEGRATIONを実行して通知統合を作成します。

CREATE NOTIFICATION INTEGRATION <通知統合の名称>
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AWS_SNS
  DIRECTION = OUTBOUND
  AWS_SNS_TOPIC_ARN = '<手順①-3でメモ帳に控えたSNSトピックのARN>'
  AWS_SNS_ROLE_ARN = '<手順②-3でメモ帳に控えたIAMロールのARN>'

image.png

③-2 DESC NOTIFICATION INTEGRATIONをIAMユーザーのARNとExternalIDを取得します。

DESC NOTIFICATION INTEGRATIONを実行して、実行結果に表示される以下の値をメモ帳に控えます。

DESC NOTIFICATION INTEGRATION <作成した「通知統合」の名称>;

・SF_AWS_IAM_USER_ARN
・SF_AWS_EXTERNAL_ID
image.png

④ Snowpipeでエラー通知を有効化します。

④-1 GRANT USAGEを実行してSnowpipeを使用するユーザーに「通知統合」の使用権限を付与します。

GRANT USAGE ON INTEGRATION <作成した「通知統合」の名称> TO ROLE <Snowpipeを使用するSnowpflakeユーザー>;

image.png

④-2 既存のSnowpipeを再作成してエラー通知を有効にします。

既存のSnowpipeで「通知統合」を有効化させるため、一度Drop Pipeで削除した後、
Create Pipeで「通知統合」を指定して再作成します。

drop pipe <「通知統合」を有効にするSnowpipeの名称>;

create pipe <「通知統合」を有効にするSnowpipeの名称>
  auto_ingest = true
  error_integration = <手順③-1で作成した「通知統合」の名称>
  as
  copy into <Snowpipeのロード先のテーブル名>
  from @<外部ステージの名称>;

image.png

⑤ AWSでIAMロールの信頼関係を修正します。

AWSのIAMコンソールを開き、「信頼関係」の以下の部分を修正します。

・Principal:手順③-2でメモ帳に控えた「SF_AWS_IAM_USER_ARN」の値
・ExternalID:手順③-2でメモ帳に控えた「SF_AWS_EXTERNAL_ID」の値
image.png

<検証>

以下①~③の手順にて意図的にSnowpipeでエラーを発生させ、「通知統合」によりエラー通知されることを検証します。
① Snowpipeのロード先のテーブル定義を確認します。
② Snowpipeのロード先のテーブル定義に一致しないテストデータを用意し、外部ステージの参照先S3バケットにファイルをアップロードします。
③ SNSからSnowpipeのエラーがメール通知されることを確認します。

① Snowpipeでファイルのロード先のテーブルの定義を確認します。

select get_ddl('table','Snowpipeでのロード先のテーブル名');

image.png

② Snowpipeのロード先のテーブル定義に一致しないテストデータを用意し、外部ステージの参照先S3バケットにファイルをアップロードします。

テーブル定義に一致しないテストデータを作成し、意図的にエラーを発生させます。
image.png

③ SNSからSnowpipeのエラーがメール通知されることを確認します。

SNSサブスクリプションで設定したメールには、エラーの原因とエラーを引き起こしたファイルが記載されます。
image.png

おわりに

Snowpipeによりテーブルへのデータのロードが自動化できるがゆえに、エラーの発生をどのようにして検知するかが課題でした。「通知統合」によりエラー検知も可能になり、
Snowpipeの運用を考えた非常に便利な機能であると思いました。

ご案内

株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?