使用 Cloud Billing Budget API 設定支出上限預算

瞭解如何向 Cloud Billing Budget API 傳送幾項支出上限預算要求。

如需完整的方法清單,請參閱 REST API 參考文件。

事前準備

閱讀本指南之前,請先完成下列工作:

  1. 請參閱「Cloud Billing Budget API 總覽」。
  2. 請參閱「Cloud Billing Budget API 必要條件」。
  3. 執行設定步驟。

找出 Cloud Billing 帳戶 ID

每次呼叫 Cloud Billing Budget API 時,都需要 Cloud Billing 帳戶 ID。支出上限預算僅限第一方Google Cloud 客戶和 Cloud Billing 帳戶。經銷商帳單帳戶不適用。

  1. 前往 Google Cloud 控制台的「管理帳單帳戶」頁面。
  2. 在「Your billing accounts」(您的帳單帳戶) 分頁中,您會看到 Cloud Billing 帳戶清單,其中列有名稱和 ID。找出管理預算的帳戶帳戶 ID 值。

「管理帳單」頁面,顯示帳單帳戶 ID 的位置。

支出上限預算的重要概念和限制

支出上限預算會根據預估總費用觸發快訊並強制執行支出限制,封鎖用量和費用累計,直到支出上限解除為止。

支出上限預算欄位限制

如果預算設有 spendCap,則會套用嚴格的欄位限制。請參閱 Filters、BudgetAmount、ThresholdRule、NotificationsRule 和 OwnershipScope 的欄位層級註解。

  • billing-account-id:支出上限預算僅限第一方Google Cloud 客戶和 Cloud Billing 帳戶。經銷商帳單帳戶不在範圍內。
  • BudgetFilters 必須包含下列參數:

    • 支出上限預算僅限於範圍 (篩選條件) 為單一 Google Cloud 專案和單一 符合條件的服務。
    • 支出上限預算的預算週期日期範圍,僅限MONTH的CalendarPeriod。
    • 支出上限的費用計算方式是以總費用為準,不含節省金額和抵免額。您必須將 creditTypesTreatment 設為 EXCLUDE_ALL_CREDITS。
    • 支出上限不支援其他預算篩選條件,且必須留空,包括 resourceAncestors、credit_types、subaccounts 和 labels。
  • BudgetAmount 必須使用 specifiedAmount。輸入時,currencyCode 為選填。如果在建立預算時指定,貨幣代碼必須與 Cloud Billing 帳戶的貨幣相符。currencyCode 會在輸出內容中提供。

  • ThresholdRules 必須包含三個規則,thresholdPercent 值分別為 0.5、0.8 和 1.0 (50%、80% 和 100%),且 spendBasis 設為 CURRENT_SPEND 或 BASIS_UNSPECIFIED (支出上限不支援 FORECASTED_SPEND)。

  • NotificationsRule 必須將 enableProjectLevelRecipients 設為 true。不支援所有其他 NotificationsRule 參數。

  • OwnershipScope 必須設為 OWNERSHIP_SCOPE_UNSPECIFIED 或 ALL_USERS (支出上限不支援 BILLING_ACCOUNT)。

  • 建立支出上限預算時,inputState 參數必須設為 CONFIGURED。

