管理 App Engine 费用

使用 App Engine 时,您只需为超出免费配额的资源付费。超过免费配额后,您将根据应用收到的流量来支付费用。

您可以使用以下任意一种机制,来限制 App Engine 应用的费用:

  • 指定实例数上限
  • 创建预算提醒
  • 手动停用应用
  • 以编程方式停用应用

指定实例数上限

由于 App Engine 费用通常根据您的应用获得的流量而调节,因此您可以通过限制 App Engine 可以创建的实例数来限制费用。

如果将实例数上限设置为 1 个实例,那么您的实例小时使用量通常会保持在免费层级。不过,如果设置的上限过低,可能会导致您的应用没有足够的实例来充分处理传入的请求

如需指定实例数上限,请使用应用的 app.yaml 文件中的 max_instances 设置

创建预算提醒

预算提醒会在费用超出指定的阈值时发送通知。收到通知后,您可以通过降低 max_instances 设置的值或停用您的应用来限制费用。

如需启用预算提醒,请参阅设置预算提醒

选择预算提醒的范围

您可以为一个或多个项目中的所有 Google Cloud 服务的总费用创建预算提醒,也可以仅为 App Engine 费用创建提醒。

如要为 App Engine 中的费用创建预算提醒,请在预算提醒的产品字段中选择 App Engine。当所有 App Engine 资源的总费用超过您指定的金额时,将触发提醒,包括:

  • App Engine 标准环境中的实例小时数
  • App Engine 柔性环境中的实例小时数和 RAM
  • 捆绑的 App Engine 服务

如需查看可计费 App Engine 资源的完整列表,请参阅 App Engine SKU

手动停用应用

停用应用会使其暂时停止服务和产生与服务应用相关的结算费用。您应用的所有数据和配置设置都保持不变,并且在您准备重新开始运行应用时,可以启用它。

在应用停用期间,对您的应用发出的请求将失败。您可能会继续在其他 Google Cloud 产品中产生费用。例如,如果您的项目已超过 Cloud Storage 的免费配额,您将继续产生存储费用。

如需了解详情,请参阅停用应用

以编程方式停用应用

您可以使用预算提醒、Pub/Sub 和 Cloud Run 函数,在费用超过指定的阈值时自动停用应用。

与手动停用应用一样:

  • 应用的所有数据和配置设置都保持不变。
  • 当您准备重新开始运行应用时,可以启用该应用。
  • 在您的应用停用期间,向应用发出请求都将失败。
  • 在您的应用停用期间,您可能会继续产生来自其他 Google Cloud 产品的费用。

如要以编程方式停用应用,请执行以下操作:

  1. 创建向 Pub/Sub 主题发送通知的预算提醒。如需了解详情,请参阅管理程序化通知

    如需为来自 App Engine 的费用创建预算提醒,请在预算的产品字段中选择 App Engine。如需了解可触发此提醒的资源,请参阅创建预算提醒

  2. 在 Cloud Run 函数中,创建由 Pub/Sub 主题触发的函数。如需了解详情,请参阅创建 Cloud Functions 函数

    在创建函数时:

    1. 使用以下源代码:

      import base64
      import json
      import os
      
      from googleapiclient import discovery
      
      APP_NAME = os.getenv("GCP_PROJECT")
      
      
      def limit_use_appengine(data, context):
          pubsub_data = base64.b64decode(data["data"]).decode("utf-8")
          pubsub_json = json.loads(pubsub_data)
          cost_amount = pubsub_json["costAmount"]
          budget_amount = pubsub_json["budgetAmount"]
          if cost_amount <= budget_amount:
              print(f"No action necessary. (Current cost: {cost_amount})")
              return
      
          appengine = discovery.build("appengine", "v1", cache_discovery=False)
          apps = appengine.apps()
      
          # Get the target app's serving status
          target_app = apps.get(appsId=APP_NAME).execute()
          current_status = target_app["servingStatus"]
      
          # Disable target app, if necessary
          if current_status == "SERVING":
              print(f"Attempting to disable app {APP_NAME}...")
              body = {"servingStatus": "USER_DISABLED"}
              apps.patch(appsId=APP_NAME, updateMask="serving_status", body=body).execute()
      
      
    2. 将以下依赖项添加到函数的 requirements.txt 文件中:

      google-api-python-client==2.131.0
    3. 执行函数下,输入 limit_use_appengine

    4. 点击环境变量、网络、超时等

    5. 选择具有 App Engine Admin 角色的服务账号。默认情况下,App Engine 默认服务账号具有此角色。

  3. 测试函数

触发预算提醒后,系统会向您的 Cloud Billing 账号中的用户发送电子邮件,并且您的函数将停用您的应用。完成此过程可能需要几分钟的时间。

如需验证函数是否已成功运行,请查看 App Engine 信息中心。顶部附近会显示一条消息,表明您的应用已停用。

转到 App Engine 信息中心

如果您希望应用继续处理请求,请转到应用设置,然后点击启用应用

转到“应用设置”