Cortex AIのResource Budgetsによるコスト管理(2026/5/18更新済み)
1. はじめに
2026年3月11日、SnowflakeはAI機能のコスト管理を強化する新機能「Resource Budgets for Cortex Agents」と「Resource Budgets for Snowflake Intelligence」をリリースしました。本記事では、これらの機能を実際に検証し、AI機能の月次クレジット消費を制御する方法を解説します。
なぜResource Budgetsが必要なのか
Cortex AgentsやSnowflake Intelligenceは強力な機能ですが、以下のような課題があります:
- 予測困難なコスト: LLM呼び出し回数やトークン消費量は事前予測が難しい
- 急激なコスト増加: 利用が広がると想定外のコスト増加が発生しうる
- 部門別管理の難しさ: どのチームがどれだけ消費しているか把握しにくい
Resource Budgetsは、タグベースのコスト帰属モデルにより、これらの課題を解決します。
2. 機能概要
対象サービス
| サービス | 説明 |
|---|---|
| Cortex Agents | LLMを活用したAIエージェント |
| Snowflake Intelligence | 自然言語でデータ分析を行うサービス |
主要な特徴
| 項目 | 説明 |
|---|---|
| コスト帰属 | タグベースでリソースをグループ化 |
| アクション | 閾値到達時にストアドプロシージャを自動実行 |
| 閾値タイプ | ACTUAL(実際の消費)と PROJECTED(予測消費)の2種類 |
| データ更新 | 標準: 最大8時間 / TIER_1H: 最大1時間 |
カスタムアクションの仕組み
Budget使用量 → 閾値到達 → ストアドプロシージャ実行 → 通知/アクセス制御