支出上限預算如何協助您控管支出

  • 使用預估費用加快支出計算:為加快支出上限金額的強制執行速度,支出上限預算會使用預估總費用來觸發快訊並強制執行支出上限。預估費用是根據服務的定價計算,不含節省的金額和抵免額。

  • 觸發支出上限時,自動暫停使用並停止累計費用:在指定專案中,如果特定服務的預估總使用費用超出預算目標金額,就會觸發支出上限,並在預算週期的剩餘時間內強制執行。在預算中,outputState 參數設為 ENFORCED。支出上限生效時,適用下列規定:

    • 指定專案中特定服務的所有「新」用量都會暫停,包括隨選、即付即用用量,以及承諾使用折扣 (CUD) 等承諾使用合約涵蓋的用量。
    • 指定服務中任何執行中的要求都會處理完畢,並依適用情況收取費用。
    • 支出上限不會暫停與永久資源 (例如運算和儲存服務) 相關的任何持續固定用量,這些資源會保持啟用狀態並繼續產生費用。
    • 重要事項:在強制執行狀態下,您無法編輯支出上限預算的設定,也無法刪除預算。如要編輯或刪除已強制執行的預算,請先手動解除支出上限。
  • 解除強制執行的支出上限,恢復服務和支出:強制執行支出上限後,指定專案中的特定服務會遭到封鎖,直到解除支出上限為止。您可以透過下列方式解除支出上限:

    • 自動解除支出上限:強制執行的支出上限會在下一個預算週期開始時 (通常是下個月的第一天) 自動解除。支出上限自動解除後,預算的支出金額會重設為零,支出上限狀態會重設為 CONFIGURED,指定的服務也會解除封鎖,API 呼叫會恢復正常運作。

    • 手動解除支出上限:如要在強制執行支出上限的預算週期內,解除用量限制,可以編輯預算,手動解除支出上限。手動解除支出上限會產生下列結果:

      • 手動調高支出上限後,API 呼叫就會恢復正常運作。
      • 如果手動解除支出上限,將支出上限狀態設為 AWAITING_NEXT_PERIOD,則在預算週期的剩餘時間內,支出上限不會再次觸發,除非您隨後編輯預算,提高支出上限金額,並將 inputState 設為 CONFIGURED。

    解除支出上限後,服務最多可能需要一小時,才會完全恢復正常運作。

  • 自動重設支出上限預算:在下一個預算週期開始時 (通常是下個月的第一天),所有支出上限預算都會自動重設,將預估總支出金額設為零,並將支出上限狀態設為 CONFIGURED。

配額限制:每個 Cloud Billing 帳戶一次可連結數千個預算。如要瞭解目前的限制和更多資訊,請參閱「配額與限制」。

呼叫 API

下列範例說明如何向 Cloud Billing Budget API 傳送幾項要求,管理支出上限預算。

建立支出上限預算

這個 API 方法會建立 Cloud Billing 支出上限預算,並套用至單一專案和符合資格的服務。

REST

這個範例說明如何建立支出上限預算,用於特定專案中的 Gemini API 服務。預算 範圍 (篩選條件) 設為您指定的單一 Google Cloud 專案、單一 合格服務,以及 每月預算金額 $100 美元。

使用任何要求資料之前,請先修改下列項目的值:

  • projects/budget-scope-project-id:要設為預算範圍 (budgetFilter) 的 Google Cloud 專案 ID。
  • services/eligible-service_id:您要設為預算範圍 (budgetFilter) 的合格服務 ID 之一。在範例中,我們使用 Gemini API 服務的服務 ID AEFD-7695-64FA。
  • billing-account-id:這項預算適用的 Cloud Billing 帳戶 ID。支出上限預算僅限第一方 Google Cloud 客戶和 Cloud Billing 帳戶使用。經銷商帳單帳戶不在範圍內。
  • api-user-project-id:已啟用 Cloud Billing Budget API 的 Google Cloud 專案。

HTTP 方法和網址:

POST https://billingbudgets.googleapis.com/v1/billingAccounts/billing-account-id/budgets

JSON 要求主體:

