概览
预算的典型行为是在预算提醒阈值规则触发电子邮件通知时发送提醒电子邮件。

但是,如果您使用预算作为费用控制工具,则电子邮件通知可能不是用于确保有效控制 Google Cloud 费用的最佳通知方法。除了电子邮件通知之外,您还可以使用程序化通知来自动执行费用控制响应。费用控制响应示例包括:
- 通过自动停用结算或终止资源来限制 Google Cloud 支出上限。
- 将预算消息转发给其他媒介(例如 Slack)。
- 通过调整配额限制资源使用情况。
如需了解详情,请参阅自动执行费用控制响应示例。
执行此任务所需的权限
如需设置 Pub/Sub 主题并将其与 Cloud Billing 预算关联,您需要以下角色:
- 要为 Cloud Billing 帐号创建或修改预算,您需要 Cloud Billing 帐号的 Billing Account Administrator 角色。
要设置或修改 Pub/Sub 主题,您需要对包含 Pub/Sub 主题的目标项目拥有 Pub/Sub Editor 角色。
具体而言,您必须拥有以下权限:
- 对 Cloud Billing 帐号的
billing.budgets.create
权限,可创建新的预算。 - 对 Cloud Billing 帐号的
billing.budgets.get
和billing.budgets.list
权限,可查看 Cloud Billing 帐号的所有预算。 - 对 Cloud Billing 帐号的
billing.budgets.update
权限,可修改现有预算。 - 对包含 Pub/Sub 主题的目标项目拥有
roles/pubsub.editor
权限。
要修改现有 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 主题或将其关联到 Cloud Billing 预算时可能会遇到错误。
在这种情况下,您可能需要强制帐号访问才能成功地将 Pub/Sub 主题关联到预算。具体来说,要强制访问帐号,请执行以下操作:
使用以下方法之一移除包含网域限制条件的组织政策:
-
或
包含 Pub/Sub 主题的替换项目的组织政策。
-
恢复组织或项目的组织政策(可选)。
如需详细了解 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 Console Pub/Sub 页面。
选择一个项目。
点击
创建主题。在主题 ID 字段中,提供主题名称,然后点击创建主题。
2.将 Cloud Billing 预算关联到 Pub/Sub 主题
要将 Cloud Billing 预算与 Pub/Sub 主题相关联,请执行以下操作:
登录 Google Cloud Console。
打开控制台导航菜单
,然后选择结算。如果您有多个 Cloud Billing 帐号,请执行以下操作之一:
- 如需管理当前项目的 Cloud Billing,请选择转至关联的结算帐号。
- 如需查找其他 Cloud Billing 帐号,请选择管理结算帐号,然后选择要管理其预算的帐号。
在“结算”导航菜单中,选择预算和提醒。
必要时,请创建预算。或者,如需修改现有预算和提醒规则,请点击预算名称。
在操作部分的管理通知下,选择将一个 Pub/Sub 主题关联到此预算。
在项目字段中,点击选择项目,然后选择包含您设置的 Pub/Sub 主题的项目。如果您遵循了上一部分中的建议,那么这是您的结算管理 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
|
"2018-02-01T08:00:00Z"
|
预算提醒期限的开始时间。报告的费用包括从此时间开始的使用费用。目前,这是当月第一次发生预算使用的日期。 |
budgetAmount
|
152.557
|
预算中分配的金额。 |
budgetAmountType
|
"SPECIFIED_AMOUNT"
|
预算金额类型。此类型可以是“SPECIFIED_AMOUNT ”(固定金额)或“LAST_MONTH_COST ”(上个月的费用)。 |
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 主题配置错误而导致传送失败,您将不会收到通知。
传送可能会因以下原因之一而失败:
- Pub/Sub 主题已不存在。
- Cloud Billing 不再拥有发布到 Pub/Sub 主题的权限。
- 已超出通知配额。