【Snowflake】アラートに使える!メール送信機能を使ってみた

【Snowflake】アラートに使える!メール送信機能を使ってみた | Tableau-id Press -タブロイド-
snowflake_logo

こんにちは。t.ozawaです。

今回はSnowflake上で、SQLでメールを送信する方法を紹介します。

Snowflakeのサービスとして、リソースモニターにおけるメール送信機能といった例もありますが、

今回紹介するシステム関数を使う方法は、コードベースでありプロシージャやタスクに組み込むことができるため、あらゆる条件下で用いることができる利点があります。

メールを送信する手順

公式ドキュメントはこちら

Snowflakeからメールを送信するためには、3点のステップが必要です。

  1. ユーザのプロフィールにメールアドレスを設定
  2. 送信許可されたメールアドレスリストを作成
  3. メールを送信

ステップ1の中で設定されたメールアドレスのみが、ステップ2のメールアドレスリストに格納することができます。

そして、ステップ2のリストに格納されたメールアドレスに対してのみ、メールを送信することができます。

つまり、ステップ1と2は、メールの送信先を設定するうえで不可欠です。

1. ユーザのプロフィールにメールアドレスを設定

左上の自分のユーザ名のアイコンをクリックし、プロフィールを選択します。

Email欄にメールアドレスを記述し登録します。その際、メール認証が求められます。

メールを送信したいユーザが複数いる場合、ユーザ各々が自身のメールアドレスを登録します。

2. 送信許可されたメールアドレスリストを作成

ステップ1で登録したメールアドレスを、NOTIFICATION INTEGRATIONと呼ばれる、通知を送信したい一覧のようなオブジェクトに登録します。

ソースコードは以下の通りです。この作業には、ACCOUNTADMINが必要です。

--ACCOUNTADMINで操作
use role ACCOUNTADMIN;

--今回はメールの送信先のリスト情報を一覧化したmy_email_listを作成
CREATE or REPLACE NOTIFICATION INTEGRATION my_email_int
   TYPE=EMAIL
   ENABLED=TRUE
   ALLOWED_RECIPIENTS=('x_ozawa@xxx.xx', 'y_ozawa@yyy.yy');

--作成したmy_email_listを表示してみる。
SHOW NOTIFICATION INTEGRATIONS;

SHOWで表示して、MY_EMAIL_INTというリストが作成されていればOKです!

3. メールを送信

ステップ2で送信可能なメールアドレスリストMY_EMAIL_INTを作成したので、いよいよメールを送信していきます。

今回、SYSADMINを使ってメール送信してみます。そのため、MY_EMAIL_INTを閲覧できるように権限を付与します。

メールを送信するためには、システム関数SYSTEM$SEND_EMAILを使います。

--メール送信をSYSADMINで実施
--作成したmy_email_listをSYSADMINでも使えるように権限を付与
GRANT USAGE ON INTEGRATION my_email_int TO ROLE sysadmin;

--メールを送信
CALL SYSTEM$SEND_EMAIL(
   'my_email_int', --メールアドレスリスト
   'x_ozawa@xxx.xx, y_ozawa@yyy.yy', --メールアドレス(my_email_listに入っているものが有効)
   'テストメール送信', --メールタイトル
   'メール送信に成功しました。' --メール本文
);

メールが届いたら、大成功です!!!

おわりに

今回は、システム関数SYSTEM$SEND_EMAILを使って、メールを送信する方法を紹介しました。

メールアドレスリストを複数生成することで、お客様用やアラート用といった用途別のリストが作成でき、人的ミスを減らすことができるメリットがありそうです。

また、定期更新で予期せぬ不具合が生じたときに、メールアラートを通知する、といった仕組化もできそうですね!

それでは!