{
  "displayName": "My Gemini API Spend Cap",
  "budgetFilter": {
    "projects": [
      "projects/budget-scope-project-id"
    ],
    "services": [
      "services/AEFD-7695-64FA"
    ],
    "creditTypesTreatment": "EXCLUDE_ALL_CREDITS",
    "calendarPeriod": "MONTH"
 },
 "amount": {
   "specifiedAmount": {
     "units": "100",
     "nanos": 0
   }
 },
 "thresholdRules": [
   { "thresholdPercent": 0.5 },
   { "thresholdPercent": 0.8 },
   { "thresholdPercent": 1.0 }
 ],
 "notificationsRule": {
   "enableProjectLevelRecipients": true
 },
 "spendCap": {
   "inputState": "CONFIGURED"
 }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "name": "billingAccounts/000000-111111-222222/budgets/33333333-4444-5555-6666-777777777777",
  "displayName": "My Gemini API Spend Cap",
  "budgetFilter": {
    "projects": [
      "projects/123456789"
    ],
    "services": [
      "services/AEFD-7695-64FA"
    ],
    "creditTypesTreatment": "EXCLUDE_ALL_CREDITS",
    "calendarPeriod": "MONTH"
  },
  "amount": {
    "specifiedAmount": {
       "currencyCode": "USD",
       "units": "100"
     }
  },
  "thresholdRules": [
    {
      "thresholdPercent": 0.5,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 0.8,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 1,
      "spendBasis": "CURRENT_SPEND"
    }
  ],
  "notificationsRule": {
    "enableProjectLevelRecipients": true
  },
  "etag": "1790365289674138",
  "spendCap": {
    "outputState": "CONFIGURED"
  }
}

使用 PATCH 暫停支出上限

使用 PATCH API 方法修改現有的 Cloud Billing 支出上限預算,手動解除強制執行的支出上限。

REST

這個範例說明如何更新 SpendCap.inputState 參數為 AWAITING_NEXT_PERIOD,手動解除現有預算的 ENFORCED 支出上限。

重要事項:如果 spend_cap.output_state 為 ENFORCED,您必須先傳送 UpdateBudget 要求修改 spend_cap.input_state,例如將 input_state 設為 AWAITING_NEXT_PERIOD,這樣才能解除支出上限。如果您在預算處於強制執行狀態時嘗試修改任何其他預算欄位,更新要求會失敗,並傳回 FAILED_PRECONDITION。

如要呼叫這個方法,您需要提供要更新的預算 budget-id。建立預算時,您可以從 createBudget 輸出內容取得預算 ID;如果列出所有預算,則可從 listBudgets 輸出內容取得預算 ID。

使用任何要求資料之前,請先修改下列項目的值:

  • billing-account-id:這項預算適用的 Cloud Billing 帳戶 ID。支出上限預算僅限第一方 Google Cloud 客戶和 Cloud Billing 帳戶使用。經銷商帳單帳戶不在範圍內。
  • budget-id:要更新的預算 ID。
  • api-user-project-id:已啟用 Cloud Billing Budget API 的 Google Cloud 專案。

HTTP 方法和網址:

PATCH https://billingbudgets.googleapis.com/v1/billingAccounts/billing-account-id/budgets/budget-id?updateMask=spendCap.inputState

JSON 要求主體:

{
  "spendCap": {
    "inputState": "AWAITING_NEXT_PERIOD"
 }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "name": "billingAccounts/000000-111111-222222/budgets/33333333-4444-5555-6666-777777777777",
  "displayName": "My Gemini API Spend Cap",
  "budgetFilter": {
    "projects": [
      "projects/123456789"
    ],
    "services": [
      "services/AEFD-7695-64FA"
    ],
    "creditTypesTreatment": "EXCLUDE_ALL_CREDITS",
    "calendarPeriod": "MONTH"
  },
  "amount": {
    "specifiedAmount": {
       "currencyCode": "USD",
       "units": "100"
     }
  },
  "thresholdRules": [
    {
      "thresholdPercent": 0.5,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 0.8,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 1,
      "spendBasis": "CURRENT_SPEND"
    }
  ],
  "notificationsRule": {
    "enableProjectLevelRecipients": true
  },
  "etag": "1790365289674138",
  "spendCap": {
    "outputState": "AWAITING_NEXT_PERIOD",
    "reconciling": true
  }
}

使用 PATCH 更新支出上限預算

