予算に関する通知¶
クレジットの使用状況が支出制限を超えると予想される場合に通知を受け取るには、ご希望の宛先に通知が届くように予算を設定する必要があります。以下の方法で通知を受け取ることができます。
メール。
クラウドサービス(Amazon SNS、Azure Event Grid、Google Cloud PubSub)が提供するキューにプッシュされたメッセージ。
Slack、Microsoft Teams、 PagerDuty のWebhookへの呼び出し。
注釈
メール通知は、SnowflakeのAmazon Web Services(AWS)デプロイメントで、 AWS Simple Email Service(SES)を使用して処理されます。AWS を使用して送信されたメールメッセージのコンテンツは、メッセージの配信を管理するために最大30日間Snowflakeによって保持される場合があります。この期間を過ぎると、メッセージのコンテンツは削除されます。
通知送信タイミングの制御¶
デフォルトでは、予測支出額が予算の支出限度額を10%以上超えた時点に通知が開始されます。
予算の支出制限のパーセンテージである通知しきい値を定義することで、このデフォルトを上書きできます。支出がしきい値を超えるとSnowflakeが予測した場合、通知が送信されます。
たとえば、支出予定が予算の支出制限の50%を超えたときに通知を送信したいとします。アカウント予算にこの通知しきい値を設定するには、以下のコマンドを実行します。
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_THRESHOLD(50);
カスタム予算の通知しきい値を設定することもできます。
通知のしきい値をデフォルトにリセット場合は、 110
を引数として <budget_name>!SET_NOTIFICATION_THRESHOLD メソッドを呼び出します。
メール通知のセットアップ¶
メール通知をセットするには
(オプション)独自の通知統合を使用する場合は、通知統合を作成するか、使用する既存の通知統合を選択します。通知統合により、Snowflakeはサードパーティのシステムに通知を送信することができます。
TYPE = EMAIL と ALLOWED_RECIPIENTS を受信者の確認済みメールアドレスのリストにセットして通知統合を作成します。情報については、 メール通知統合の作成 および 通知を受信できるメールアドレスのリストの制限 をご覧ください。
注釈
予算の通知用に追加された各メールアドレスは、 検証済み である必要があります。リスト内のメールアドレスが 検証されていない 場合、メール通知の設定は失敗します。
例:
CREATE NOTIFICATION INTEGRATION budgets_notification_integration TYPE = EMAIL ENABLED = TRUE ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出してテストメッセージを送信し、通知統合が期待通りに機能することを確認します。
例えば、 JSON 形式でテストメッセージを送ることができます。
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
通知統合に対する USAGE 権限を SNOWFLAKE アプリケーションに付与します。USAGE 権限は、通知を送信するために通知統合を使用する予算を有効にします。例:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
通知を受け取るメールアドレスを指定します。使用する通知統合を作成または選択した場合は、通知統合を予算に関連付けます。
そのためには、 <budget_name>!SET_EMAIL_NOTIFICATIONS メソッドを呼び出し、次のように指定します。
使用したい通知統合がない場合は、認証済みメールアドレスのリストをカンマ区切りで入力してください。例えば、アカウント予算に対する通知を構成する場合
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、
my_budget
というカスタム予算を作成した場合CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'costadmin@example.com, budgetadmin@example.com' );
使用したい通知統合がある場合は、その統合の名前と認証済みメールアドレスのリストをカンマ区切りで入力してください。例えば、アカウント予算に対する通知を構成する場合
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、
my_budget
というカスタム予算を作成した場合CALL my_budget!SET_EMAIL_NOTIFICATIONS( 'budgets_notification_integration', 'costadmin@example.com, budgetadmin@example.com' );
通知統合を予算に関連付けた場合、 <budget_name>!GET_NOTIFICATION_INTEGRATION_NAME メソッドを呼び出すことで、予算が通知統合に関連付けられていることを確認できます。このメソッドは、予算に関連付けられたメール通知統合名を返します。
例えば、アカウント予算に対する通知を構成する場合
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、
my_budget
というカスタム予算を作成した場合CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
キュー通知のセットアップ¶
キュー通知をセットするには
通知統合を作成するか、使用する既存の通知統合を選択します。通知統合により、Snowflakeはサードパーティのシステムに通知を送信することができます。
TYPE=QUEUE、 DIRECTION=OUTBOUND、およびクラウドプロバイダーに必要な追加プロパティで通知統合を作成します。詳細については、以下をご参照ください。
注釈
アカウントは、クラウドプロバイダーのキューと同じ クラウドプラットフォーム 上にある必要があります。
例:
CREATE OR REPLACE NOTIFICATION INTEGRATION budgets_notification_integration ENABLED = TRUE TYPE = QUEUE DIRECTION = OUTBOUND NOTIFICATION_PROVIDER = AWS_SNS AWS_SNS_TOPIC_ARN = '<ARN_for_my_SNS_topic>' AWS_SNS_ROLE_ARN = '<ARN_for_my_IAM_role>';
注釈
キューとWebhook通知の場合、最大10の通知統合を予算に関連付けることができます。
SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出してテストメッセージを送信し、通知統合が期待通りに機能することを確認します。
例えば、 JSON 形式でテストメッセージを送ることができます。
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
通知統合に対する USAGE 権限を SNOWFLAKE アプリケーションに付与します。USAGE 権限は、通知を送信するために通知統合を使用する予算を有効にします。例:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
通知統合を予算に関連付けます。<budget_name>!ADD_NOTIFICATION_INTEGRATION メソッドを呼び出し、統合の名前を渡します。
例えば、アカウント予算に対する通知を構成する場合
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、
my_budget
というカスタム予算を作成した場合CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
通知統合が予算に関連付けられていることを確認します。
<budget_name>!GET_NOTIFICATION_INTEGRATIONS メソッドを呼び出して、予算に関連付けられている通知統合のリストを出力します。
例えば、アカウント予算に対する通知を構成する場合
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、
my_budget
というカスタム予算を作成した場合CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
このメソッドは、統合の名前、最後に通知の送信に使用された時間、追加された日付のリストをテーブルに出力します。
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
Webhook通知のセットアップ¶
Webhook通知をセットするには
通知統合を作成するか、使用する既存の通知統合を選択します。通知統合により、Snowflakeはサードパーティのシステムに通知を送信することができます。
TYPE=WEBHOOK とWebhookに必要な追加プロパティで通知統合を作成します。詳細については、 Webhook通知の送信 をご参照ください。
通知メッセージは JSON 形式なので、これを処理するように通知統合を構成する必要があります。例えば、次のステートメントはSlack Webhookのシークレットと通知統合を作成します。
CREATE OR REPLACE SECRET my_database.my_schema.slack_secret TYPE = GENERIC_STRING SECRET_STRING = '... secret in my Slack webhook URL ...'; CREATE OR REPLACE NOTIFICATION INTEGRATION budgets_notification_integration ENABLED = TRUE TYPE = WEBHOOK WEBHOOK_URL = 'https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET' WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}' WEBHOOK_HEADERS=('Content-Type'='application/json') WEBHOOK_SECRET = slack_secret;
注釈
キューとWebhook通知の場合、最大10の通知統合を予算に関連付けることができます。
SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出してテストメッセージを送信し、通知統合が期待通りに機能することを確認します。
例えば、 JSON 形式でテストメッセージを送ることができます。JSON 文字列の二重引用符とバックスラッシュは必ずエスケープしてください。
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'), SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration') );
通知統合に対する USAGE 権限を SNOWFLAKE アプリケーションに付与します。USAGE 権限は、通知を送信するために通知統合を使用する予算を有効にします。例:
GRANT USAGE ON INTEGRATION budgets_notification_integration TO APPLICATION snowflake;
シークレットに依存するWebhook通知統合を使用している場合、 SNOWFLAKE アプリケーションに以下の権限を付与してください。
そのシークレットに対する READ 権限。
そのシークレットを含むスキーマに対する USAGE 権限。
そのスキーマを含むデータベースに対する USAGE 権限。
例:
GRANT READ ON SECRET slack_secret TO APPLICATION snowflake; GRANT USAGE ON SCHEMA my_schema TO APPLICATION snowflake; GRANT USAGE ON DATABASE my_database TO APPLICATION snowflake;
通知統合を予算に関連付けます。
<budget_name>!ADD_NOTIFICATION_INTEGRATION メソッドを呼び出し、統合の名前を渡します。
例えば、アカウント予算に対する通知を構成する場合
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、
my_budget
というカスタム予算を作成した場合CALL my_budget!ADD_NOTIFICATION_INTEGRATION( 'budgets_notification_integration', );
通知統合が予算に関連付けられていることを確認します。
<budget_name>!GET_NOTIFICATION_INTEGRATIONS メソッドを呼び出し、予算に関連付けられている通知統合のリストを出力します。
例えば、アカウント予算に対する通知を構成する場合
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、
my_budget
というカスタム予算を作成した場合CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
このメソッドは、統合の名前、最後に通知の送信に使用された時間、追加された日付のリストをテーブルに出力します。
+----------------------------------+------------------------+------------+ | INTEGRATION_NAME | LAST_NOTIFICATION_TIME | ADDED_DATE | +----------------------------------+------------------------+------------+ | budgets_notification_integration | -1 | 2024-09-23 | +----------------------------------+------------------------+------------+
JSON 通知メッセージの解釈¶
クラウドプロバイダーのキューまたはWebhookに通知を送信するように予算を構成すると、通知メッセージには次のような JSON オブジェクトが含まれます。
{
"account_name": "MY_ACCOUNT",
"budget_name": "MY_BUDGET_NAME",
"type": "BUDGET_LIMIT_WARNING",
"limit": "100",
"spending": "67.42",
"spending_percent": "67.42",
"spending_trend_percent": "130.63",
"time_percent":"51.61"
}
JSON オブジェクトには、以下のキーと値のペアが含まれています。
キー |
説明 |
---|---|
|
アカウントの名前。 |
|
予算の名前。アカウント予算の場合、名前は |
|
通知のタイプ(例えば、 |
|
予算にセットした支出制限。 |
|
今月のクレジットの使用状況。 |
|
支出制限のうち、すでに使用された割合( |
|
月末までに使用される支出制限の予想割合( |
|
その月の経過時間の割合(例えば、月が半分終わった場合は |
予算に関する通知履歴の確認¶
予算に関する通知履歴を表示するには、 NOTIFICATION_HISTORY 関数を呼び出し、統合名でフィルターをかけます。例:
SELECT * FROM TABLE(
INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
INTEGRATION_NAME=>'budgets_notification_integration'
)
);
message_source
列には、予算通知を表す行の BUDGET
が含まれます。
予算に関する通知の無効化¶
予算の通知を無効にするには、 SET_NOTIFICATION_MUTE_FLAG メソッドを呼び出し、引数として TRUE を渡します。例:
CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
予算からの通知統合の削除¶
予算から通知統合を削除するには、 <budget_name>!REMOVE_NOTIFICATION_INTEGRATION メソッドを呼び出し、統合の名前を渡します。例:
CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
'budgets_notification_integration',
);