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 Functions을 사용하여 자동으로 앱을 사용 중지할 수 있습니다.

앱을 수동으로 중지하면 다음이 발생합니다.

  • 앱의 모든 데이터 및 구성 설정은 변경되지 않습니다.
  • 앱을 다시 실행할 준비가 되면 사용할 수 있습니다.
  • 앱이 중지되면 앱에 대한 요청도 실패합니다.
  • 앱이 사용 중지 된 동안에도 다른 Google Cloud 제품에서 요금이 계속 부과될 수 있습니다.

프로그래매틱 방식으로 앱을 사용 중지하려면 다음 단계를 따르세요.

  1. Pub/Sub 주제로 알림을 보내는 예산 알림을 만듭니다. 자세한 내용은 프로그래매틱 방식으로 알림 관리를 참조하세요.

    App Engine의 비용에 대해서만 예산 알림을 만들려면 예산의 제품 필드에서 App Engine을 선택합니다. 이 알림을 트리거할 수 있는 리소스에 대한 자세한 내용은 예산 알림 만들기를 참조하세요.

  2. Cloud Functions에서 Pub/Sub 주제에 의해 트리거되는 함수를 만듭니다. 자세한 내용은 Cloud 함수 만들기를 참조하세요.

    함수를 만들 때 다음을 수행하세요.

    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.87.0
    3. 실행할 함수 아래에 limit_use_appengine을 입력합니다.

    4. 환경 변수, 네트워킹, 제한 시간 등을 클릭합니다.

    5. App Engine 관리자 역할을 가진 서비스 계정을 선택하세요. App Engine 기본 서비스 계정에는 기본적으로 이 역할이 있습니다.

  3. 함수를 테스트합니다.

예산 알림이 트리거되면 Cloud Billing 계정의 사용자에게 이메일이 전송되고 함수가 앱을 중지합니다. 이 과정을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

함수가 성공적으로 실행되었는지 확인하려면 App Engine 대시보드를 봅니다. 상단에 앱이 중지되었음을 알리는 메시지가 표시됩니다.

App Engine 대시보드로 이동

앱에서 계속 요청을 처리하게 하려면 애플리케이션 설정으로 이동하고 애플리케이션 사용 설정을 클릭합니다.

애플리케이션 설정으로 이동