使用這個 API 方法修改現有的 Cloud Billing 支出上限預算,變更預算金額和預算篩選器 (預算範圍)。

REST

這個範例說明如何更新現有的支出上限預算,以變更 預算金額。如果 支出上限狀態為 AWAITING_NEXT_PERIOD,這個範例也會示範如何將 SpendCap.inputState 參數更新為 CONFIGURED,重設已解除的支出上限。

如要呼叫這個方法,您需要提供要更新的預算 budget-id。建立預算時,您可以從 createBudget 輸出內容取得預算 ID;如果列出所有預算,則可從 listBudgets 輸出內容取得預算 ID。

使用任何要求資料之前,請先修改下列項目的值:

  • projects/budget-scope-project-id:要設為預算範圍 (budgetFilter) 的 Google Cloud 專案 ID。
  • services/eligible-service_id:您要設為預算範圍 (budgetFilter) 的合格服務 ID 之一。在範例中,我們使用 Gemini API 服務的服務 ID AEFD-7695-64FA。
  • billing-account-id:這項預算適用的 Cloud Billing 帳戶 ID。支出上限預算僅限第一方 Google Cloud 客戶和 Cloud Billing 帳戶使用。經銷商帳單帳戶不在範圍內。
  • budget-id:要更新的預算 ID。
  • api-user-project-id:已啟用 Cloud Billing Budget API 的 Google Cloud 專案。

HTTP 方法和網址:

PATCH https://billingbudgets.googleapis.com/v1/billingAccounts/billing-account-id/budgets/budget-id?updateMask=amount.specifiedAmount,spendCap.inputState

JSON 要求主體:

{
  "displayName": "My Gemini API Spend Cap",
  "budgetFilter": {
    "projects": [
      "projects/budget-scope-project-id"
    ],
    "services": [
      "services/AEFD-7695-64FA"
    ],
    "creditTypesTreatment": "EXCLUDE_ALL_CREDITS",
    "calendarPeriod": "MONTH"
 },
 "amount": {
   "specifiedAmount": {
     "units": "500",
     "nanos": 0
   }
 },
 "thresholdRules": [
   { "thresholdPercent": 0.5 },
   { "thresholdPercent": 0.8 },
   { "thresholdPercent": 1.0 }
 ],
 "notificationsRule": {
   "enableProjectLevelRecipients": true
 },
 "spendCap": {
   "inputState": "CONFIGURED"
 }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "name": "billingAccounts/000000-111111-222222/budgets/33333333-4444-5555-6666-777777777777",
  "displayName": "My Gemini API Spend Cap",
  "budgetFilter": {
    "projects": [
      "projects/123456789"
    ],
    "services": [
      "services/AEFD-7695-64FA"
    ],
    "creditTypesTreatment": "EXCLUDE_ALL_CREDITS",
    "calendarPeriod": "MONTH"
  },
  "amount": {
    "specifiedAmount": {
       "currencyCode": "USD",
       "units": "500"
     }
  },
  "thresholdRules": [
    {
      "thresholdPercent": 0.5,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 0.8,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 1,
      "spendBasis": "CURRENT_SPEND"
    }
  ],
  "notificationsRule": {
    "enableProjectLevelRecipients": true
  },
  "etag": "1790365289674138",
  "spendCap": {
    "outputState": "CONFIGURED"
  }
}

列出預算

這個 API 方法會列出特定 Cloud Billing 帳戶的所有可用預算。

REST

使用任何要求資料之前,請先修改下列項目的值:

  • billing-account-id:預算適用的 Cloud Billing 帳戶 ID。支出上限預算僅限第一方 Google Cloud 客戶和 Cloud Billing 帳戶使用。經銷商帳單帳戶不在範圍內。
  • project-id:已啟用 Cloud Billing Budget API 的 Google Cloud 專案。

HTTP 方法和網址:

