Cortex Agentのリソース予算

リソース予算を使用すると、アカウントでのCortex Agentの支出をモニターし、支出のしきい値を超えた場合にアクションを実行できます。これにより、Cortex Agentのコストを制御し、設定した制限を支出超えた場合にアクセスを取り消すなどの自動アクションを実行できます。リソース予算では、特定のエージェントの集計レベルで消費されるクレジットを制御できます。

リソース予算の仕組み

リソース予算はSnowflakeのタグベースのコスト帰属モデルを使用します。タグを作成して、Cortex Agentオブジェクトに適用し、そのタグを予算に関連付けます。Snowflakeは、タグ付けされたオブジェクトのクレジット消費を追跡し、定期的に予算上限に対する支出を評価します。リソース予算は、Cortex Agentオブジェクトの支出を制限するのに役立ちます。

Snowflakeは、次のフローでリソース予算を実行します。

  1. タグを作成する。

  2. タグをCortex Agentオブジェクトに適用する。

  3. 予算を作成し、支出を追跡するタグを指定する。予算を作成する一環として、クレジットで毎月の支出制限も設定する。

  4. 支出が設定された予算のしきい値に達したときに実行される、ストアドプロシージャを追加する。たとえば、80%でアラートを発生させるストアドプロシージャと、100%でアクセスを取り消す別のストアドプロシージャを呼び出すことができる。

  5. Snowflakeは、タグ付きオブジェクトのクレジット消費を追跡する。

  6. 支出が予算の80%や100%など、設定されたしきい値に達すると、Snowflakeはそのしきい値に対して定義されたストアドプロシージャを実行する。

Snowflakeは使用量を計算し、しきい値を評価し、設定されたアクションを定期的にトリガーします。予算を超過した後、その制限が適用されるまで、標準の予算設定では最大8時間(またはレイテンシの最適化オプションでは2時間)かかる場合があります。

タグを作成します。

  1. Cortex Agentオブジェクトに関連するコストセンターを識別するタグを作成します。

    -- Create a tag with allowed cost center values
    CREATE TAG cost_mgmt_db.tags.cost_center
       ALLOWED_VALUES 'org-level'
       COMMENT = 'cost_center tag';
    
  2. Cortex Agentオブジェクトにタグを適用して、コストセンターに関連付けます。

    -- Apply the cost center tag to the Cortex Agent object
    ALTER AGENT IF EXISTS my_agent
      SET TAG cost_mgmt_db.tags.cost_center = 'org-level';
    

リソース予算の設定

|sf-web-interface|またはSQLを使用して予算を作成し、Cortex Agentオブジェクトに関連付けることができます。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Admin » Cost management を選択します。

  3. Budgets を選択します。

  4. + Budget を選択します。

  5. :ui:`Location to store`には、予算を作成するデータベースとスキーマの名前を選択します。

  6. Name には、 my_budget を使用します。

  7. :ui:`Budget (credits per month)`には、予算の支出制限として**10000**などの値を入力します。

  8. 予算更新間隔 を減らして支出をより密接に観察できるようにするには、 Enable low latency budget を選択します。

  9. :ui:`Threshold`には、通知のしきい値として**80**などの値を入力します。

  10. :ui:`Notify`には、通知メールを受け取るメールアドレスを入力します。

  11. Next を選択します。

  12. :ui:`Budget scope`には、Cortex Agentオブジェクトのタグをリソース予算に追加します。

  13. Create を選択します。

これで、Snowflakeは10,000クレジットの月額制限がある``my_budget``予算に対する``my_agent``のクレジット消費を追跡します。

しきい値アクションの構成

支出が特定のしきい値に達したときに実行されるストアドプロシージャをアタッチできます。これは、支出制限の割合として表され、毎月の予算期間に適用されます。詳細については、 予算のカスタムアクション をご参照ください。

通知を送信

支出がしきい値に達すると、通知を送信できます。詳細については、 予算に関する通知 をご参照ください。

  1. 通知を送信するメールアドレスを設定します。

    CALL my_budget!SET_EMAIL_NOTIFICATIONS(
      'budgets_notification_integration',
       'costadmin@example.com, budgetadmin@example.com'
    );
    
  2. 通知のしきい値を設定します。

    CALL my_budget!SET_NOTIFICATION_THRESHOLD(80);
    

