Skip to main content

ワークフローの合理化:Snowflake アラートを Slack に送信する

Snowflake

Snowflake と Slack の連携でデータエンジニアの仕事がはかどる! Snowflake と Slack を連携させると、データエンジニアの業務効率が大幅に向上します。
その理由を見ていきましょう。

  • リアルタイムなエラー検知とデバッグ: これまでのようにログを常に監視しなくても、Snowflake でエラーが発生した場合に Slack チャンネルに自動通知を送信するように設定できます。これは、コードのエラーを監視し、すぐに知らせてくれる専任のアシスタントがいるようなものです。迅速な問題解決が可能になります。これは、Webhook を使用することで実現します。Webhook とは、イベントをトリガーとして Snowflake から Slack に送信される自動 HTTP リクエストです。

  • チーム全体の情報共有: Slack 連携により、データパイプラインなどの処理状況をチーム全体に共有することもできます。パイプラインが完了、失敗、または問題が発生した場合に、共有チャンネルに通知を送信するように Snowflake を設定できます。これにより、全員が状況を把握できるようになり、不要な進捗確認会議を減らすことができます。 この連携により、Slack がデータワークフロー管理の強力なハブとなり、データエンジニアの業務をよりシンプルかつ生産的にします。

SnowflakeとSlackを統合する方法

Snowflake の NOTIFICATION INTEGRATION と言う機能と Slack の Webhook を利用し Snowflake から Slack にメッセージを送る事が出来ます。
同じ方法を使って、Snowflake から Microsoft Teams と PagerDuty にもメッセージを送るのは可能です。

Slack の使う方の概要が必要なら、この動画を見てください。

Webhook は http リクエストです。これは API 呼び出しで、リバース API または Push API と呼ばれることもあります。Webhook の特徴は、何らかのイベントが発生したときにクライアントがサーバーにコールバック (http リクエストを送信) するように指示することです。
この場合、クライアントである Slack アプリは、何らかのイベントが発生したときに Snowflake にコール (URL エンドポイントに http リクエストを送信) するように指示します。

これは、プロセスをどちらの側から見るかという視点に関するものです。
Snowflake 側から見ると、これは通常の API 呼び出しであり、Slack への投稿リクエストを行います。
しかし、Slack 側から見ると、これは Webhook (リバース API 呼び出し) であり、特定のエンドポイントでイベントが発生したときに Snowflake にコールバックするように要求します。

ステップ

Slack 上で必要なステップ

  • テストの為にチャネルを作る
  • Slack でアプリを作る
  • 作ったアプリをチャネルに導入
  • アプリの webhook URL を取る
  1. テストの為にチャネルを作る

    1. Slack にロギンし、左側の sidebar から「Add channels」ボタンを押し

      add channel

    2. チャネル名を入力

      enter channel name

    3. チャンネルの公開範囲は公開か非公開か決める

      channel visibility

    4. 「Create」ボタンを押し

  2. Slack でアプリを作る

    1. アプリを作成するページを開く

    2. Create App ボタンを押し

      Create app image

    3. From Scratch オプションを選択

      From Scrach

    4. アプリ名を入力し Workspace を選択

      Enter Aoo name and choose workspace

    5. Create App ボタンを押し

  3. Slack アプリをチャネルに導入

    1. アプリの設定ページの左側にある「Incoming webhooks」を押し

      incoming webhooks

      作ったアプリのページを見つけれないなら、アプリ dashbord に行ってください。

      リンク: Slack app dashboard

    2. 「Activate Incoming Webhook」をトグルしてください。

      Activate incoming webhook

    3. 一番下にある[Add New Webhook to Workspace]ボタンを押してください

      Add New Webhook to Workspace

    4. 導入したいチャネルを選択し、「Allow」ボタンを押してください

      select channel


      アプリをチャネルに導入した後に、チャネルに確認のメッセージが来る

      app_integrated

  4. アプリの webhook URL を取る

    アプリをチャネルに導入/繋ぐ後に、アプリの設定ページに戻ってきます。
    アプリの設定ページの Incoming Webhooks セクションの下に
    作成された「Webhook Url」をコピーしてください。

    Copy Webhook Url

    Note: 各チャネルは自分の特別な Webhook Url があります。
    と言うのは、テストの後に、アプリを本当のチャネルに導入したら、そのチャネルの Webhook Url を使うべきです。


