管理 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」(應用程式設定)