予算に関する通知

クレジットの使用状況が支出制限を超えると予想される場合に通知を受け取るには、ご希望の宛先に通知が届くように予算を設定する必要があります。以下の方法で通知を受け取ることができます。

  • メール。

  • クラウドサービス(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);
Copy

カスタム予算の通知しきい値を設定することもできます。

通知のしきい値をデフォルトにリセット場合は、 110 を引数として <budget_name>!SET_NOTIFICATION_THRESHOLD メソッドを呼び出します。

メール通知のセットアップ

メール通知をセットするには

  1. (オプション)独自の通知統合を使用する場合は、通知統合を作成するか、使用する既存の通知統合を選択します。通知統合により、Snowflakeはサードパーティのシステムに通知を送信することができます。

    1. TYPE = EMAIL と ALLOWED_RECIPIENTS を受信者の確認済みメールアドレスのリストにセットして通知統合を作成します。情報については、 メール通知統合の作成 および 通知を受信できるメールアドレスのリストの制限 をご覧ください。

      注釈

      予算の通知用に追加された各メールアドレスは、 検証済み である必要があります。リスト内のメールアドレスが 検証されていない 場合、メール通知の設定は失敗します。

      例:

      CREATE NOTIFICATION INTEGRATION budgets_notification_integration
        TYPE = EMAIL
        ENABLED = TRUE
        ALLOWED_RECIPIENTS = ('costadmin@example.com','budgetadmin@example.com');
      
      Copy
    2. SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出してテストメッセージを送信し、通知統合が期待通りに機能することを確認します。

      例えば、 JSON 形式でテストメッセージを送ることができます。

      CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
        SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
        SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
      );
      
      Copy
    3. 通知統合に対する USAGE 権限を SNOWFLAKE アプリケーションに付与します。USAGE 権限は、通知を送信するために通知統合を使用する予算を有効にします。例:

      GRANT USAGE ON INTEGRATION budgets_notification_integration
        TO APPLICATION snowflake;
      
      Copy
  2. 通知を受け取るメールアドレスを指定します。使用する通知統合を作成または選択した場合は、通知統合を予算に関連付けます。

    そのためには、 <budget_name>!SET_EMAIL_NOTIFICATIONS メソッドを呼び出し、次のように指定します。

    • 使用したい通知統合がない場合は、認証済みメールアドレスのリストをカンマ区切りで入力してください。例えば、アカウント予算に対する通知を構成する場合

      CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS(
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy

      カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、 my_budget というカスタム予算を作成した場合

      CALL my_budget!SET_EMAIL_NOTIFICATIONS(
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy
    • 使用したい通知統合がある場合は、その統合の名前と認証済みメールアドレスのリストをカンマ区切りで入力してください。例えば、アカウント予算に対する通知を構成する場合

      CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_EMAIL_NOTIFICATIONS(
        'budgets_notification_integration',
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy

      カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、 my_budget というカスタム予算を作成した場合

      CALL my_budget!SET_EMAIL_NOTIFICATIONS(
        'budgets_notification_integration',
        'costadmin@example.com, budgetadmin@example.com'
      );
      
      Copy
  3. 通知統合を予算に関連付けた場合、 <budget_name>!GET_NOTIFICATION_INTEGRATION_NAME メソッドを呼び出すことで、予算が通知統合に関連付けられていることを確認できます。このメソッドは、予算に関連付けられたメール通知統合名を返します。

    例えば、アカウント予算に対する通知を構成する場合

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATION_NAME();
    
    Copy

    カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、 my_budget というカスタム予算を作成した場合

    CALL my_budget!GET_NOTIFICATION_INTEGRATION_NAME();
    
    Copy

キュー通知のセットアップ

キュー通知をセットするには

  1. 通知統合を作成するか、使用する既存の通知統合を選択します。通知統合により、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>';
    
    Copy

    注釈

    キューとWebhook通知の場合、最大10の通知統合を予算に関連付けることができます。

  2. SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出してテストメッセージを送信し、通知統合が期待通りに機能することを確認します。

    例えば、 JSON 形式でテストメッセージを送ることができます。

    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
      SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{"name": "value"}'),
      SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
    );
    
    Copy
  3. 通知統合に対する USAGE 権限を SNOWFLAKE アプリケーションに付与します。USAGE 権限は、通知を送信するために通知統合を使用する予算を有効にします。例:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy
  4. 通知統合を予算に関連付けます。<budget_name>!ADD_NOTIFICATION_INTEGRATION メソッドを呼び出し、統合の名前を渡します。

    例えば、アカウント予算に対する通知を構成する場合

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy

    カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、 my_budget というカスタム予算を作成した場合

    CALL my_budget!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy
  5. 通知統合が予算に関連付けられていることを確認します。

    <budget_name>!GET_NOTIFICATION_INTEGRATIONS メソッドを呼び出して、予算に関連付けられている通知統合のリストを出力します。

    例えば、アカウント予算に対する通知を構成する場合

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、 my_budget というカスタム予算を作成した場合

    CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    このメソッドは、統合の名前、最後に通知の送信に使用された時間、追加された日付のリストをテーブルに出力します。

    +----------------------------------+------------------------+------------+
    |  INTEGRATION_NAME                | LAST_NOTIFICATION_TIME | ADDED_DATE |
    +----------------------------------+------------------------+------------+
    | budgets_notification_integration | -1                     | 2024-09-23 |
    +----------------------------------+------------------------+------------+
    

Webhook通知のセットアップ

Webhook通知をセットするには

  1. 通知統合を作成するか、使用する既存の通知統合を選択します。通知統合により、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;
    
    Copy

    注釈

    キューとWebhook通知の場合、最大10の通知統合を予算に関連付けることができます。

  2. SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出してテストメッセージを送信し、通知統合が期待通りに機能することを確認します。

    例えば、 JSON 形式でテストメッセージを送ることができます。JSON 文字列の二重引用符とバックスラッシュは必ずエスケープしてください。

    CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
      SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{\\\"name\\\": \\\"value\\\"}'),
      SNOWFLAKE.NOTIFICATION.INTEGRATION('budgets_notification_integration')
    );
    
    Copy
  3. 通知統合に対する USAGE 権限を SNOWFLAKE アプリケーションに付与します。USAGE 権限は、通知を送信するために通知統合を使用する予算を有効にします。例:

    GRANT USAGE ON INTEGRATION budgets_notification_integration
      TO APPLICATION snowflake;
    
    Copy
  4. シークレットに依存する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;
    
    Copy
  5. 通知統合を予算に関連付けます。

    <budget_name>!ADD_NOTIFICATION_INTEGRATION メソッドを呼び出し、統合の名前を渡します。

    例えば、アカウント予算に対する通知を構成する場合

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy

    カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、 my_budget というカスタム予算を作成した場合

    CALL my_budget!ADD_NOTIFICATION_INTEGRATION(
      'budgets_notification_integration',
    );
    
    Copy
  6. 通知統合が予算に関連付けられていることを確認します。

    <budget_name>!GET_NOTIFICATION_INTEGRATIONS メソッドを呼び出し、予算に関連付けられている通知統合のリストを出力します。

    例えば、アカウント予算に対する通知を構成する場合

    CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    カスタム予算の通知を構成している場合は、カスタム予算のオブジェクトのメソッドを呼び出します。例えば、 my_budget というカスタム予算を作成した場合

    CALL my_budget!GET_NOTIFICATION_INTEGRATIONS();
    
    Copy

    このメソッドは、統合の名前、最後に通知の送信に使用された時間、追加された日付のリストをテーブルに出力します。

    +----------------------------------+------------------------+------------+
    |  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"
}
Copy

JSON オブジェクトには、以下のキーと値のペアが含まれています。

キー

説明

account_name

アカウントの名前。

budget_name

予算の名前。アカウント予算の場合、名前は ACCOUNT_ROOT_BUDGET です。

type

通知のタイプ(例えば、 BUDGET_LIMIT_WARNING)。

limit

予算にセットした支出制限。

spending

今月のクレジットの使用状況。

spending_percent

支出制限のうち、すでに使用された割合(spending / limit)。

spending_trend_percent

月末までに使用される支出制限の予想割合(spending_percent / time_percent * 100)。

time_percent

その月の経過時間の割合(例えば、月が半分終わった場合は 50.00)。

予算に関する通知履歴の確認

予算に関する通知履歴を表示するには、 NOTIFICATION_HISTORY 関数を呼び出し、統合名でフィルターをかけます。例:

SELECT * FROM TABLE(
  INFORMATION_SCHEMA.NOTIFICATION_HISTORY(
    INTEGRATION_NAME=>'budgets_notification_integration'
  )
);
Copy

message_source 列には、予算通知を表す行の BUDGET が含まれます。

予算に関する通知の無効化

予算の通知を無効にするには、 SET_NOTIFICATION_MUTE_FLAG メソッドを呼び出し、引数として TRUE を渡します。例:

CALL SNOWFLAKE.LOCAL.ACCOUNT_ROOT_BUDGET!SET_NOTIFICATION_MUTE_FLAG(TRUE);
Copy

予算からの通知統合の削除

予算から通知統合を削除するには、 <budget_name>!REMOVE_NOTIFICATION_INTEGRATION メソッドを呼び出し、統合の名前を渡します。例:

CALL my_budget!REMOVE_NOTIFICATION_INTEGRATION(
  'budgets_notification_integration',
);
Copy