Snowflake 上で必要なステップ

  1. Webhook のトケンを Secret として保存

    必要な権限:

    • secret を create
    • secret を read
    • secret を use

    Slack の Webhook Url はこのような形です: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
    https://hooks.slack.com/services/の後の部分を Snowflake で secret として保存します。


    CREATE OR REPLACE SECRET my_slack_webhook_secret
    TYPE = GENERIC_STRING
    SECRET_STRING = 'T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX';
    

    create secret


  2. NOTIFICATION INTEGRATION を作成

    必要な権限:

    • CREATE INTEGRATION
    • USAGE On INTEGRATION

    CREATE OR REPLACE NOTIFICATION INTEGRATION my_slack_webhook_int
    TYPE=WEBHOOK
    ENABLED=TRUE
    WEBHOOK_URL='https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET'
    WEBHOOK_SECRET=my_secrets_db.my_secrets_schema.my_slack_webhook_secret
    WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}'
    WEBHOOK_HEADERS=('Content-Type'='application/json');
    

    SNOWFLAKE_WEBHOOK_SECRETSNOWFLAKE_WEBHOOK_MESSAGEは secret とメッセージのプレースホルダーです。


  3. NOTIFICATION INTEGRATION を使う(呼ぶ)

    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
        SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(
            SNOWFLAKE.NOTIFICATION.SANITIZE_WEBHOOK_CONTENT('my message')
        ),
        SNOWFLAKE.NOTIFICATION.INTEGRATION('my_slack_webhook_int')
    );
    

    SNOWFLAKE.NOTIFICATION.SANITIZE_WEBHOOK_CONTENT関数は送信される通知メッセージの本文からプレースホルダー (たとえば、シークレットを指定する SNOWFLAKE_WEBHOOK_SECRET プレースホルダー) を削除します。
    この関数が使用されず、メッセージ本文にシークレットのプレースホルダーが含まれている場合、メッセージが Slack Webhook に送信されると、シークレットを含むメッセージが Slack チャネルに投稿される可能性があります。

    残りの関数は、NOTIFICATION INTEGRATION を使用してメッセージを送信するために使用される設定関数です。

結果

final_result


もし上のように 4 つの Stored Procedure と関数を使って NOTIFICATION INTEGRATION を呼ぶ事をもっと簡単にしたいなら、wrapper Stored Procedure を作成出来ます。

例:

CREATE OR REPLACE PROCEDURE post_on_slack(message)
RETURNS FLOAT
LANGUAGE SQL
AS
BEGIN
    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
        SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(
            SNOWFLAKE.NOTIFICATION.SANITIZE_WEBHOOK_CONTENT(message)
        ),
        SNOWFLAKE.NOTIFICATION.INTEGRATION('my_slack_webhook_int')
    );
END;

Call post_on_slack('Hello Slack!')

役に立つリンク

Comments

Popular posts from this blog

脱初心者! Git ワークフローを理解して開発効率アップ