アクセス権を取り消す

  1. Cortex Agentへのアクセスを取り消すストアドプロシージャを作成します。ストアドプロシージャでは、特定のロールへのアクセスを制限して、そのロールのUSAGEを取り消すことができます。

    -- Create a stored procedure that revokes access to the Cortex Agent object
    CREATE OR REPLACE PROCEDURE budgets_db.budgets_schema.sp_revoke_agent_access(
       agent_name STRING, role_name STRING
    )
    RETURNS STRING
    LANGUAGE SQL
    AS
    BEGIN
       EXECUTE IMMEDIATE 'REVOKE ROLE agent_' || agent_name || '_role FROM ROLE ' || role_name;
       RETURN 'Access revoked for ' || agent_name;
    END;
    

    重要

    :code:`role_name`とユーザーが、他のロールを介してCortex Agentにアクセスできないことを確認します。ロールと権限を正しく構成する方法について詳しくは、:ref:`label-snowflake-intelligence-user-privileges`を参照してください。

  2. 予算の100%が使用されると、アクセスをブロックするカスタムアクションを設定します。通知にカスタムアクションを使用することもできます。

    -- Provide access to the stored procedures
    GRANT USAGE ON DATABASE budgets_db TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON PROCEDURE budgets_db.budgets_schema.sp_revoke_agent_access(STRING, STRING)
       TO APPLICATION SNOWFLAKE;
    
    -- Block access at 100% of the budget
    CALL budgets_db.budgets_schema.my_budget!ADD_CUSTOM_ACTION(
       SYSTEM$REFERENCE('PROCEDURE',
          'budgets_db.budgets_schema.sp_revoke_agent_access(string, string)'),
       ARRAY_CONSTRUCT('AGENT_NAME', 'ROLE_NAME'),
       'ACTUAL',
       100);
    

注釈

また、カスタムアクションを使用して、支出が予算制限を超えると予測された場合にアクションを起こすこともできます。詳細については、 予算のカスタムアクション をご参照ください。

支出制限の例外処理

場合によっては、収益時期やその他のピーク時など、予算制限に達した後に再度アクセスが必要になることがあります。これらの例外シナリオを処理するために、100%を超えて最大500%までのしきい値を設定できます。

ワークフローでは、支出が予算のしきい値に達すると、構成されたストアドプロシージャを使用してアクセスが取り消されることを前提としています。管理者は一部のユーザーを復元し、アクセス権を再度付与します。支出が200%に達すると、失効プロシージャが強制停止として再実行されます。

  1. ロールへのアクセスを復元するストアドプロシージャを作成します。

    -- Create a stored procedure that reinstates access to the Cortex Agent object
    CREATE OR REPLACE PROCEDURE budgets_db.budgets_schema.sp_reinstate_agent_access(
       agent_name STRING, role_name STRING
    )
    RETURNS STRING
    LANGUAGE SQL
    AS
    BEGIN
       EXECUTE IMMEDIATE 'GRANT ROLE agent_' || agent_name || '_role TO ROLE ' || role_name;
       RETURN 'Access reinstated for ' || agent_name;
    END;
    
  2. アクセスを復元するストアドプロシージャで、100%を超えるしきい値を構成します。これにより、例外期間の有効な予算を引き上げることができます。支出が予算の200%に達すると、アクセスは再び取り消されます。

    -- Add grants for this procedure
    GRANT USAGE ON DATABASE budgets_db TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON PROCEDURE budgets_db.budgets_schema.sp_revoke_agent_access(STRING, STRING)
       TO APPLICATION SNOWFLAKE;
    
    -- Issue a reinstatement for a subset of users
    CALL budgets_db.budgets_schema.sp_reinstate_agent_access('my_agent', 'power_user_role');
    
    -- Set another threshold at 200% as a hard stop
    CALL budgets_db.budgets_schema.my_budget!ADD_CUSTOM_ACTION(
       SYSTEM$REFERENCE(
          'PROCEDURE',
          'budgets_db.budgets_schema.sp_revoke_agent_access(string, string)'
       ),
       ARRAY_CONSTRUCT('my_agent', 'power_user_role'),
       'ACTUAL',
       200
    );
    

アクセスの復元

次の予算期間の開始時にユーザーがCortex Agentに再度アクセスできるようにするには、予算サイクルの再開時に以下のストアドプロシージャが呼び出されるように設定します。

  1. ロールへのアクセスを復元するストアドプロシージャを作成します。

    -- Create a stored procedure that reinstates access to the Cortex Agent object
    CREATE OR REPLACE PROCEDURE budgets_db.budgets_schema.sp_reinstate_agent_access(
       agent_name STRING, role_name STRING
    )
    RETURNS STRING
    LANGUAGE SQL
    AS
    BEGIN
       EXECUTE IMMEDIATE 'GRANT ROLE agent_' || agent_name || '_role TO ROLE ' || role_name;
       RETURN 'Access reinstated for ' || agent_name;
    END;
    
  2. 予算のサイクル開始アクションを設定します。

    GRANT USAGE ON DATABASE budgets_db TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON SCHEMA budgets_db.budgets_schema TO APPLICATION SNOWFLAKE;
    GRANT USAGE ON PROCEDURE budgets_db.budgets_schema.sp_reinstate_agent_access(STRING, STRING)
       TO APPLICATION SNOWFLAKE;
    
    CALL budgets_db.budgets_schema.my_budget!SET_CYCLE_START_ACTION(
       SYSTEM$REFERENCE('PROCEDURE', 'budgets_db.budgets_schema.sp_reinstate_agent_access(string, string)'),
       ARRAY_CONSTRUCT('my_agent', 'power_user_role')
    );
    