3. SNOWFLAKE.CORE.BUDGET クラス詳解
Resource Budgets の中核となる SNOWFLAKE.CORE.BUDGET クラスのメソッドについて解説します。
3.1 主要メソッド一覧
| カテゴリ | メソッド | 説明 |
|---|---|---|
| 設定 | SET_SPENDING_LIMIT |
月次クレジット上限を設定 |
| 設定 | SET_RESOURCE_TAGS |
タグベースのスコープを設定 |
| 設定 | SET_REFRESH_TIER |
データ更新間隔を設定 |
| アクション | ADD_CUSTOM_ACTION |
閾値到達時のアクションを追加 |
| アクション | SET_CYCLE_START_ACTION |
サイクル開始時のアクションを設定 |
| モニタリング | GET_SERVICE_TYPE_USAGE_V2 |
サービス別使用量を取得 |
| モニタリング | GET_SPENDING_HISTORY |
支出履歴を取得 |
| モニタリング | GET_CUSTOM_ACTIONS |
設定済みアクションを確認 |
| 操作 | REFRESH_USAGE |
使用量データを強制更新 |
3.2 SET_SPENDING_LIMIT - 支出上限の設定
月次のクレジット消費上限を設定します。
CALL <budget_name>!SET_SPENDING_LIMIT( <spending_limit> )
| パラメータ | 型 | 説明 |
|---|---|---|
spending_limit |
INTEGER | 月次クレジット上限(正の整数のみ) |
-- 月次100クレジットの上限を設定
CALL my_budget!SET_SPENDING_LIMIT(100);
-- 上限を確認
CALL my_budget!GET_SPENDING_LIMIT();
3.3 SET_RESOURCE_TAGS - タグベースのスコープ設定
タグ付けされたリソースをBudgetの追跡対象に設定します。
CALL <budget_name>!SET_RESOURCE_TAGS( <tag_pairs>, <operation_mode> )
| パラメータ | 型 | 説明 |
|---|---|---|
tag_pairs |
ARRAY | タグ参照と値のペア配列 |
operation_mode |
STRING |
'UNION'(OR条件)または 'INTERSECTION'(AND条件) |
operation_mode の違い:
| モード | 説明 | 使用例 |
|---|---|---|
UNION |
いずれかのタグに一致するリソースを含む(OR) | 複数チームの合計を追跡 |
INTERSECTION |
すべてのタグに一致するリソースのみ含む(AND) | 特定チーム×特定環境のみ追跡 |
-- cortex-agent タグが付いたリソースを追跡(UNION)
CALL my_budget!SET_RESOURCE_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'DB.TAGS.COST_CENTER', 'SESSION', 'APPLYBUDGET')), 'cortex-agent']
],
'UNION'
);
-- 複数タグの組み合わせ(両方のタグを持つリソースのみ: INTERSECTION)
CALL my_budget!SET_RESOURCE_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'DB.TAGS.COST_CENTER', 'SESSION', 'APPLYBUDGET')), 'production'],
[(SELECT SYSTEM$REFERENCE('TAG', 'DB.TAGS.TEAM', 'SESSION', 'APPLYBUDGET')), 'data-science']
],
'INTERSECTION'
);
3.4 SET_REFRESH_TIER - データ更新間隔の設定
Budget使用量データの更新頻度を設定します。
CALL <budget_name>!SET_REFRESH_TIER( '<refresh_interval>' )
| 値 | 更新間隔 | コスト | 用途 |
|---|---|---|---|
TIER_6H |
最大6.5時間 | 標準 | 通常運用(デフォルト) |
TIER_1H |
最大1時間 | 12倍 | リアルタイム監視が必要な場合 |
-- 1時間間隔に設定(検証用)
CALL my_budget!SET_REFRESH_TIER('TIER_1H');
-- 標準に戻す
CALL my_budget!SET_REFRESH_TIER('TIER_6H');
-- 現在の設定を確認
CALL my_budget!GET_REFRESH_TIER();
3.5 ADD_CUSTOM_ACTION - カスタムアクションの追加
閾値到達時に自動実行されるストアドプロシージャを設定します。
CALL <budget_name>!ADD_CUSTOM_ACTION(
<stored_procedure_reference>,
<array_of_arguments>,
<trigger_type>,
<threshold>
)
| パラメータ | 型 | 説明 |
|---|---|---|
stored_procedure_reference |
REFERENCE |
SYSTEM$REFERENCE() で取得したプロシージャ参照 |
array_of_arguments |
ARRAY | プロシージャに渡す引数の配列 |
trigger_type |
STRING |
'ACTUAL'(実消費)または 'PROJECTED'(予測消費) |
threshold |
INTEGER | 閾値(0〜1000、パーセンテージ) |
trigger_type の違い:
| タイプ | 説明 | トリガー条件 |
|---|---|---|
ACTUAL |
実際の消費に基づく | 実消費が閾値に到達した時点 |
PROJECTED |
予測消費に基づく | 月末までの予測消費が閾値に到達見込みの時点 |
-- 80%実消費で警告(ACTUAL)
CALL my_budget!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'DB.SCH.ALERT_PROC(string, string, string)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', '80', 'admin@example.com'),
'ACTUAL',
80
);
-- 50%予測到達で早期警告(PROJECTED)
CALL my_budget!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'DB.SCH.ALERT_PROC(string, string, string)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', '50_PROJECTED', 'admin@example.com'),
'PROJECTED',
50
);
3.6 SET_CYCLE_START_ACTION - サイクル開始時アクション
月初め(Budgetサイクル開始時)に自動実行されるアクションを設定します。100%到達でアクセスを取り消した場合の自動復旧に活用できます。
CALL <budget_name>!SET_CYCLE_START_ACTION(
<stored_procedure_reference>,
<array_of_arguments>
)
-- 月初めにアクセスを自動復旧
CALL my_budget!SET_CYCLE_START_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'DB.SCH.REINSTATE_ACCESS(string, string)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', 'USER_ROLE')
);
-- 設定を確認
CALL my_budget!GET_CYCLE_START_ACTION();
-- 設定を削除
CALL my_budget!REMOVE_CYCLE_START_ACTION();
3.7 GET_SERVICE_TYPE_USAGE_V2 - サービス別使用量の取得
Budget対象リソースのサービス別クレジット使用量を取得します。
CALL <budget_name>!GET_SERVICE_TYPE_USAGE_V2( '<start_month>', '<end_month>' )
戻り値のカラム:
| カラム | 型 | 説明 |
|---|---|---|
SERVICE_TYPE |
VARCHAR | クレジットを消費したサービス種別 |
ENTITY_TYPE |
VARCHAR | オブジェクトの種類 |
ENTITY_ID |
NUMBER | オブジェクトの内部ID |
NAME |
VARCHAR | オブジェクト名 |
CREDITS_USED |
FLOAT | 合計クレジット使用量 |
CREDITS_COMPUTE |
FLOAT | コンピュートクレジット |
CREDITS_CLOUD |
FLOAT | クラウドサービスクレジット |
-- 2026年3月の使用量を取得
CALL my_budget!GET_SERVICE_TYPE_USAGE_V2('2026-03', '2026-03');
-- 結果例:
-- SERVICE_TYPE | NAME | CREDITS_USED
-- CORTEX_AGENT | TPCH_ASSISTANT | 0.3456
-- AI_SERVICES | - | 0.1234
3.8 REFRESH_USAGE - 使用量の強制更新
Budget使用量データを即時更新します(通常は TIER_6H で最大6.5時間、TIER_1H で最大1時間の遅延あり)。
CALL <budget_name>!REFRESH_USAGE()
3.9 その他の便利なメソッド
-- Budget設定の一覧を取得
CALL my_budget!GET_CONFIG();
-- カスタムアクション一覧を取得
CALL my_budget!GET_CUSTOM_ACTIONS();
-- スコープ(追跡対象)を確認
CALL my_budget!GET_BUDGET_SCOPE();
-- 支出履歴を取得
CALL my_budget!GET_SPENDING_HISTORY();
-- カスタムアクションを削除
CALL my_budget!REMOVE_CUSTOM_ACTIONS();
4. ハンズオン: 環境構築
本章では、検証用で使用するDBやTagsを作成します。
4.1 データベース・スキーマ作成
USE ROLE ACCOUNTADMIN;
CREATE DATABASE IF NOT EXISTS BUDGET_DEMO_DB;
CREATE SCHEMA IF NOT EXISTS BUDGET_DEMO_DB.BUDGETS;
CREATE SCHEMA IF NOT EXISTS BUDGET_DEMO_DB.TAGS;
CREATE SCHEMA IF NOT EXISTS BUDGET_DEMO_DB.AGENTS;
4.2 タグ作成
AI機能をグループ化するためのタグを作成します:
CREATE OR REPLACE TAG BUDGET_DEMO_DB.TAGS.COST_CENTER
ALLOWED_VALUES 'cortex-agent', 'snowflake-intelligence'
COMMENT = 'AI機能のコスト管理用タグ';
4.3 ログテーブル作成
アラートやアクセス制御の履歴を記録するテーブルを用意します:
CREATE TABLE IF NOT EXISTS BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS (
ALERT_TIME TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP(),
SERVICE_TYPE STRING,
OBJECT_NAME STRING,
THRESHOLD_PCT STRING,
MESSAGE STRING
);
CREATE TABLE IF NOT EXISTS BUDGET_DEMO_DB.BUDGETS.ACCESS_REVOKE_LOG (
REVOKE_TIME TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP(),
SERVICE_TYPE STRING,
OBJECT_NAME STRING,
ROLE_NAME STRING,
ACTION STRING
);
5. ハンズオン: Cortex Agent のコスト管理
次にCortex AgentやSnowflake IntelligencewやBudget機能で使用するストアドプロシージャーを作成します。
5.1 Cortex Agent 作成
検証用のCortex Agentを作成します:
-- 検索用データの準備
CREATE OR REPLACE TABLE BUDGET_DEMO_DB.AGENTS.PRODUCT_DOCS AS
SELECT
P_PARTKEY AS DOC_ID,
P_NAME AS TITLE,
P_NAME || ' - ' || P_MFGR || ' - ' || P_BRAND AS CONTENT
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.PART
LIMIT 1000;
-- Cortex Search Service 作成
CREATE OR REPLACE CORTEX SEARCH SERVICE BUDGET_DEMO_DB.AGENTS.PRODUCT_SEARCH
ON CONTENT
WAREHOUSE = BUDGET_DEMO_WH
TARGET_LAG = '1 hour'
AS (SELECT DOC_ID, TITLE, CONTENT FROM BUDGET_DEMO_DB.AGENTS.PRODUCT_DOCS);
-- Cortex Agent 作成
CREATE OR REPLACE AGENT BUDGET_DEMO_DB.AGENTS.TPCH_ASSISTANT
COMMENT = 'TPCH製品情報検索アシスタント'
FROM SPECIFICATION
$$
models:
orchestration: claude-4-sonnet
instructions:
system: |
あなたはTPCH製品カタログの検索アシスタントです。
ユーザーの質問に対して、製品情報を検索して回答してください。
回答は日本語で行ってください。
tools:
- tool_spec:
type: "cortex_search"
name: "ProductSearch"
description: "TPCH製品カタログを検索します"
tool_resources:
ProductSearch:
name: "BUDGET_DEMO_DB.AGENTS.PRODUCT_SEARCH"
max_results: "5"
$$;
-- タグ適用(重要: Budget追跡のために必須)
ALTER AGENT BUDGET_DEMO_DB.AGENTS.TPCH_ASSISTANT
SET TAG BUDGET_DEMO_DB.TAGS.COST_CENTER = 'cortex-agent';
5.2 通知用ストアドプロシージャ
CREATE OR REPLACE PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_ALERT_AGENT_BUDGET(
AGENT_NAME STRING,
THRESHOLD_PCT STRING,
ADMIN_EMAIL STRING
)
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER -- 重要: EXECUTE AS OWNER が必須
AS
'
var insert_sql = `INSERT INTO BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS
(ALERT_TIME, SERVICE_TYPE, OBJECT_NAME, THRESHOLD_PCT, MESSAGE)
VALUES (
CURRENT_TIMESTAMP(),
''CORTEX_AGENT'',
''` + AGENT_NAME + `'',
''` + THRESHOLD_PCT + `'',
''Budget threshold ` + THRESHOLD_PCT + `% reached for agent: ` + AGENT_NAME + `''
)`;
snowflake.execute({sqlText: insert_sql});
return "Alert logged for " + AGENT_NAME + " at " + THRESHOLD_PCT + "%";
';
-- APPLICATION SNOWFLAKEへの権限付与(重要)
GRANT USAGE ON PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_ALERT_AGENT_BUDGET(STRING, STRING, STRING)
TO APPLICATION SNOWFLAKE;
5.3 アクセス取消用ストアドプロシージャ
CREATE OR REPLACE PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_REVOKE_AGENT_ACCESS(
AGENT_NAME STRING,
ROLE_NAME STRING
)
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
'
var revoke_sql = "REVOKE USAGE ON AGENT BUDGET_DEMO_DB.AGENTS." + AGENT_NAME + " FROM ROLE " + ROLE_NAME;
try {
snowflake.execute({sqlText: revoke_sql});
} catch(e) {}
var insert_sql = `INSERT INTO BUDGET_DEMO_DB.BUDGETS.ACCESS_REVOKE_LOG
(REVOKE_TIME, SERVICE_TYPE, OBJECT_NAME, ROLE_NAME, ACTION)
VALUES (
CURRENT_TIMESTAMP(),
''CORTEX_AGENT'',
''` + AGENT_NAME + `'',
''` + ROLE_NAME + `'',
''REVOKED''
)`;
snowflake.execute({sqlText: insert_sql});
return "Access revoked for " + AGENT_NAME + " from role " + ROLE_NAME;
';
GRANT USAGE ON PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_REVOKE_AGENT_ACCESS(STRING, STRING)
TO APPLICATION SNOWFLAKE;
5.4 Budget 作成と設定
-- SNOWFLAKEアプリケーションへの基本権限付与
GRANT USAGE ON DATABASE BUDGET_DEMO_DB TO APPLICATION SNOWFLAKE;
GRANT USAGE ON SCHEMA BUDGET_DEMO_DB.BUDGETS TO APPLICATION SNOWFLAKE;
GRANT SELECT, INSERT ON TABLE BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS TO APPLICATION SNOWFLAKE;
GRANT SELECT, INSERT ON TABLE BUDGET_DEMO_DB.BUDGETS.ACCESS_REVOKE_LOG TO APPLICATION SNOWFLAKE;
-- Budget 作成
CREATE SNOWFLAKE.CORE.BUDGET IF NOT EXISTS BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET()
WITH COMMENT = 'Budget for Cortex Agents';
-- 月次上限設定(正の整数のみ)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!SET_SPENDING_LIMIT(100);
-- タグベースのスコープ設定
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!SET_RESOURCE_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'BUDGET_DEMO_DB.TAGS.COST_CENTER', 'SESSION', 'APPLYBUDGET')), 'cortex-agent']
],
'UNION');
-- 低遅延オプション有効化(1時間間隔で更新)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!SET_REFRESH_TIER('TIER_1H');
5.5 カスタムアクション設定
-- 80%で通知アラート
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'BUDGET_DEMO_DB.BUDGETS.SP_ALERT_AGENT_BUDGET(string, string, string)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', '80', 'admin@example.com'),
'ACTUAL',
80
);
-- 100%でアクセス取消
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'BUDGET_DEMO_DB.BUDGETS.SP_REVOKE_AGENT_ACCESS(string, string)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', 'CORTEX_AGENT_USER_ROLE'),
'ACTUAL',
100
);
6. 高度な設定
6.1 200%閾値(緊急シャットダウン)
100%で一度アクセスを取り消しても、管理者が手動で復旧させる場合があります。200%閾値を設けることで、緊急時のハードストップを実現できます:
CREATE OR REPLACE PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_EMERGENCY_AGENT_SHUTDOWN(
AGENT_NAME STRING,
THRESHOLD_PCT STRING,
ADMIN_EMAIL STRING
)
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
'
var insert_sql = `INSERT INTO BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS
(ALERT_TIME, SERVICE_TYPE, OBJECT_NAME, THRESHOLD_PCT, MESSAGE)
VALUES (
CURRENT_TIMESTAMP(),
''CORTEX_AGENT'',
''` + AGENT_NAME + `'',
''` + THRESHOLD_PCT + `'',
''[EMERGENCY] Budget exceeded 200%! Immediate shutdown required for agent: ` + AGENT_NAME + `''
)`;
snowflake.execute({sqlText: insert_sql});
// すべてのロールからアクセスを取り消し
var revoke_sql = `REVOKE USAGE ON CORTEX AGENT BUDGET_DEMO_DB.AGENTS.` + AGENT_NAME + ` FROM ROLE PUBLIC`;
try {
snowflake.execute({sqlText: revoke_sql});
} catch (e) {}
return "[EMERGENCY] 200% threshold exceeded - agent " + AGENT_NAME + " access revoked";
';
GRANT USAGE ON PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_EMERGENCY_AGENT_SHUTDOWN(VARCHAR, VARCHAR, VARCHAR)
TO APPLICATION SNOWFLAKE;
-- 200%閾値でのカスタムアクション追加
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'BUDGET_DEMO_DB.BUDGETS.SP_EMERGENCY_AGENT_SHUTDOWN(VARCHAR, VARCHAR, VARCHAR)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', '200', 'admin@example.com'),
'ACTUAL',
200
);
6.2 予測ベースアラート(PROJECTED)
PROJECTED 閾値を使うと、現在の消費ペースから月末までの予測消費量を計算し、早期に警告を発することができます:
CREATE OR REPLACE PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_PROJECTED_ALERT_AGENT(
AGENT_NAME STRING,
THRESHOLD_PCT STRING,
ADMIN_EMAIL STRING
)
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
'
var insert_sql = `INSERT INTO BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS
(ALERT_TIME, SERVICE_TYPE, OBJECT_NAME, THRESHOLD_PCT, MESSAGE)
VALUES (
CURRENT_TIMESTAMP(),
''CORTEX_AGENT'',
''` + AGENT_NAME + `'',
''PROJECTED_` + THRESHOLD_PCT + `'',
''[PROJECTED] Budget is projected to reach ` + THRESHOLD_PCT + `% by end of cycle for agent: ` + AGENT_NAME + `''
)`;
snowflake.execute({sqlText: insert_sql});
return "[PROJECTED] Alert logged - budget projected to reach " + THRESHOLD_PCT + "% for " + AGENT_NAME;
';
GRANT USAGE ON PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_PROJECTED_ALERT_AGENT(VARCHAR, VARCHAR, VARCHAR)
TO APPLICATION SNOWFLAKE;
-- 50%予測到達時に早期警告
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'BUDGET_DEMO_DB.BUDGETS.SP_PROJECTED_ALERT_AGENT(VARCHAR, VARCHAR, VARCHAR)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', '50', 'admin@example.com'),
'PROJECTED',
50
);
-- 100%予測到達時に警告
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'BUDGET_DEMO_DB.BUDGETS.SP_PROJECTED_ALERT_AGENT(VARCHAR, VARCHAR, VARCHAR)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', '100', 'admin@example.com'),
'PROJECTED',
100
);
6.3 サイクル開始時の自動復旧
月初めに自動的にアクセスを復旧させることで、運用負荷を軽減できます:
CREATE OR REPLACE PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_REINSTATE_AGENT_ACCESS(
AGENT_NAME STRING,
ROLE_NAME STRING
)
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
'
var grant_sql = "GRANT USAGE ON AGENT BUDGET_DEMO_DB.AGENTS." + AGENT_NAME + " TO ROLE " + ROLE_NAME;
try {
snowflake.execute({sqlText: grant_sql});
} catch(e) {}
return "Access reinstated for " + AGENT_NAME + " to role " + ROLE_NAME;
';
GRANT USAGE ON PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_REINSTATE_AGENT_ACCESS(STRING, STRING)
TO APPLICATION SNOWFLAKE;
-- サイクル開始時の自動復旧設定
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!SET_CYCLE_START_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'BUDGET_DEMO_DB.BUDGETS.SP_REINSTATE_AGENT_ACCESS(string, string)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('TPCH_ASSISTANT', 'CORTEX_AGENT_USER_ROLE')
);
7. テストとモニタリング
先月リリースされたDATA_AGENT_RUNを用いて作成したCortex Agentを実行してみます。Snowsight UIやAPI/MCPでもテストは可能ですが、SQLで実行できるのは手間が掛からないです。使用量が特定の閾値を超えるまで以下のコマンドを何回か実行してみましょう。
7.1 DATA_AGENT_RUN による Agent 呼び出し
-- Cortex Agent への問い合わせ
SELECT
TRY_PARSE_JSON(
SNOWFLAKE.CORTEX.DATA_AGENT_RUN(
'BUDGET_DEMO_DB.AGENTS.TPCH_ASSISTANT',
$${
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Manufacturer#1 の製品を3つ教えてください" }
]
}
]
}$$
)
) AS response;
7.2 使用量モニタリング
以下のコマンドを利用し、使用量を取得してみます。
-- Budget 使用量確認
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_SERVICE_TYPE_USAGE_V2(
'2026-03',
'2026-03'
);
-- 強制リフレッシュ(使用量を即時反映)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!REFRESH_USAGE();
-- カスタムアクション設定確認
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_CUSTOM_ACTIONS();
-- アラートログ確認
SELECT * FROM BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS ORDER BY ALERT_TIME DESC;
8. 検証結果
実際に検証した結果、以下のカスタムアクションが正常に動作することを確認しました:
| 閾値 | 戦略 | アクション | 検証結果 |
|---|---|---|---|
| 50% | PROJECTED | 早期警告アラート | ✅ 自動トリガー確認 |
| 80% | ACTUAL | 警告アラート | ✅ 動作確認 |
| 100% | ACTUAL | アクセス取消 | ✅ 動作確認 |
| 100% | PROJECTED | 予測アラート | ✅ 自動トリガー確認 |
| 200% | ACTUAL | 緊急シャットダウン | ✅ 設定完了 |
8.1 Budget設定の確認(GET_CONFIG)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_CONFIG();
| NOTIFICATION_EMAIL | LAST_NOTIFICATION_TIME | SPEND_LIMIT | NOTIFICATION_MUTE_FLAG | BUDGET_TYPE |
|---|---|---|---|---|
| (空) | -1 | 1 | false | USER_BUDGET |
8.2 カスタムアクション設定の確認(GET_CUSTOM_ACTIONS)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_CUSTOM_ACTIONS();
| PROCEDURE_FQN | PROCEDURE_ARGS | SPEND_STRATEGY | THRESHOLD | LAST_TRIGGER_ATTEMPT_TIME |
|---|---|---|---|---|
| SP_PROJECTED_ALERT_AGENT | TPCH_ASSISTANT,100,admin@example.com | PROJECTED | 100 | 2026/03/14 06:03:02 |
| SP_PROJECTED_ALERT_AGENT | TPCH_ASSISTANT,50,admin@example.com | PROJECTED | 50 | 2026/03/14 05:33:02 |
| SP_EMERGENCY_AGENT_SHUTDOWN | TPCH_ASSISTANT,200,admin@example.com | ACTUAL | 200 | (未トリガー) |
| SP_REVOKE_AGENT_ACCESS | TPCH_ASSISTANT,CORTEX_AGENT_USER_ROLE | ACTUAL | 100 | (未トリガー) |
| SP_ALERT_AGENT_BUDGET | TPCH_ASSISTANT,80,admin@example.com | ACTUAL | 80 | (未トリガー) |
PROJECTED アクション(50%、100%)が実際にトリガーされていることが LAST_TRIGGER_ATTEMPT_TIME で確認できます。
8.3 アラートログの確認(BUDGET_ALERTS テーブル)
SELECT * FROM BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS ORDER BY ALERT_TIME DESC;
| ALERT_TIME | SERVICE_TYPE | OBJECT_NAME | THRESHOLD_PCT | MESSAGE |
|---|---|---|---|---|
| 2026/03/14 06:03:23 | CORTEX_AGENT | TPCH_ASSISTANT | PROJECTED_100 | [PROJECTED] Budget is projected to reach 100% by end of cycle |
| 2026/03/14 05:33:23 | CORTEX_AGENT | TPCH_ASSISTANT | PROJECTED_50 | [PROJECTED] Budget is projected to reach 50% by end of cycle |
| 2026/03/14 05:29:45 | CORTEX_AGENT | TPCH_ASSISTANT | 200 | [EMERGENCY] Budget exceeded 200%! (手動テスト) |
予測アラート(PROJECTED 50%、100%)が自動的にトリガーされ、ログに記録されています。
8.4 サービス別使用量の確認(GET_SERVICE_TYPE_USAGE_V2)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_SERVICE_TYPE_USAGE_V2('2026-03', '2026-03');
| SERVICE_TYPE | ENTITY_TYPE | NAME | CREDITS_USED | CREDITS_COMPUTE | CREDITS_CLOUD |
|---|---|---|---|---|---|
| AI_SERVICES | CORTEX AGENT | TPCH_ASSISTANT | 0.4522 | 0.4522 | 0 |
Budget上限1クレジットに対して約0.45クレジット(45%)を消費していることが確認できます。
8.5 支出履歴の確認(GET_SPENDING_HISTORY)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_SPENDING_HISTORY();
| MEASUREMENT_DATE | SERVICE_TYPE | CREDITS_SPENT |
|---|---|---|
| 2026-03-13 | AI_SERVICES | 0.3399 |
| 2026-03-14 | AI_SERVICES | 0.1123 |
日別のクレジット消費推移を確認できます。
8.6 サイクル開始時アクションの確認(GET_CYCLE_START_ACTION)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_CYCLE_START_ACTION();
| PROCEDURE_FQN | PROCEDURE_ARGS | LAST_TRIGGER_ATTEMPT_TIME |
|---|---|---|
| SP_REINSTATE_AGENT_ACCESS | TPCH_ASSISTANT,CORTEX_AGENT_USER_ROLE | (月初に実行予定) |
月初めに自動的にアクセス復旧が実行されるよう設定されています。
8.7 更新間隔の確認(GET_REFRESH_TIER)
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_REFRESH_TIER();
-- 結果: TIER_1H
1時間間隔の低遅延オプションが有効になっています。
Snowsight UI での確認
Budget設定は Snowsight の Admin > Cost Management > Budgets から確認できます。


