设置自动发送包含 Cloud Billing 数据总结的聊天消息

在本教程中,您将 Cloud Billing 数据导出到 BigQuery,并创建 Cloud Functions 和 Cloud Scheduler 作业,以发送总结 Cloud Billing 数据的每日聊天消息。通过将所有费用导出到 BigQuery,您可以查询数据以汇总费用。此配置可帮助您深入了解 Google Cloud 用量的每日费用,您无需每天查询费用。

本文档适用于希望更深入了解 Google Cloud 支出的开发者和结算管理员。本文档假定您熟悉创建 Cloud Billing 帐号,并且已在使用 Hangouts Chat

下图展示了本教程中使用的 Google Cloud 组件。

架构图,展示数据如何从 Cloud Billing 流向 Hangouts Chat。

数据从 Cloud Billing 流向 BigQuery,在 Cloud Functions 和 BigQuery 之间流动,再流向 Hangouts Chat 网络钩子。Cloud Scheduler 会触发 Cloud Functions 函数。

目标

  • 实现将 Cloud Billing 数据导出到 BigQuery。
  • 创建 Cloud Functions 函数并发送包含查询结果的聊天消息。
  • 测试服务。
  • 创建 Cloud Scheduler 作业以每天调用 Cloud Functions 函数。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用量来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

  4. 在 Cloud Console 中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Cloud Console 的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Cloud SDK 的 Shell 环境,其中包括 gcloud 命令行工具以及已为当前项目设置的值。该会话可能需要几秒钟时间来完成初始化。

实现将 Cloud Billing 数据导出到 BigQuery

为了将 Cloud Billing 数据导出到 BigQuery,请在 BigQuery 中创建目标数据集表,然后配置 Cloud Billing 以将结算数据导出到该数据集。

在 BigQuery 中创建数据集

在本教程中,您将在应用所在的同一 Cloud 项目中创建数据集。

如果您在其他 Cloud 项目中已有数据集,则可以与您的服务帐号共享该数据集并跳转至下一部分。

  1. 在 Cloud Console 中,转到 BigQuery 页面。

    转到 BigQuery 页面

  2. 对于资源,点击您的 Cloud 项目名称。

  3. 如需在 BigQuery 中创建目标表以存储 Cloud Billing 数据,请点击创建数据集

  4. 数据集 ID 字段中,输入 billing_data

  5. 点击创建数据集

将 Cloud Billing 数据导出到 BigQuery

  1. 在 Cloud Console 中,转到结算页面。

    转到“结算”页面

  2. 选择您的 Cloud Billing 帐号。

  3. 点击帐单导出

  4. 点击修改设置

  5. 选择您为本教程创建的 Cloud 项目。

  6. 选择您之前创建的 billing_data 数据集。

  7. 点击保存

您的 Cloud Billing 帐号已配置为将数据导出到 BigQuery。导出过程最长可能需要 24 小时。

获取数据集表名称

  1. 在 Cloud Console 中,转到 BigQuery 页面。

    转到 BigQuery 页面

  2. 对于资源,点击您的 Cloud 项目名称。

  3. 如需展开,请点击 billing_data

  4. 点击导出过程创建的表的名称。名称以 gcp_billing_export_v1 开头。

  5. 点击查询表

  6. 保存数据集表名,您稍后将在本教程中使用该名称来自定义 index.php 文件。

SQL 语句的数据集表名称位于 FROM 关键字后面,格式为 project_name.dataset.table_name

  • project_name 表示 Cloud 项目的名称。
  • dataset 表示数据集的名称。
  • table_name 表示表的名称。

下面是一个数据集表名称示例:myproject.billing_data.gcp_billing_export_v1_000000_000000_000000

创建 Hangouts Chat 聊天室

  1. 转到 Hangouts Chat 应用
  2. 点击查找人员、聊天室或聊天机器人搜索框,然后点击创建聊天室
  3. 聊天室名称字段中,输入 GCP_Billing
  4. 点击创建
  5. 点击 GCP_Billing 聊天室菜单,然后选择配置网络钩子

    用于配置 GCP_Billing 聊天室的网络钩子的下拉菜单。

  6. 名称字段中,输入 gcp_billing_webhook

  7. 点击保存。记下网络钩子的网址,因为本教程后面的部分需要它。

创建 Cloud Functions 函数

  1. 在 Cloud Console 中,转到 Cloud Functions。

    转到 Cloud Functions

  2. 点击创建函数

  3. 名称字段中,输入 getBillingAlert

  4. 分配的内存下拉菜单中,选择 128 MiB

  5. 运行时下拉菜单中,选择 Python 3.7

  6. main.py 标签页中,粘贴以下代码:

    from google.cloud import bigquery
    from httplib2 import Http
    from json import dumps
    from datetime import datetime
    
    def run_rule(request):
        client = bigquery.Client()
        query_job = client.query("""
                SELECT sum(cost) as total_cost FROM
    `project_name.dataset.tablename`""")
    
        for row in query_job:
            tcost = row["total_cost"]
    
        url = 'hangout_room_url'
        now = datetime.now()
        msg_content = "GCP Cost: {}".format(tcost) + " [date]: " + now.strftime("%m/%d/%Y, %H:%M:%S")
        bot_message = {
            'text' : msg_content}
    
        message_headers = { 'Content-Type': 'application/json; charset=UTF-8'}
    
        http_obj = Http()
    
        response = http_obj.request(
            uri=url,
            method='POST',
            headers=message_headers,
            body=dumps(bot_message),
        )
    

    替换以下内容:

    • project_name:您的项目的名称。
    • dataset:您的数据集的名称。
    • tablename:您的表的名称。
    • hangout_room_url:您之前复制的网络钩子网址。
  7. requirements.txt 标签页中,粘贴以下代码:

    # Function dependencies, for example:
    # package>=version
    google-cloud-pubsub==0.34.0
    google-cloud-storage==1.13.1
    google-cloud-bigquery==1.8.1
    google-cloud-core==0.29.1
    pytz==2018.7
    
  8. 要执行的函数字段中,输入 run_rule

  9. 点击创建

  10. 点击 getBillingAlert 函数。

  11. 点击触发器标签页。

  12. 复制 Cloud Functions 函数网址。稍后使用此值计划 Cloud Functions 函数运行。

测试 Cloud Functions 函数

  1. 在 Cloud Console 中,转到 Cloud Functions。

    转到 Cloud Functions

  2. 对于 getBillingAlert Cloud Functions 函数,请点击操作

  3. 点击测试函数

  4. 点击测试函数

    系统会向您的 Hangouts Chat 聊天室发送一条包含 Cloud Billing 数据的消息。

设置 Cloud Scheduler

验证可以运行该函数后,您可以使用 Cloud Scheduler 按计划间隔运行该函数。

在本教程中,您将在每天上午 10 点运行该服务。Cloud Scheduler 使用 cron 格式的时间表。

  1. 在 Cloud Console 中,转到 Cloud Scheduler

    转到 Cloud Scheduler

  2. 点击创建作业

  3. 名称字段中,输入 Billing-BigQuery

  4. 说明字段中,输入 Send Hangout message with Billing summary

  5. 频率字段中,输入 0 10 * * *

  6. 选择您所在的时区。

  7. 对于目标,选择 HTTP

  8. 网址字段中,输入函数的网址端点。

  9. 服务字段留空。

  10. 点击创建

清理

为避免因本教程中使用的资源而导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

删除项目

若要避免产生费用,最简单的方法是删除您为本教程创建的 Cloud 项目。或者,您也可以删除各个资源。

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