支出予測に基づくアラートの設定

アラートを受信したり、実際の支出ではなく予測支出に基づいてアクションを実行したりするには、トリガータイプを``PROJECTED``に設定します。たとえば、予測消費量が予算制限の75%に達したときに``alert_team``という名前のストアドプロシージャを呼び出すには、以下のコマンドを実行します。

CALL budget_db.sch1.my_budget!ADD_CUSTOM_ACTION(
   SYSTEM$REFERENCE('PROCEDURE', 'code_db.sch1.alert_team(string, string, string)'),
   ARRAY_CONSTRUCT('admin@example.com', 'Budget Alert', 'Spending at 75% of budget limit'),
   'PROJECTED',
   75);

カスタムアクションのリスト

  • 予算で構成されたすべてのカスタムアクションをリストするには、:doc:`GET_CUSTOM_ACTIONS </sql-reference/classes/budget/methods/get_custom_actions>`メソッドを使用します。

    -- View all custom actions on the budget
    CALL budgets_db.budgets_schema.my_budget!GET_CUSTOM_ACTIONS();
    

詳細については、 予算のカスタムアクション をご参照ください。

使用状況のモニター

  • Cortex Agentオブジェクトごとのクレジット消費量を表示するには、予算の使用状況レポートメソッドを使用します。

    -- View usage for the current month
    CALL budgets_db.budgets_schema.my_budget!GET_SERVICE_TYPE_USAGE_V2(
       '2026-02',
       '2026-03'
    );
    

    出力には次の列が含まれます。

    説明

    サービスタイプ

    サービスカテゴリ(AI)

    エンティティタイプ

    オブジェクト型(CORTEX_AGENT)

    エンティティID

    Cortex Agentオブジェクトの一意の識別子

    名前

    Cortex Agentオブジェクトの表示名

    使用済みクレジット

    指定された期間中に消費されたクレジットの合計

    クレジットクラウド

    使用したクラウドサービスのクレジット数

予算適用のレイテンシ

予算の計算としきい値の適用は定期的に行われます。

  1. Snowflakeは、タグ化されたCortex Agentオブジェクトのクレジット消費量を計算します。

  2. システムは、構成されたすべてのしきい値に対して支出を評価します。

  3. しきい値に達すると、関連するストアドプロシージャが実行されます。

  4. 使用状況ダッシュボードが更新され、最新の図表になります。

低レイテンシ予算を有効にしている場合、予算を超過してから2時間後に予算が適用されます。それ以外の場合、予算を超過してから適用までに最大8時間かかる可能性があります。:ref:`更新間隔<label-budgets_refresh_interval>`を短縮するために、60分ごとなど、より頻繁に予算の実行をトリガーできます。

警告

クレジットが消費されてから予算システムがしきい値違反を検出するまでの間には、固有の遅延があります。適用間隔の間に、アクションが実行される前に設定されたしきい値を支出が超える可能性があります。それに応じてしきい値を計画してください。たとえば、80%にアラートを設定して、100%のアクションがトリガーされる前に応答する時間を与えます。

制限事項

Cortex Agentのリソース予算には以下の制限が適用されます。

  • シングルチームリソースのみ:リソース予算はCortex Agentオブジェクト全体に適用されます。

  • 適用レイテンシ:予算の適用は定期的なサイクルで実行され、予算を超過してから予算が適用されるまでに最大8時間かかる場合があります。アクションがトリガーされるまでの間隔で、支出はしきい値を超える可能性があります。

  • ロールベースのアクセス取り消し:しきい値を使ってアクセスを取り消すには、Cortex Agentオブジェクト専用のロールを作成する必要があります。

  • 月次期間:予算は月間サイクルで動作します。リソース予算の期間は設定できません。

  • タグのレイテンシ:オブジェクトのタグを変更すると、タグを使用する予算に変更が反映されるまでに最大8時間かかる場合があります。詳細については、 カスタム予算 をご参照ください。

  • エントリポイントによる帰属の決定:リクエストが|sf-intelligence|で開始され、Cortex Agentを呼び出す場合、その使用量は|sf-intelligence|に帰属します。その結果、Cortex Agentでタグ付けされたリソースのみを対象とする予算(たとえば、エージェントにのみ適用されるタグ)は、これらのリクエストがCortex Agentを呼び出す場合でも、|sf-intelligence|で開始されたリクエストからのクレジットをキャプチャしません。この使用量をカバーするには、|sf-intelligence|リソースを予算の対象に含めるか、別の|sf-intelligence|リソース予算を設定します(:doc:`/user-guide/snowflake-cortex/snowflake-intelligence/si-resource-budgets`を参照)。ただし、|sf-intelligence|の対象の予算は、特定のCortex Agentを呼び出すリクエストだけでなく、対象の|sf-intelligence|オブジェクトに帰属するすべての使用量に適用されることにご注意ください。