管理 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 Function」一文。

    建立函式時,請執行下列操作:

    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 管理員角色的服務帳戶。 App Engine 預設服務帳戶預設具備這個角色。

  3. 測試函式

觸發預算快訊後,系統會傳送電子郵件給Cloud Billing 帳戶中的使用者,並開始停用應用程式。完成這項程序可能需要幾分鐘。

如要確認函式是否成功執行,請查看 App Engine 資訊主頁。畫面頂端附近會顯示訊息,指出應用程式已停用。

前往 App Engine 資訊主頁

如要讓應用程式繼續處理要求,請前往「Application settings」(應用程式設定),然後按一下「Enable application」(啟用應用程式)

前往「Application settings」(應用程式設定)