管理 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 SKU

手动停用应用

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

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

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

以编程方式停用应用

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

与手动停用应用一样:

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

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

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

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

  2. 在 Cloud Functions 中,创建由 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==1.12.2
    3. 执行函数下,输入 limit_use_appengine

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

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

  3. 测试函数

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

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

转到 App Engine 信息中心

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

转到“应用设置”页面

更改或移除支出限额

较早的 App Engine 应用可以创建支出限额,以指定使用 App Engine 资源时可能需支付的大致金额上限。