使用 Cloud Functions 停止 Google 特定服务的云计费

Stop Google Cloud billing for specific services using Cloud Functions

我需要开发一个 Cloud Function 脚本来在成本激增的情况下停止对特定服务计费。

示例:想象一下 Pub/Sub,由于某种原因,成本很高。

我的 Cloud Function 必须检测到此事件(我已经知道该怎么做)并仅禁用此服务计费。

有办法吗?我看到了 I can disable API Service 。是否可以使用 Cloud Function 禁用 pub/sub API 服务?有代码示例吗?它会禁用此服务的计费吗?或者更好的方法是删除有问题的 pub/sub?

当您禁用 API 时,您可以删除 API 创建的所有资源,并且您还将禁用依赖于 [=] 的其他 API 29=] 你正在禁用。根据您提到的特定情况下您在项目中使用的产品,如果禁用 Pub/Sub API 您可能会禁用以下 APIs:

cloudbuild.googleapis.com
cloudfunctions.googleapis.com
containerregistry.googleapis.com
run.googleapis.com
...among others

如果您意识到禁用 API(以及因此所有其他相关的 API)可能对您的项目造成的风险和中断,如果您正在生产以下代码使用来自 Python 客户端库的服务使用 API 的 disable 方法将起作用将禁用数据流 API:

from googleapiclient import discovery
import google.auth

def hello_world(request):
    credentials, project_id = google.auth.default()
    name = 'projects/[PROJECT-NUMBER-NOT-ID]/services/dataflow.googleapis.com'
    body = {'disableDependentServices': True,}
    service = discovery.build('serviceusage', 'v1', credentials=credentials, cache_discovery=False)
    request = service.services().disable(name=name, body=body)
    try:
        response = request.execute()
    except Exception as e:
        print(e)
    return "API disabled"

通过检查您的 activity 日志,您应该会在触发 Cloud Function 后看到与以下类似的消息:

9:12 AM Completed: google.api.serviceusage.v1.ServiceUsage.DisableService [PROJECT-ID]@appspot.gserviceaccount.com has executed google.api.serviceusage.v1.ServiceUsage.DisableService on dataflow.googleapis.com
9:12 AM google.api.serviceusage.v1.ServiceUsage.DisableService [PROJECT-ID]@appspot.gserviceaccount.com has executed google.api.serviceusage.v1.ServiceUsage.DisableService on dataflow.googleapis.com

请注意,根据您使用的产品,这种禁用 API 的方法可能会停止与网络流量相关的所有计费,但一般情况下,如云中的存储定价 SQL 个实例仍将继续累积。

总的来说,我个人认为这不是最好的方法(因为禁用 APIs 可能会非常危险,如果你在生产中有一个应用程序,而其他 APIs 依赖于此API),我通常会考虑使用预算和预算警报(也使用 Cloud Functions 和 Pub/Sub 等其他服务来接收通知)。查找文档中有关预算和预算警报的所有相关部分 here and here