GET https://billingbudgets.googleapis.com/v1/billingAccounts/billing-account-id/budgets

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "budgets": [
   {
      "name": "billingAccounts/000000-111111-222222/budgets/33333333-4444-5555-6666-777777777777",
      "displayName": "Gemini API Spend Cap in My Project",
      "budgetFilter": {
        "projects": [
          "projects/987654321"
        ],
        "services": [
          "services/AEFD-7695-64FA"
        ],
        "creditTypesTreatment": "EXCLUDE_ALL_CREDITS",
        "calendarPeriod": "MONTH"
      },
      "amount": {
        "specifiedAmount": {
          "currencyCode": "USD",
          "units": "500"
        }
      },
      "thresholdRules": [
        {
          "thresholdPercent": 0.5,
          "spendBasis": "CURRENT_SPEND"
        },
        {
          "thresholdPercent": 0.8,
          "spendBasis": "CURRENT_SPEND"
        },
        {
          "thresholdPercent": 1,
          "spendBasis": "CURRENT_SPEND"
        }
      ],
      "notificationsRule": {
        "enableProjectLevelRecipients": true
      },
      "allUpdatesRule": {},
      "etag": "17fc365289f74138c",
      "spendCap": {
        "outputState": "ENFORCED"
      }
    }
  ]
}

取得預算

這個 API 方法會取得特定預算的詳細資料。

REST

如要呼叫這個方法,您需要提供要更新的預算 budget-id。建立預算時,您可以從 createBudget 輸出內容取得預算 ID;如果列出所有預算,則可從 listBudgets 輸出內容取得預算 ID。

使用任何要求資料之前,請先修改下列項目的值:

  • billing-account-id:這項預算適用的 Cloud Billing 帳戶 ID。支出上限預算僅限第一方 Google Cloud 客戶和 Cloud Billing 帳戶使用。經銷商帳單帳戶不在範圍內。
  • budget-id:要取得的預算 ID。
  • project-id:已啟用 Cloud Billing Budget API 的 Google Cloud 專案。

HTTP 方法和網址:

GET https://billingbudgets.googleapis.com/v1/billingAccounts/billing-account-id/budgets/budget-id

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "name": "billingAccounts/000000-111111-222222/budgets/33333333-4444-5555-6666-777777777777",
  "displayName": "Cloud Run Spend Cap in My Project",
  "budgetFilter": {
    "projects": [
      "projects/987654321"
    ],
    "services": [
      "services/152E-C115-5142"
    ],
    "creditTypesTreatment": "EXCLUDE_ALL_CREDITS",
    "calendarPeriod": "MONTH"
  },
  "amount": {
    "specifiedAmount": {
       "currencyCode": "USD",
       "units": "450"
     }
  },
  "thresholdRules": [
    {
      "thresholdPercent": 0.5,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 0.8,
      "spendBasis": "CURRENT_SPEND"
    },
    {
      "thresholdPercent": 1,
      "spendBasis": "CURRENT_SPEND"
    }
  ],
  "notificationsRule": {
    "enableProjectLevelRecipients": true
  },
  "allUpdatesRule": {},
  "etag": "c9d6c011f6fa6b5c",
  "spendCap": {
    "outputState": "CONFIGURED"
  }
}

刪除預算

使用這個 API 方法刪除現有的 Cloud Billing 預算。

REST

如要呼叫這個方法,您需要提供要更新的預算 budget-id。建立預算時,您可以從 createBudget 輸出內容取得預算 ID;如果列出所有預算,則可從 listBudgets 輸出內容取得預算 ID。

使用任何要求資料之前,請先修改下列項目的值:

  • billing-account-id:這項預算適用的 Cloud Billing 帳戶 ID。
  • budget-id:要刪除的預算 ID。
  • project-id:已啟用 Cloud Billing Budget API 的 Google Cloud 專案。

HTTP 方法和網址:

DELETE https://billingbudgets.googleapis.com/v1/billingAccounts/billing-account-id/budgets/budget-id

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{}