App Engine の費用の管理

App Engine では、無料の割り当て枠を超えて使用されたリソースに対してのみ料金が発生します。無料の割り当て枠を超えると、アプリケーションが受信するトラフィック量に応じて費用が増加します。

App Engine アプリの費用を制限するには、次のいずれかの機能を使用します。

  • インスタンスの最大数を指定する
  • 予算アラートを作成する
  • アプリを手動で無効にする
  • アプリをプログラムで無効にする

インスタンスの最大数を指定する

App Engine のコストは通常、アプリが受信するトラフィックの量に応じて増加するため、App Engine で作成できるインスタンス数を制限することによって費用を制限できます。

最大インスタンス数を 1 に設定すると、インスタンス時間の使用量は通常、無料枠内に収まるように保持されます。ただし、最大数を少なく設定しすぎると、受信リクエストを適切に処理するのに十分なインスタンスがアプリに配置されない場合があります

インスタンスの最大数を指定するには、アプリの app.yaml ファイルの max_instances 設定を使用します。

予算アラートを作成する

予算アラートは、費用が指定したしきい値を超えた場合に通知を送信します。通知を受け取った場合は、max_instances 設定の値を下げるか、アプリを無効にすることで費用を制限できます。

予算アラートのご利用にあたっては、予算アラートの設定をご覧ください。

予算アラートの範囲を選択する

1 つ以上のプロジェクトにおけるすべての 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 functions を使用して、費用が指定したしきい値を超えた場合にアプリを自動的に無効にできます。

アプリを手動で無効にする場合は:

  • アプリのデータと構成はすべて保持されます。
  • アプリの実行を再開する準備ができた時点で、アプリを有効にできます。
  • アプリが無効にされている間、アプリへのリクエストは失敗します。
  • アプリが無効になっている間も、他の Google Cloud プロダクトの料金が発生する場合があります。

プログラムでアプリを無効にするには:

  1. Pub/Sub トピックに通知を送信する予算アラートを作成します。詳しくは、プログラムによる通知を管理するをご覧ください。

    App Engine から費用のみを対象とする予算アラートを作成するには、予算の [プロダクト] フィールドで [App Engine] を選択します。このアラートをトリガーできるリソースについては、予算アラートの作成をご覧ください。

  2. Cloud Run 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==2.131.0
    3. [実行する関数] に「limit_use_appengine」と入力します。

    4. [環境変数、ネットワーキング、タイムアウトなど] をクリックします。

    5. App Engine 管理者のロールを持つサービス アカウントを選択します。デフォルトでは、App Engine のデフォルト サービス アカウントにこのロールが付与されています。

  3. 関数をテストします

予算アラートがトリガーされると、Cloud 請求先アカウント内のユーザーにメールが送信され、関数がアプリの無効化を開始します。この処理が完了するまでに数分かかる場合があります。

関数が正常に実行されたことを確認するには、App Engine ダッシュボードを表示します。アプリが無効になっていることを示すメッセージが上部に表示されます。

App Engine ダッシュボードに移動

アプリによるリクエストの処理を再開する場合は、[アプリケーション設定] に移動し、[アプリケーションを有効にする] をクリックします。

[アプリケーション設定] に移動