予算のカスタムアクション¶
支出のしきい値に達したときに、ストアドプロシージャを自動的に呼び出すように予算を構成することができます。これにより、ウェアハウスの一時停止、カスタムアラートの送信、支出イベントのテーブルへのログ記録など、クレジットの消費に対応して自動アクションを実行できます。カスタムアクションは、消費量が予算の上限を超えると予想される場合にSnowflakeが送信する:doc:`通知</user-guide/budgets/notifications>`に代わるものではありません。
カスタムアクションを定義するときは、*予測*クレジット消費または*実績*クレジット消費のどちらに基づいてストアドプロシージャを呼び出すかを指定し、しきい値を設定します。予測消費量または実績消費量がしきい値に達すると、ストアドプロシージャが実行されます。
ストアドプロシージャの要件¶
カスタムアクションによって呼び出されるストアドプロシージャは、次の要件を満たしている必要があります。
プロシージャは、呼び出し元の権限ではなく、所有者の権限で実行する必要があります。詳細については、 呼び出し元権限と所有者権限のストアドプロシージャについて をご参照ください。
プロシージャの完了には30分以上かかってはなりません。
プロシージャはOUTPUT引数を持つことはできません。
Snowflakeは失敗したアクションを1回再試行するため、重複や意図しない効果を引き起こすことなく、複数回呼び出されても処理できるようにプロシージャを設計してください。
プロシージャに必要な引数は、次のいずれかのデータ型である必要があります。
これらの要件を満たすストアドプロシージャを作成したら、そのプロシージャとその親データベース/スキーマに対するUSAGE権限をSNOWFLAKEアプリケーションに付与する必要があります。例えば、ストアドプロシージャの完全修飾名が``code_db.sch1.alert_team``の場合、次のコマンドを実行します。
注釈
カスタムアクションに追加した後にストアドプロシージャを更新した場合は、そのプロシージャに対するUSAGE権限をSNOWFLAKEアプリケーションに再付与する必要があります
予算へのカスタムアクションの追加¶
アカウント予算またはカスタム予算に複数のカスタムアクションを追加できますが、同じ予算に10個以上のカスタムアクションを追加することはできません。カスタムアクションは、次のコンポーネントで構成されます。
ストアドプロシージャ:呼び出されるプロシージャへの参照。
引数:ストアドプロシージャに渡す引数の配列。
しきい値:カスタムアクションをトリガーする予算制限の割合(例:75%)。
トリガータイプ:カスタムアクションを予測消費量または実績消費量のどちらに基づいてトリガーするか。
予算にカスタムアクションを追加するには、予算インスタンスの:doc:`ADD_CUSTOM_ACTION</sql-reference/classes/budget/methods/add_custom_action>`メソッドを呼び出します。例えば、次のコードは、支出が予算制限の75%を超えると予測されたときに:code:`send_email_notification`ストアドプロシージャを呼び出すカスタムアクションを追加します。
カスタムアクションによって呼び出されるストアドプロシージャの作成を含むエンドツーエンドの例については、:ref:`label-budget_custom_actions_extended_example`をご参照ください。
予算からのカスタムアクションの削除¶
予算からカスタムアクションを削除するには、予算インスタンスの:doc:`REMOVE_CUSTOM_ACTIONS</sql-reference/classes/budget/methods/remove_custom_actions>`メソッドを呼び出します。このメソッドを使用して、次を実行できます。
予算からすべてのカスタムアクションを削除します。例:
指定されたしきい値を持つすべてのカスタムアクションを削除します。例えば、消費量が75%に達するとトリガーされるすべてのカスタムアクションを削除するには、次のコマンドを実行します。
指定されたカスタムアクションを予算から削除します。例えば、消費量が75%に達したときに``my_sp``ストアドプロシージャを呼び出すカスタムアクションを削除するには、次のコマンドを実行します。
Tip
特定のアクションを削除する場合は、:doc:`GET_CUSTOM_ACTIONS</sql-reference/classes/budget/methods/get_custom_actions>`メソッドによって返される完全修飾プロシージャ名を使用してください。
拡張例¶
次の例では、カスタムアクションによって呼び出されるストアドプロシージャを記述し、そのプロシージャに必要な権限を付与して、カスタムアクションを予算に追加する方法を示します。
:ref:`すべての要件に準拠<label-budget_custom_actions_stored_procedure>`するストアドプロシージャを作成します。
ストアドプロシージャに対する権限をSNOWFLAKEアプリケーションに付与します。
消費量が予算の支出制限の90%に達したときにトリガーされるように、カスタムアクションを予算に追加します。
カスタムアクションのトラブルシューティング¶
カスタムアクションが期待どおりに機能しない場合は、次の方法を使用して問題を診断してください。
カスタムアクションの実行の監視¶
Snowflakeは、タスクを使用してカスタムアクションを実行します。これらのタスクは、命名規則``BUDGET_CUSTOM_ACTION_TRIGGER_AT_%``に従います。予算インスタンスに対するすべてのカスタムアクションタスクの実行ステータスを確認するには、次のクエリを実行します。
アクショントリガー履歴の表示¶
一定期間内に特定の予算からトリガーされたカスタムアクションを確認するには、以下のクエリを実行します。
特定のカスタムアクションのトリガー履歴を確認するには、まず:doc:`GET_CUSTOM_ACTIONS</sql-reference/classes/budget/methods/get_custom_actions>`メソッドを呼び出してアクションIDを取得します。
次に、以下のクエリでアクションIDを使用します。
トリガーしないアクションのトラブルシューティング¶
カスタムアクションが期待どおりにトリガーされない場合は、次の一般的な問題を確認してください。カスタム予算は``budget_db.sch1.my_budget``であると仮定します。
ストアドプロシージャまたは権限が変更された
カスタムアクションによって呼び出されるストアドプロシージャがまだ有効であり、SNOWFLAKEアプリケーションにはまだ必要な権限があることを確認します。:doc:`CONFIRM_CUSTOM_ACTIONS_ACCESS</sql-reference/classes/budget/methods/confirm_custom_actions_access>`メソッドを呼び出して、ストアドプロシージャとアクセス制御権限を検証します。
予算がアクティブ化されていない
アカウント予算の場合のみ、:doc:`GET_CONFIG</sql-reference/classes/budget/methods/get_config>`メソッドを呼び出して``is_active``フィールドをチェックし、予算がアクティブ化されていることを確認します。
予算に支出制限がありません
予算に支出制限が構成されていない場合、カスタムアクションはトリガーされません。支出制限を確認します。
予算はいずれのリソースも追跡していません
支出履歴をチェックして、予算がリソースを追跡していることを確認します。
カスタムアクションが最近トリガーされました
過剰なトリガーを防ぐために、Snowflakeはカスタムアクションの実行頻度を制限しています。
クレジット消費が支出しきい値に達すると予測されるときにカスタムアクションが実行される場合、ストアドプロシージャが呼び出されるのは1日に1回までです。
クレジット消費が実績支出の制限に達したときにカスタムアクションが実行される場合、ストアドプロシージャが呼び出されるのは月に1回までです。
:doc:`GET_CUSTOM_ACTIONS</sql-reference/classes/budget/methods/get_custom_actions>`メソッドを呼び出して``LAST_TRIGGER_ATTEMPT_TIME``フィールドを確認します。