Git – チーム開発に必須のバージョン管理システムですが、その真価を発揮するにはワークフローの理解が欠かせません。 色々な人は Git の使い方を良く知っていますが、Git を仕事やワークフローに統合する方法を余り良く知らない人もいます。本記事では、Git をワークフローに組み込むことで、開発プロセスがどのように効率化され、チーム全体のパフォーマンスが向上するのかを解説します。Centralized Workflow から Forking Workflow まで、代表的な 9 つのワークフローの特徴を分かりやすく紹介します。それぞれのメリット・デメリット、そして最適なユースケースを理解することで、あなたのプロジェクトに最適なワークフローを選択し、開発をスムーズに進めましょう! Centralized Workflow Feature branching/GitHub Flow Trunk Based Flow Git Feature Flow Git Flow Enhanced Git Flow One Flow GitLab Flow Forking Workflow 分かりやすくするために、同じコンセプトを説明するに一つ以上の図を使った場合があります。 Centralized Workflow 説明: 集中化ワークフローではプロジェクトにおけるすべての変更の単一の入力箇所として中央リポジトリを使用します。デフォルトの開発用ブランチは main と呼ばれ、すべての変更がこのブランチにコミットされます。 集中化ワークフローでは main 以外のブランチは不要です。チームメンバー全員がひとつのブランチで作業し、変更を直接中央リポジトリにプッシュします。 メリット: SVN のような集中型バージョン管理システムから移行する小規模チームに最適。 デメリット: お互いのコードが邪魔になり (お互いの変更を上書きするように)、プロダクション環境にバグをい入れる可能性が高くて、複数のメンバいるチームでこのフローを使いにくい。 地図: graph TD; A[Central Repository] -->|Clone| B1[Developer A's Local Repo] A --...

Introduction to SQLFluff: How to make your SQL code clean and error-free

Image by Jake Aldridge from Pixabay You know oftentimes, the cause of runtime or compile errors and hours of debugging agony is all due to simply a missing semicolon. Have you ever had such experience? If you had, you are not alone. There are two ways to avoid these unfortunate situations: either become a perfect developer who never makes mistakes, or use helpful tools such as linters that can catch these errors early on. I am nowhere near being a perfect developer who never makes a mistake. In fact, I'm probably the opposite of a perfect developer, so even if I wanted to, I wouldn’t be able to teach you how to become a perfect developer. But what I can teach you is using linters. A Wikipedia defines a linter as a "static code analysis tool used to flag programming errors, bugs, stylistic errors and suspicious constructs." If you're not convinced yet on using linters, consider this scenario: in a large project with multiple members, different people tend to ...

WinMerge のセットアップと使う方

WinMerge は、Windows 用のオープン ソースの差分およびマージ ツールです。WinMerge は、フォルダーとファイルの両方を比較し、違いを理解して扱いやすい視覚的なテキスト形式で表示します。この記事でWinMerge のセットアップと使う方を教えます。 source: https://winmerge.org WinMerge をダウンロード WinMerge のウェブサイト に行って、「WinMerge-2.16.44-x64-Setup.exe」ボタンを押し、WinMerge 2.16 をダウンロードしてください。 WinMerge をインストール ダウンロードされたソフトウェアをクリックし、ポップアップ画面で「Next」を押してください 「Languages」部分をスクロールダウンし、「Japanese menus and dialogs」を選択し、「Next」ボタンを押してください ターミナル等からも WinMerge をアクセス出来ようにする為に「Add WinMerge folder to your system path」オプションを選択し、希望によって他のオプション選択してください 「Enable Explorer context menu Integration」オプションを選択したら、フォルダ/ファイルを右キリックし、コンテクストメニューから WinMerge を開くようになります。 「Install」ボタンを押し、「Next」ボタンを押し、その後、「Finish」ボタンを押してください 言語を日本語にする もし WinMerge の言語が日本語じゃなくて、英語なら、「Edit」タブから「Options」を押してください。 ポップアップ画面で右側の下にある「Languages」と言うドロップダウンメニューから日本語を選択し、「OK」ボタンを押してください WinMerge を使う方 「ファイル」タッブから「開く」を押し 参照ボタンを押し、比較したいフォルダ・ファイルを指定 比較したいフォルダを指定する方法: ポップアップ画面から対象のフォルダーを選択し、「Open」を押してくだい 何も選択しないで、「Open」を押してくだい 右側下にある「比較」ボタンを押し ...