カスタムアクションの設定も GUI から確認可能です。右上にある「Budget Details」のボタンを押すと、右側のペインに設定されたカスタムアクションを確認ができます:

9. Shared Resource Budget(ユーザータグベースの予算管理)
9.1 Resource Budget との違い
これまでのセクションで紹介した Resource Budget は、AIオブジェクト自体にタグを付与してコスト追跡を行うモデルでした。一方、Shared Resource Budget はユーザーにタグを付与し、複数チームが同じAI機能を共有しながらチームごとに独立した予算管理を行うモデルです。
| 項目 | Resource Budget | Shared Resource Budget |
|---|---|---|
| タグ付与先 | AIオブジェクト | ユーザー |
| 設定メソッド | SET_RESOURCE_TAGS |
SET_USER_TAGS + ADD_SHARED_RESOURCE
|
| ユースケース | オブジェクト単位の予算管理 | チーム/部門単位の予算管理 |
| マルチチーム | 非対応 | 対応(同じリソースを複数Budgetで追跡) |
| 対象ドメイン | Cortex Agent, SI | Cortex Agent, SI, AI Function, Cortex Code |
9.2 仕組み
Shared Resource Budget は以下のワークフローで動作します:
1. ユーザーにタグを付与(ALTER USER ... SET TAG)
2. SET_USER_TAGS でBudgetにユーザータグを紐づけ
3. ADD_SHARED_RESOURCE でAI機能を共有リソースとして追加
4. タグ付きユーザーのAI利用量が独立して追跡される
5. 閾値到達時にカスタムアクションが発火
9.3 セットアップ
ユーザー用タグ作成とタグ付与
-- ユーザー用コストセンタータグ作成
CREATE OR REPLACE TAG BUDGET_DEMO_DB.TAGS.USER_COST_CENTER
ALLOWED_VALUES 'finance_dept', 'marketing_dept', 'engineering_dept'
COMMENT = 'ユーザーベースのコスト管理用タグ(Shared Resource Budget用)';
-- ユーザーにタグを付与
ALTER USER ADMIN SET TAG BUDGET_DEMO_DB.TAGS.USER_COST_CENTER = 'finance_dept';
-- 付与されたタグを確認
SELECT SYSTEM$GET_TAG('BUDGET_DEMO_DB.TAGS.USER_COST_CENTER', 'ADMIN', 'USER');
-- → finance_dept
Budget作成と SET_USER_TAGS
-- Shared Resource Budget 作成
CREATE SNOWFLAKE.CORE.BUDGET IF NOT EXISTS BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET()
WITH COMMENT = 'Shared Resource Budget for finance_dept';
-- 月次上限設定
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!SET_SPENDING_LIMIT(50);
-- ユーザータグをBudgetに紐づけ(SET_USER_TAGS)
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!SET_USER_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'BUDGET_DEMO_DB.TAGS.USER_COST_CENTER', 'SESSION', 'APPLYBUDGET')),
'finance_dept']
],
'UNION');
-- → Successfully removed 0 and set 1 user tag(s) for budget
共有リソースの追加(ADD_SHARED_RESOURCE)
Shared Resource Budget の対象となるAI機能ドメインは4種類あります:
| ドメイン | 説明 |
|---|---|
CORTEX AGENT |
Cortex Agent |
SNOWFLAKE INTELLIGENCE |
Snowflake Intelligence |
AI FUNCTION |
AI_CLASSIFY, AI_COMPLETE等 |
CORTEX CODE |
Cortex Code(CLI, Snowsight) |
-- Cortex Agent を共有リソースとして追加(特定のAgent)
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!ADD_SHARED_RESOURCE(
'CORTEX AGENT',
(SELECT SYSTEM$REFERENCE('CORTEX AGENT', 'BUDGET_DEMO_DB.AGENTS.TPCH_ASSISTANT'))
);
-- Snowflake Intelligence を共有リソースとして追加(全SI)
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!ADD_SHARED_RESOURCE(
'SNOWFLAKE INTELLIGENCE'
);
-- AI Function を共有リソースとして追加(全AI関数)
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!ADD_SHARED_RESOURCE(
'AI FUNCTION'
);
-- Cortex Code を共有リソースとして追加
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!ADD_SHARED_RESOURCE(
'CORTEX CODE'
);
設定確認
-- 追加済みの共有リソースを確認
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!GET_SHARED_RESOURCES();
| RESOURCE_ID | NAME | DOMAIN |
|---|---|---|
| NULL | [ALL-CORTEX AI FUNCTIONS] | AI_FUNCTION |
| 91 | TPCH_ASSISTANT | CORTEX_AGENT |
| NULL | [ALL-SNOWFLAKE INTELLIGENCES] | SNOWFLAKE_INTELLIGENCE |
| NULL | [ALL-CORTEX CODES] | CORTEX_CODE |
-- Budget設定を確認
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!GET_CONFIG();
| NOTIFICATION_EMAIL | LAST_NOTIFICATION_TIME | SPEND_LIMIT | NOTIFICATION_MUTE_FLAG | BUDGET_TYPE |
|---|---|---|---|---|
| (空) | -1 | 50 | false | USER_BUDGET |
9.4 カスタムアクション設定
Resource Budget と同様に、閾値到達時のアクションを設定できます:
-- 通知用プロシージャ(EXECUTE AS OWNER 必須)
CREATE OR REPLACE PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_ALERT_SHARED_BUDGET(
DEPT_NAME STRING, THRESHOLD_PCT STRING, ADMIN_EMAIL STRING
)
RETURNS STRING
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS
'
var insert_sql = "INSERT INTO BUDGET_DEMO_DB.BUDGETS.BUDGET_ALERTS "
+ "(ALERT_TIME, SERVICE_TYPE, OBJECT_NAME, THRESHOLD_PCT, MESSAGE) "
+ "VALUES (CURRENT_TIMESTAMP(), ''SHARED_RESOURCE'', ''" + DEPT_NAME
+ "'', ''" + THRESHOLD_PCT + "'', ''[SHARED] Budget threshold "
+ THRESHOLD_PCT + "% reached for dept: " + DEPT_NAME + "'')";
snowflake.execute({sqlText: insert_sql});
return "Shared budget alert logged for " + DEPT_NAME + " at " + THRESHOLD_PCT + "%";
';
GRANT USAGE ON PROCEDURE BUDGET_DEMO_DB.BUDGETS.SP_ALERT_SHARED_BUDGET(STRING, STRING, STRING)
TO APPLICATION SNOWFLAKE;
-- 80%で通知
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!ADD_CUSTOM_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'BUDGET_DEMO_DB.BUDGETS.SP_ALERT_SHARED_BUDGET(string, string, string)', 'SESSION', 'USAGE'),
ARRAY_CONSTRUCT('finance_dept', '80', 'admin@example.com'),
'ACTUAL',
80
);
9.5 マルチチーム検証
Shared Resource Budget の最大の特長は、同じAI機能を複数チームで共有しながら独立に予算管理できる点です。
-- marketing_dept 用のBudget作成
CREATE SNOWFLAKE.CORE.BUDGET IF NOT EXISTS BUDGET_DEMO_DB.BUDGETS.MARKETING_SHARED_BUDGET()
WITH COMMENT = 'Shared Resource Budget for marketing_dept';
CALL BUDGET_DEMO_DB.BUDGETS.MARKETING_SHARED_BUDGET!SET_SPENDING_LIMIT(30);
CALL BUDGET_DEMO_DB.BUDGETS.MARKETING_SHARED_BUDGET!SET_USER_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'BUDGET_DEMO_DB.TAGS.USER_COST_CENTER', 'SESSION', 'APPLYBUDGET')),
'marketing_dept']
],
'UNION');
-- finance_dept と同じリソースを共有リソースとして追加
CALL BUDGET_DEMO_DB.BUDGETS.MARKETING_SHARED_BUDGET!ADD_SHARED_RESOURCE(
'CORTEX AGENT',
(SELECT SYSTEM$REFERENCE('CORTEX AGENT', 'BUDGET_DEMO_DB.AGENTS.TPCH_ASSISTANT'))
);
CALL BUDGET_DEMO_DB.BUDGETS.MARKETING_SHARED_BUDGET!ADD_SHARED_RESOURCE('AI FUNCTION');
これにより、以下のような構成が実現できます:
| Budget | 部門 | 上限 | 共有リソース |
|---|---|---|---|
| FINANCE_SHARED_BUDGET | finance_dept | 50クレジット | Agent, AI Function, SI, Cortex Code |
| MARKETING_SHARED_BUDGET | marketing_dept | 30クレジット | Agent, AI Function |
各Budgetは独立して評価されるため、finance_dept の消費が marketing_dept の予算に影響を与えることはありません。
9.6 INTERSECTION モード(複数タグのAND条件)
SET_USER_TAGS の operation_mode に 'INTERSECTION' を指定すると、すべてのタグを持つユーザーのみがBudget対象になります:
-- プロジェクト用タグを追加
CREATE OR REPLACE TAG BUDGET_DEMO_DB.TAGS.PROJECT
ALLOWED_VALUES 'project_alpha', 'project_beta';
-- ユーザーに両方のタグを付与
ALTER USER ADMIN SET TAG BUDGET_DEMO_DB.TAGS.PROJECT = 'project_alpha';
-- INTERSECTION用Budget作成
CREATE SNOWFLAKE.CORE.BUDGET IF NOT EXISTS BUDGET_DEMO_DB.BUDGETS.INTERSECTION_BUDGET()
WITH COMMENT = 'INTERSECTION mode - finance_dept AND project_alpha';
CALL BUDGET_DEMO_DB.BUDGETS.INTERSECTION_BUDGET!SET_SPENDING_LIMIT(20);
-- INTERSECTION: finance_dept AND project_alpha の両方を持つユーザーのみ対象
CALL BUDGET_DEMO_DB.BUDGETS.INTERSECTION_BUDGET!SET_USER_TAGS(
[
[(SELECT SYSTEM$REFERENCE('TAG', 'BUDGET_DEMO_DB.TAGS.USER_COST_CENTER', 'SESSION', 'APPLYBUDGET')), 'finance_dept'],
[(SELECT SYSTEM$REFERENCE('TAG', 'BUDGET_DEMO_DB.TAGS.PROJECT', 'SESSION', 'APPLYBUDGET')), 'project_alpha']
],
'INTERSECTION');
-- → Successfully removed 0 and set 2 user tag(s) for budget
CALL BUDGET_DEMO_DB.BUDGETS.INTERSECTION_BUDGET!ADD_SHARED_RESOURCE('AI FUNCTION');
| モード | 動作 | 使用例 |
|---|---|---|
UNION |
いずれかのタグを持つユーザーが対象(OR) | 部門単位の管理 |
INTERSECTION |
すべてのタグを持つユーザーのみ対象(AND) | 部門×プロジェクトのクロス管理 |
9.7 Budget優先度
ユーザーが複数のBudget(Resource Budget と Shared Resource Budget の両方)の対象になっている場合、各Budgetは独立して評価され、先に閾値に到達した方のアクションが発火します。
-- 両方のBudget設定を確認
CALL BUDGET_DEMO_DB.BUDGETS.FINANCE_SHARED_BUDGET!GET_CONFIG();
-- → SPEND_LIMIT: 50
CALL BUDGET_DEMO_DB.BUDGETS.CORTEX_AGENT_BUDGET!GET_CONFIG();
-- → SPEND_LIMIT: 1 (検証用に低く設定)
例えば、ADMIN ユーザーが finance_dept タグを持ち、かつ TPCH_ASSISTANT Agent に cortex-agent タグが付いている場合:
-
CORTEX_AGENT_BUDGET(1クレジット)の閾値に先に到達 → こちらのアクションが発火 -
FINANCE_SHARED_BUDGET(50クレジット)は独立して追跡を継続
9.8 検証結果サマリー
| 検証項目 | 結果 |
|---|---|
ユーザーへのタグ付与 (ALTER USER ... SET TAG) |
✅ 成功 |
SET_USER_TAGS (UNION モード) |
✅ 成功 |
SET_USER_TAGS (INTERSECTION モード) |
✅ 成功 |
ADD_SHARED_RESOURCE (4ドメイン: Agent, SI, AI Function, Cortex Code) |
✅ 全て成功 |
SYSTEM$SHOW_BUDGET_SHARED_RESOURCE_CANDIDATES('AI_FUNCTION') |
✅ 15関数を返却 |
GET_SHARED_RESOURCES で追加済みリソース確認 |
✅ 4リソース確認 |
| マルチチーム構成(finance 50 credits / marketing 30 credits) | ✅ 独立管理 |
| カスタムアクション設定(80%通知, 100%アクセス取消) | ✅ 正常動作 |
| AI機能利用テスト(Cortex Agent, AI_CLASSIFY, COMPLETE(claude-sonnet-4-6)) | ✅ 全て成功 |
10. 注意点と制限事項
10.1 Shared Resource Budget の制限事項
| 制限 | 詳細 |
|---|---|
| 個別ユーザータグ付け | 一括タグ付け機能なし。各ユーザーを個別に ALTER USER する必要あり |
| タグ反映遅延 | ユーザータグの変更がBudgetに反映されるまで最大8時間 |
| 月次サイクル固定 | カスタムの予算期間は設定不可 |
| ロールベース取消のみ | 個別ユーザーの直接ブロックは未対応。専用ロールの作成が必要 |
10.2 データ更新の遅延
| Tier | 最大遅延 | 用途 |
|---|---|---|
| 標準 | 8時間 | 通常運用 |
| TIER_1H | 1時間 | リアルタイム監視が必要な場合 |
10.3 カスタムアクション プロシージャの要件
カスタムアクションで使用するストアドプロシージャには以下の要件があります:
-
EXECUTE AS OWNERで作成する必要がある -
APPLICATION SNOWFLAKEにUSAGE権限を付与する必要がある
-- 正しい例
CREATE PROCEDURE my_proc(...) ... EXECUTE AS OWNER ...;
GRANT USAGE ON PROCEDURE my_proc(...) TO APPLICATION SNOWFLAKE;
-- 誤り例(動作しない)
CREATE PROCEDURE my_proc(...) ... EXECUTE AS CALLER ...; -- NG
10.4 SET_SPENDING_LIMIT の制約
-- 正の整数のみ有効
CALL budget!SET_SPENDING_LIMIT(100); -- OK
CALL budget!SET_SPENDING_LIMIT(0.5); -- NG: エラー
CALL budget!SET_SPENDING_LIMIT(0); -- NG: エラー
10.5 SI経由のAgent呼び出し時のコスト帰属
Snowflake Intelligence が内部で Cortex Agent を呼び出す場合、コストは Snowflake Intelligence 側に帰属します。
11. ベストプラクティス
11.1 Resource Budget と Shared Resource Budget の使い分け
| シナリオ | 推奨 |
|---|---|
| 単一チームが専用のAI機能を利用 | Resource Budget(シンプル) |
| 複数チームが同じAI機能を共有 | Shared Resource Budget(チーム別管理) |
| 部門×プロジェクトのクロス管理 | Shared Resource Budget(INTERSECTIONモード) |
| AI Function / Cortex Code の予算管理 | Shared Resource Budget(対応ドメインが広い) |
11.2 多層防御の閾値設定
50% PROJECTED → 早期警告(計画見直しの検討)
80% ACTUAL → 警告(利用状況の確認)
100% ACTUAL → 一般ユーザーのアクセス取消
100% PROJECTED → 予測警告
200% ACTUAL → 緊急シャットダウン(全ユーザー)
11.3 自動復旧の活用
月初めの SET_CYCLE_START_ACTION で自動復旧を設定することで:
- 運用負荷を軽減
- ユーザー体験の向上(月初から利用可能)
11.4 アラートログの活用
BUDGET_ALERTS テーブルを監視ダッシュボードと連携することで:
- Slack/Teams への通知
- メールアラート
- ダッシュボードでの可視化
12. まとめ
Resource Budgets for Cortex Agents と Snowflake Intelligence、そして Shared Resource Budget により、AI機能のコスト管理が大幅に強化されました。
主なメリット:
- タグベースの柔軟なスコープ設定 - 部門別、プロジェクト別の管理が可能
- 多段階の閾値設定 - ACTUAL と PROJECTED を組み合わせた多層防御
- 自動化されたアクセス制御 - 閾値到達時の自動対応
- サイクル単位の管理 - 月初めの自動リセット/復旧
- Shared Resource Budget - ユーザータグベースで複数チームが同じAI機能を独立管理
- 幅広いAIドメイン対応 - Cortex Agent, SI に加え AI Function, Cortex Code も予算管理可能
AI機能を本番環境で安心して活用するために、Resource Budgets の活用を強くお勧めします。
Discussion