概览
预算的典型行为是在预算提醒阈值规则触发电子邮件通知时发送提醒电子邮件。
但是,如果您使用预算作为费用控制工具,则电子邮件通知可能不是用于确保有效控制 Google Cloud 费用的最佳通知方法。除了电子邮件通知之外,您还可以使用程序化通知自动处理费用控制响应。费用控制响应示例包括:
- 通过自动停用结算或终止资源来限制 Google Cloud 支出上限。
- 将预算消息转发给其他媒介(例如 Slack)。
- 通过调整配额控制资源使用情况。
如需了解详情,请参阅自动执行费用控制响应示例。
执行此任务所需的权限
根据您是在 Cloud Billing 账号级层管理预算,还是属于一名没有任何 Cloud Billing 账号角色的项目所有者,您需要一组不同的权限,如以下部分所述。
如果您要在结算账号级层监控费用
如果您主要监控 Cloud Billing 账号的费用,则需要 Cloud Billing 账号级层的权限。
如果您对 Cloud Billing 账号的访问权限有限或没有访问权限,则可能拥有您所拥有的项目的足够权限。
如需为 Cloud Billing 账号创建或修改预算,您需要以下角色之一:
- Billing Account Costs Manager
- Cloud Billing 账号的 Billing Account Administrator。
如需设置或修改 Pub/Sub 主题,您需要具有包含 Pub/Sub 主题的目标项目的 Pub/Sub 管理员角色。
如果您的组织使用自定义角色进行身份验证,则您需要在自定义角色中拥有以下特定权限:
- 针对 Cloud Billing 账号的
billing.budgets.create
权限,用于创建新的预算。 - 针对 Cloud Billing 账号的
billing.budgets.get
和billing.budgets.list
权限,用于查看 Cloud Billing 账号的所有预算。 - 针对 Cloud Billing 账号的
billing.budgets.update
权限,用于修改现有预算。 - 针对包含要使用的 Pub/Sub 主题的目标项目的
pubsub.topics.setIamPolicy
和pubsub.topics.list
权限。
若要使自定义角色修改现有的 Cloud Billing 预算并将其关联到现有的 Pub/Sub 主题,您需要以下特定权限:
- 针对 Cloud Billing 账号的
billing.budgets.get
和billing.budgets.list
权限,用于查看 Cloud Billing 账号的所有预算。 - 针对 Cloud Billing 账号的
billing.budgets.update
权限,用于修改现有预算。 - 针对包含 Pub/Sub 主题的目标项目的
pubsub.topics.list
权限。
如果您要在项目级层监控费用
如果您对 Cloud Billing 账号的访问权限有限或没有访问权限,则可以管理范围限定为您拥有的项目的预算。
如需为项目创建、修改或查看预算,您需要项目的以下角色之一:
如需设置或修改 Pub/Sub 主题,您需要具有包含 Pub/Sub 主题的目标项目的 Pub/Sub 管理员角色。
如果您的组织使用自定义角色进行身份验证,则您需要在自定义角色中拥有以下特定权限:
- 针对项目的
resourcemanager.projects.get
权限,用于查看项目的项目关联(例如关联的结算账号)。 - 针对项目的
billing.resourceCosts.get
权限(可选),用于查看项目的费用和使用情况。 - 针对项目的
billing.resourcebudgets.read
权限,用于查看结算账号范围限定在项目的单项目预算。 - 针对项目的
billing.resourcebudgets.write
权限,用于创建或修改范围限定在项目的单项目预算。 - 对包含要使用的 Pub/Sub 主题的目标项目拥有
pubsub.topics.setIamPolicy
和pubsub.topics.list
权限。
与网域限制条件相关的权限
如果您将组织政策设置为按网域限制资源共享(例如,针对 Pub/Sub 主题启用 enforceInTransit
),则您在尝试设置 Pub/Sub 主题或将其关联到 Cloud Billing 预算时可能会遇到错误。
在这种情况下,您可能需要强制账号访问才能成功地将 Pub/Sub 主题关联到预算。如需强制访问账号,请执行以下操作:
使用以下方法之一移除包含网域限制条件的组织政策:
-
或
替换项目的组织政策,该项目包含 Pub/Sub 主题。
-
恢复组织或项目的组织政策(可选)。
Google Cloud 权限简介
如需详细了解 Cloud Billing 权限,请参阅以下内容:
- Cloud Billing 访问权限控制概览
- 为 Cloud Billing 创建自定义角色
- 了解 Cloud Billing 的预定义 Identity and Access Management 角色
如需详细了解 Google Cloud 项目权限,请参阅:
如何设置和启用 Pub/Sub 程序化通知
如需让程序化通知接收包含您预算的当前状态的 Pub/Sub 消息,请将 Pub/Sub 主题关联到您的 Cloud Billing 预算。
要关联、修改或移除与您的预算关联的 Pub/Sub 主题,请执行以下操作:
1. 创建 Pub/Sub 主题
为 Cloud Billing 配置 Pub/Sub 主题,以向该主题发布预算提醒。如果您已配置预算 Cloud Billing Pub/Sub 主题,则可以将其重复用于所有预算,或者您可以为每个预算创建唯一主题。
前往 Google Cloud 控制台 Pub/Sub 页面。
选择一个项目。
我们建议您创建并使用一个单独的 Google Cloud 项目,以包含您的 Cloud Billing 账号的所有 FinOps 和结算管理需求,包括与 Cloud Billing 相关的 Pub/Sub 主题。详细了解使用以 FinOps 为重点的项目来实现结算管理用例的好处。
点击
创建主题。在主题 ID 字段中,提供主题名称,然后点击创建主题。
2. 将 Cloud Billing 预算关联到 Pub/Sub 主题
要将 Cloud Billing 预算与 Pub/Sub 主题相关联,请执行以下操作:
按照适合 Cloud Billing 账号访问权限级别的过程,登录 Google Cloud 控制台“结算”部分中的预算和提醒页面:
拥有 Cloud Billing 账号权限的用户 仅具有项目级权限的用户(预览版) 如果您拥有 Cloud Billing 账号权限,则可以从您有权访问的结算账号列表中进行选择。
登录 Google Cloud 控制台中的预算和提醒页面。
打开“预算和提醒”- 在系统提示时,选择您要管理其预算的 Cloud Billing 账号。
此时会打开所选结算账号的“预算和提醒”页面。
如果您只有项目权限,但对项目的 Cloud Billing 账号没有任何权限,则需要先选择您的项目,然后再前往“结算”部分。
登录 Google Cloud 控制台信息中心并选择项目。
打开 Google Cloud 控制台- 选择要管理其预算的项目。
- 接下来,转到“结算”:打开 Google Cloud 控制台导航菜单 (
如果系统提示您选择要查看和管理的结算账号,请点击前往关联的结算账号以查看与所选项目关联的结算账号。
系统会打开所选结算账号的结算概览页面。
),然后选择结算。
- 在结算导航菜单的费用管理部分中,选择预算和提醒。
必要时,请创建预算。或者,如需修改现有预算和提醒规则,请点击预算名称。
在操作部分的管理通知下,选择将一个 Pub/Sub 主题关联到此预算。
在项目字段中,点击选择项目,然后选择包含您设置的 Pub/Sub 主题的项目。如果您遵循了上一部分中的建议,那么这是您的FinOps 或结算管理 Google Cloud 项目。
在选择 Pub/Sub 主题下,选择现有主题,或选择创建主题来创建新主题。
- 如需创建新主题,请在主题 ID 字段中提供主题名称,然后点击创建主题。
- 创建主题后,系统会选择该主题。
点击保存。
通知格式
发送到 Pub/Sub 主题的通知由以下两部分组成:
- 特性:描述事件的一组键值对。
- 数据:一个字符串,包含了描述预算提醒详细信息的 JSON 对象。
属性
特性是指 Cloud Billing 发送到 Pub/Sub 主题的所有通知中包含的键值对。无论通知载荷为何,通知始终包含下列键值对。
属性名称 | 示例 | 说明 |
---|---|---|
billingAccountId |
01D4EE-079462-DFD6EC
|
预算所属 Cloud Billing 账号的标识符。 |
budgetId |
de72f49d-779b-4945-a127-4d6ce8def0bb
|
Cloud Billing 账号中预算提醒的标识符。 |
schemaVersion |
1.0
|
通知架构版本。 |
数据
对于架构版本 1.x,预算提醒详细信息会以采用 base64 编码的 UTF-8 字符串的形式返回,该字符串包含具有以下属性的 JSON 对象:
数据 | 示例 | 说明 |
---|---|---|
budgetDisplayName
|
"My Personal Budget"
|
为预算指定的简明易懂的名称。 |
costAmount
|
140.321
|
所产生的费用金额。跟踪的费用类型取决于预算过滤条件和设置。 |
costIntervalStart
|
"2021-02-01T08:00:00Z"
|
预算提醒期限的开始时间。`costAmount` 包括从此时间开始的使用费用。这是预算时间段(月份、季度、年份或自定义日期范围)发生预算使用的第一天。 |
budgetAmount
|
152.557
|
预算中分配的金额。 |
budgetAmountType
|
"SPECIFIED_AMOUNT"
|
预算金额类型。可以是下列值之一:
|
alertThresholdExceeded
|
0.9
|
超出的最高实际费用提醒阈值配置。值是十进制数格式的百分比(例如 0.9 即 90%)。如果实际费用没有超过任何阈值,则此键不存在。 |
forecastThresholdExceeded
|
0.2
|
超出的预测费用最高提醒阈值。值是十进制数格式的百分比(例如 0.2 即 20%)。如果预测费用没有超过任何阈值,则此键不存在。 |
currencyCode
|
"USD"
|
预算提醒货币。所有费用和预算提醒金额均以此货币计算。 |
向 Pub/Sub 发送通知的送达保证
创建预算并将其关联到 Pub/Sub 主题后,您会收到如下程序化通知:
- 系统会每天向您的 Pub/Sub 主题多次发送预算通知,其中会包含您的当前预算状态。这与预算提醒电子邮件不同,后者仅在达到预算阈值时发送。
- 即使 Cloud Billing 账号没有用量,系统也会发送 Pub/Sub 通知。
- 您可能需要等几个小时才会收到第一则 Pub/Sub 通知。
- Pub/Sub 仅保证至少传送一次。您可能会多次收到消息,并且消息的到达顺序可能与发送顺序不一致。
如果由于 Pub/Sub 主题配置错误而导致传送失败,您将不会收到通知。
传送可能会因以下原因之一而失败: