app.yaml 구성 파일

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.

리전 ID에 대해 자세히 알아보세요.

app.yaml 파일에서 App Engine 앱의 설정을 구성할 수 있습니다. app.yaml 파일에는 앱의 코드, PHP 런타임, 진입 점에 대한 정보도 포함됩니다.

앱의 각 서비스에는 서비스 배포에 필요한 설명어 역할을 하는 고유 app.yaml 파일이 있습니다. 앱 내의 추가 서비스를 위해 app.yaml 파일을 만들고 배포하려면 먼저 default 서비스의 app.yaml 파일을 만들어야 합니다.

PHP 7 이상의 경우 app.yaml에 적어도 runtime 항목이 포함되어야 합니다. 간략한 개요는 런타임 설정 정의를 참조하세요.

디렉터리 구조

앱에서 여러 서비스 구조화에 대한 자세한 내용은 App Engine의 웹 서비스 구조화를 참조하세요.

다음은 PHP 7 이상 애플리케이션의 app.yaml 파일 예시입니다.

runtime: php81 # Replace with php74 to use PHP 7.4

handlers:
# Serve a directory as a static resource.
- url: /stylesheets
  static_dir: stylesheets

# Serve images as static resources.
- url: /(.+\.(gif|png|jpg))$
  static_files: \1
  upload: .+\.(gif|png|jpg)$

# Serve your app through a front controller at index.php or public/index.php.
- url: .*
  script: auto

이 예시에서 App Engine은 gif, png 또는jpg 확장명을 가진 파일을 정적 리소스로 처리합니다. 애플리케이션 코드는 구성된 파일을 런타임에 읽습니다.

구문

app.yaml 구문은 YAML 형식입니다.

YAML 형식은 주석을 지원합니다. 우물 정자(#)로 시작하는 줄은 무시됩니다.

# This is a comment.

URL 및 파일 경로 패턴은 대조 요소와 대조 클래스를 제외한 POSIX 확장 정규 표현식 구문을 사용합니다. 그룹화된 일치로의 역참조(예: \1)가 지원되며 Perl 확장명(\w \W \s \S \d \D)도 지원됩니다.

런타임 및 앱 요소

요소 설명
app_engine_apis

(선택사항) 2세대 런타임용 App Engine 기존 번들 서비스를 사용하려면 이 필드를 true로 설정합니다.

build_env_variables

(선택사항) 빌드팩을 지원하는 런타임을 사용하는 경우 app.yaml 파일에 빌드 환경 변수를 정의할 수 있습니다.

자세한 내용은 빌드 환경 변수 사용을 참조하세요.

default_expiration

선택사항. 애플리케이션의 모든 정적 파일 핸들러에 대한 전역 기본 캐시 기간을 설정합니다. 또한 특정 정적 파일 핸들러의 캐시 기간을 구성할 수 있습니다. 값은 공백으로 구분된 숫자와 단위 문자열입니다. 단위는 d(일), h(시간), m(분), s(초)일 수 있습니다. 예를 들어 "4d 5h"는 파일이 처음 요청된 후 4일 5시간으로 캐시 만료 시간을 설정합니다. 생략하면 프로덕션 서버가 만료 시간을 10분으로 설정합니다.

예를 들면 다음과 같습니다.
runtime: php81 # Replace with php74 to use PHP 7.4

default_expiration: "4d 5h"

handlers:
  # ...

자세한 내용은 캐시 만료를 참조하세요.

entrypoint

선택사항. 앱이 시작될 때 entrypoint 명령어를 실행하여 기본 시작 동작을 재정의합니다. 앱이 HTTP 요청을 수신하려면 entrypoint 요소에 포트 8080에서 리슨하는 웹 서버를 시작하는 명령어가 있어야 합니다. entrypoint를 지정하지 않으면 App Engine은 public/index.php 또는 index.php 파일의 프런트 컨트롤러를 통해 애플리케이션을 처리합니다.

env_variables

선택사항. 앱에 사용할 수 있도록 app.yaml 파일에서 환경 변수를 정의할 수 있습니다.

GAE로 시작하는 환경 변수는 시스템용으로 예약되어 있으며 app.yaml 파일에서 허용되지 않습니다.

예를 들면 다음과 같습니다.
env_variables:
  MY_VAR: "my value"
여기서 MY_VARmy value는 정의하려는 환경 변수의 이름과 값이며, 각 환경 변수 항목은 env_variables 요소 아래에 두 칸의 공백으로 들여쓰기됩니다. 값이 할당되지 않은 환경 변수에 기본값은 "None"입니다.

그런 다음 getenv() 또는 $_SERVER($_ENV아님)를 사용하여 이러한 변수 값을 검색할 수 있습니다. 다음 명령어는 환경 변수 MY_VAR 값을 동일하게 표시합니다.

echo getenv('MY_VAR');
또는
echo $_SERVER['MY_VAR'];

덮어쓸 수 없는 런타임 환경 변수 목록도 참조하세요.

error_handlers

선택사항이며 다양한 오류 유형에 따라 반환되는 커스텀 오류 페이지를 구성하기 위해 사용됩니다.

이 요소는 다음 요소를 포함할 수 있습니다.

error_code
선택사항. error_code는 다음 중 하나일 수 있습니다.
over_quota
앱이 리소스 할당량을 초과했음을 나타냅니다.
timeout
앱에서 응답하기 전 기한에 도달한 경우에 사용됩니다.

error_code는 선택사항입니다. 지정하지 않으면 제공된 파일이 앱의 기본 오류 응답이 됩니다.

file
각 파일 항목은 일반 오류 응답을 대신하여 제공해야 하는 정적 파일을 나타냅니다. 해당하는 error_code 요소 없이 file 요소를 지정한 경우, 정적 파일이 앱의 기본 오류 페이지가 됩니다. 커스텀 오류 데이터는 10KB 미만이어야 합니다.
예를 들면 다음과 같습니다.
error_handlers:
  - file: default_error.html

  - error_code: over_quota
    file: over_quota.html
handlers

선택사항. URL 패턴 목록과 URL 패턴 목록 처리 방법에 대한 설명입니다. App Engine은 애플리케이션 코드를 실행하거나 이미지, CSS 또는 자바스크립트와 같이 코드와 함께 업로드된 정적 파일을 제공하여 URL을 처리할 수 있습니다.

정적 handlers를 정의한 경우 다른 모든 애플리케이션 트래픽의 핸들러를 entrypoint로 라우팅하도록 정의해야 합니다. entrypoint로 라우팅하려면 앱에 public/index.php 또는 index.php 파일에 있는 경우 script 요소를 사용하거나 entrypoint 요소를 사용하여 프런트 컨트롤러에 대한 경로를 지정합니다.

예를 들면 다음과 같습니다.

url: .*
script: auto
        

핸들러 및 하위 요소 구문 참조

inbound_services

선택사항. 인바운드 요청을 수신하려면 먼저 애플리케이션에서 서비스를 사용 설정해야 합니다. app.yaml 파일에 inbound_services 섹션을 포함하여 PHP 7 이상 앱에 서비스를 사용 설정할 수 있습니다.

warmup
준비 요청을 사용 설정합니다. 준비 요청 구성을 참조하세요.
예를 들면 다음과 같습니다.
inbound_services:
  - mail
  - warmup
instance_class

선택사항. 이 서비스의 인스턴스 클래스입니다.

서비스의 확장에 따라 다음과 같은 값을 사용할 수 있습니다.

자동 확장
F1, F2, F4, F4_1G
기본값: F1

원하는 경우 automatic_scaling 요소를 사용하여 인스턴스의 최소 및 최대 수, 지연 시간, 동시 연결 수 등 자동 확장의 기본 설정을 변경할 수 있습니다.

참고: instance_classF2 이상으로 설정된 경우 max_concurrent_requests를 기본값인 10보다 높게 설정하여 인스턴스를 최적화할 수 있습니다. 최적의 값을 찾으려면 값을 점차적으로 늘리면서 애플리케이션 성능을 모니터링하세요.

기본 및 수동 확장
B1, B2, B4, B4_1G, B8
기본값: B2

기본 및 수동 인스턴스 클래스를 사용하려면 basic_scaling 요소 또는 manual_scaling 요소를 지정해야 합니다.

runtime

필수 항목입니다. 앱에서 사용되는 런타임 환경 이름입니다. 예를 들어 PHP 8.1을 지정하려면 다음을 사용하세요.

runtime: php81
service

서비스를 만들 경우 필수입니다. default 서비스의 경우에는 선택사항입니다. 각 서비스와 버전에는 이름이 있어야 합니다. 이름에는 숫자, 문자, 하이픈이 포함될 수 있습니다. VERSION-dot-SERVICE-dot-PROJECT_ID의 결합된 길이(VERSION는 버전 이름, SERVICE은 서비스 이름, PROJECT_ID는 프로젝트 ID)는 63자(영문)를 초과할 수 없으며 하이픈으로 시작하거나 끝날 수 없습니다. 각 서비스와 버전에 고유한 이름을 선택합니다. 서비스와 버전 간에 이름을 재사용하지 마세요.

예시:
service: service-name
service_account

선택사항. service_account 요소를 사용하면 사용자 관리 서비스 계정을 버전의 ID로 지정할 수 있습니다. 지정된 서비스 계정은 다른 Google Cloud 서비스에 액세스하고 작업을 실행할 때 사용됩니다.

예시:
service_account: [SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com
vpc_access_connector

선택사항. 서버리스 VPC 액세스 커넥터를 사용하도록 애플리케이션을 구성하여 애플리케이션이 VPC 네트워크의 내부 리소스에 요청을 보낼 수 있게 합니다. 자세한 내용은 VPC 네트워크에 연결을 참조하세요.

name
문자열 리터럴. 서버리스 VPC 액세스 커넥터의 정규화된 이름을 따옴표로 묶어 지정합니다.
"projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME"
egress_setting
(선택 사항) 기본값은 private-ranges-only입니다. egress_setting은 다음 중 하나일 수 있습니다.
private-ranges-only
기본값. 내부 IP 주소에 대한 요청은 서버리스 VPC 액세스 커넥터를 거쳐 연결된 VPC 네트워크로 전송됩니다. 외부 IP 주소에 대한 요청은 공개 인터넷으로 전송됩니다.
all-traffic
모든 요청은 서버리스 VPC 액세스 커넥터를 거쳐 연결된 VPC 네트워크로 전송됩니다.
예시
vpc_access_connector:
  name: "projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME"
  egress_setting: all-traffic

핸들러 요소

handlers 요소는 URL 패턴의 목록과 해당 목록 처리 방법에 대한 설명을 제공합니다. App Engine은 애플리케이션 코드를 실행하거나 이미지, CSS 또는 자바스크립트와 같은 코드와 함께 업로드된 정적 파일을 제공하여 URL을 처리할 수 있습니다.

패턴은 app.yaml 파일에 표시된 순서에 따라 위에서 아래로 평가됩니다. 패턴이 URL과 일치하는 첫 번째 매핑이 요청 처리를 위해 사용됩니다.

다음 표에는 스크립트, 정적 파일, 정적 디렉터리, 기타 설정의 동작을 제어하는 handlers 요소의 하위 요소가 나와 있습니다.

요소 설명
expiration 선택사항. 이 핸들러에서 제공된 정적 파일을 웹 프록시와 브라우저가 캐시해야 하는 기간입니다. 값은 공백으로 구분된 숫자와 단위 문자열입니다. 단위는 d(일), h(시간), m(분), s(초)일 수 있습니다. 예를 들어 "4d 5h"는 파일이 처음 요청된 후 4일 5시간으로 캐시 만료 시간을 설정합니다. 생략하면 애플리케이션의 default_expiration이 사용됩니다. 자세한 내용은 캐시 만료를 참조하세요.
http_headers

선택사항. 정적 파일 또는 디렉터리 핸들러의 응답에 HTTP 헤더를 설정할 수 있습니다. script 핸들러에서 HTTP 헤더를 설정해야 할 경우, 앱의 코드에서 대신 설정해야 합니다. 캐싱에 영향을 미치는 응답 헤더에 대한 자세한 내용은 정적 콘텐츠 캐싱을 참조하세요.

예를 들면 다음과 같습니다.
handlers:
- url: /images
  static_dir: static/images
  http_headers:
    X-Foo-Header: foo
    X-Bar-Header: bar value
    vary: Accept-Encoding
  # ...

CORS 지원

이 기능의 중요한 용도 하나는 다른 App Engine 앱에서 호스팅되는 파일 액세스와 같이 CORS(원본 간 리소스 공유) 지원입니다.

예를 들어 myassets.uc.r.appspot.com에서 호스팅되는 애셋에 액세스하는 게임 앱 mygame.uc.r.appspot.com이 있다고 가정합니다. 하지만 mygamemyassets에 자바스크립트 XMLHttpRequest를 시도하는 경우, myassets 핸들러가 http://mygame.uc.r.appspot.com 값을 포함하는 Access-Control-Allow-Origin: 응답 헤더를 반환하지 않으면 작업이 성공하지 않습니다.

정적 파일 핸들러가 필요한 응답 헤더 값을 반환하도록 만드는 방법은 다음과 같습니다.

handlers:
- url: /images
  static_dir: static/images
  http_headers:
    Access-Control-Allow-Origin: https://mygame.uc.r.appspot.com
  # ...

참고: 모든 사람이 애셋에 액세스하도록 허용하려면 https://mygame.uc.r.appspot.com 대신 와일드 카드 '*'를 사용할 수 있습니다.

mime_type

선택사항. 이 값을 지정하면 이 핸들러로 제공되는 모든 파일은 지정된 MIME 유형을 사용하여 제공됩니다. 지정하지 않으면 파일의 MIME 유형이 파일의 파일 이름 확장명에서 파생됩니다. 같은 파일이 여러 확장명으로 업로드되면 확장명은 업로드 수행 순서에 따라 달라질 수 있습니다.

사용 가능한 MIME 미디어 유형에 대한 자세한 내용은 IANA MIME 미디어 유형 웹사이트를 참조하세요.

redirect_http_response_code

선택사항. redirect_http_response_codesecure 설정과 함께 secure 설정이 구성된 방식에 따라 필요한 리디렉션 수행 시 반환되는 HTTP 응답 코드를 설정하는 데 사용됩니다. redirect_http_response_code 요소에 사용 가능한 값은 다음과 같습니다.

301
응답 코드를 영구적으로 이동했습니다.
302
응답 코드를 찾았습니다.
303
다른 응답 코드를 참조합니다.
307
임시 리디렉션 응답 코드입니다.
예를 들면 다음과 같습니다.
handlers:
- url: /youraccount/.*
  script: auto
  secure: always
  redirect_http_response_code: 301

사용자 요청이 리디렉션되면 HTTP 상태 코드는 redirect_http_response_code 매개변수 값으로 설정됩니다. 매개변수가 없으면 302가 반환됩니다.

script

선택사항. 특정 핸들러에 대한 요청이 앱을 타겟팅하도록 지정합니다. 모든 트래픽은 entrypoint 명령어를 통해 제공되므로 script 요소에 허용되는 유일한 값은 auto입니다. 정적 핸들러를 사용하려면 최소 한 개 이상 핸들러에 script: auto 줄이 포함되거나 entrypoint 요소를 정의하여 배포해야 합니다.

handlers:
- url: /images
  static_dir: static/images

- url: /.*
  script: myapp.php

secure 선택사항. 스크립트 핸들러와 정적 파일 핸들러를 포함한 모든 URL 핸들러는 secure 설정을 사용할 수 있습니다. secure 요소에서 사용할 수 있는 값은 다음과 같습니다.
optional
URL이 핸들러와 일치하는 HTTP와 HTTPS 요청 모두 리디렉션 없이 성공합니다. 애플리케이션은 요청을 조사하여 사용된 프로토콜을 확인하고 그에 따라 응답할 수 있습니다. 핸들러에 secure가 제공되지 않는 경우, 기본값이 됩니다.
never
HTTPS를 사용하며 이 핸들러와 일치하는 URL 요청은 HTTP에 해당하는 URL로 자동 리디렉션됩니다. 사용자의 HTTPS 요청이 HTTP 요청으로 리디렉션되는 경우, 요청에서 쿼리 매개변수가 삭제됩니다. 따라서 사용자가 보안 연결용으로 의도된 쿼리 데이터를 잘못해서 비보안 연결을 통해 제출하지 못하도록 방지합니다.
always
HTTPS를 사용하지 않으며 이 핸들러와 일치하는 URL 요청은 동일한 경로의 HTTPS URL로 자동 리디렉션됩니다. 쿼리 매개변수는 리디렉션을 위해 보존됩니다.
예를 들면 다음과 같습니다.
handlers:
- url: /youraccount/.*
  script: auto
  secure: always

REGION_ID.r.appspot.com 도메인을 사용하여 앱의 특정 버전을 타겟팅하려면 일반적으로 URL의 하위 도메인 구성요소를 구분하는 마침표를 '-dot-' 문자열로 바꿉니다. 예를 들면 다음과 같습니다.
https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

HTTPS가 있는 커스텀 도메인을 사용하려면 먼저 해당 도메인에 SSL 인증서를 활성화하고 구성해야 합니다.

Google 계정 로그인과 로그아웃은 애플리케이션의 URL 구성 방식과 관계없이 항상 보안 연결을 사용하여 수행됩니다.

static_dir

선택사항입니다. 애플리케이션 루트 디렉터리의 정적 파일을 포함하는 디렉터리의 경로입니다. 일치하는 url 패턴 끝 다음에 오는 모든 항목이 static_dir에 추가되어 요청된 파일에 대한 전체 경로를 구성합니다.

디렉터리의 mime_type 설정으로 재정의되지 않는 한 정적 디렉터리의 각 파일은 파일 이름 확장자에 해당하는 MIME 유형을 사용하여 제공됩니다. 제공된 디렉터리의 모든 파일은 정적 파일로 업로드되며 스크립트로 실행될 수 없습니다.

예를 들면 다음과 같습니다.
handlers:
# All URLs beginning with /stylesheets are treated as paths to
# static files in the stylesheets/ directory.
- url: /stylesheets
  static_dir: stylesheets
  # ...
static_files

선택사항입니다. 정적 파일 패턴 핸들러가 URL 패턴을 애플리케이션을 통해 업로드된 정적 파일의 경로와 연결합니다. URL 패턴 정규 표현식은 파일 경로 생성 시 사용할 정규 표현식 그룹을 정의할 수 있습니다. static_dir 대신 이 요소를 사용하면 전체 디렉터리를 매핑하지 않고도 디렉터리 구조의 특정 파일로 매핑할 수 있습니다.

예를 들면 다음과 같습니다.
handlers:
# All URLs ending in .gif .png or .jpg are treated as paths to
# static files in the static/ directory. The URL pattern is a
# regular expression, with a grouping that is inserted into the
# path to the file.
- url: /(.*\.(gif|png|jpg))$
  static_files: static/\1
  upload: static/.*\.(gif|png|jpg)$
  # ...

정적 파일은 애플리케이션 코드 파일과 동일할 수 없습니다.

upload

선택사항이며 이 핸들러에서 참조되는 모든 파일의 파일 경로와 일치하는 정규 표현식입니다. 이 정규 표현식이 필요한 이유는 핸들러가 제공된 urlstatic_files 패턴에 해당하는 애플리케이션 디렉터리 파일을 확인할 수 없기 때문입니다. 정적 파일은 애플리케이션 파일과 별개로 업로드되고 처리됩니다. 위 예시에 다음 upload 패턴을 사용할 수 있습니다. archives/(.*)/items/(.*)

url

handlers의 경우에는 필수 요소입니다. 정규 표현식으로 표현되는 URL 패턴입니다. 이 표현식은 스크립트의 파일 경로에서 정규 표현식 역참조를 통해 참조할 수 있는 그룹을 포함할 수 있습니다. 예를 들어 /profile/(.*)/(.*)는 URL /profile/edit/manager와 일치하고 editmanager를 첫 번째 및 두 번째 그룹으로 사용합니다.

다음 요소와 함께 사용되면 URL 패턴 동작이 일부 달라집니다.

static_dir
URL 프리픽스를 사용합니다. 정규 표현식 패턴이 static_dir 요소와 함께 사용되면 정규 표현식 패턴에 그룹이 포함될 수 없습니다. 이 프리픽스로 시작하는 모든 URL은 프리픽스 다음의 URL 부분을 파일 경로의 일부로 사용하여 이 핸들러에서 처리됩니다.
static_files
정적 파일 패턴 핸들러가 URL 패턴을 애플리케이션을 통해 업로드된 정적 파일 경로와 연결합니다. URL 패턴 정규 표현식은 파일 경로 생성 시 사용할 정규 표현식 그룹을 정의할 수 있습니다. static_dir 대신 이 요소를 사용하면 전체 디렉터리를 매핑하지 않고도 디렉터리 구조의 특정 파일로 매핑할 수 있습니다.

요소 확장

다음 표의 요소는 애플리케이션의 확장 방식을 구성합니다. App Engine 앱 확장 방식에 대한 자세한 내용은 확장 유형을 참조하세요.

요소 설명
automatic_scaling

선택사항. F1 이상의 인스턴스 클래스를 사용하는 애플리케이션에만 적용됩니다.

이 요소를 지정하면 인스턴스 수의 최소 및 최대 수준, 지연 시간, 서비스의 동시 연결 수 설정 등 자동 확장의 기본 설정을 변경할 수 있습니다.

이 요소는 다음 요소를 포함할 수 있습니다.

max_instances
선택사항. 0에서 2147483647 사이의 값을 지정합니다. 여기서 0을 지정하면 설정이 중지됩니다.

이 매개변수는 이 모듈 버전에 만들 수 있는 App Engine의 최대 인스턴스 수를 지정합니다. 이는 모듈 비용을 제한하는 데 유용합니다.

min_instances
(선택 사항) 이 모듈 버전에 대해 만들 수 있는 App Engine의 최소 인스턴스 수입니다. 이러한 인스턴스는 요청이 도착했을 때 트래픽을 처리하고 트래픽 처리를 위해 추가 인스턴스가 시작되었을 때도 계속 트래픽을 처리합니다.

0에서 1,000 사이의 값을 지정합니다. 매개변수를 값 0으로 설정하면 요청이 처리되지 않을 때 비용 절감을 위해 인스턴스를 0개로 조정할 수 있습니다. 트래픽을 수신 중인지 여부에 관계없이 인스턴스 수에 따라 비용이 청구됩니다.

max_idle_instances

선택사항. 이 버전에 App Engine이 유지해야 하는 최대 유휴 인스턴스 수입니다. 1~1,000 사이의 값을 지정합니다. 지정되지 않은 경우 기본값은 automatic입니다. 즉, App Engine에서 유휴 인스턴스 수를 관리합니다. 다음 사항에 유의하세요.

  • 최댓값이 높으면 부하 수준이 급상승 이후 정상으로 돌아갈 때 유휴 인스턴스 수가 보다 점진적으로 줄어듭니다. 이렇게 하면 요청 부하가 변동되더라도 애플리케이션이 성능을 안정적으로 유지할 수 있지만 높은 부하 기간 중에 유휴 인스턴스 수가 증가하므로 비용도 늘어납니다.
  • 최댓값이 낮으면 실행 비용이 낮아지지만 부하 수준의 변동 폭이 클 때 성능이 저하될 수 있습니다.

참고: 부하 급증 후 정상 수준으로 다시 조정될 때는 유휴 인스턴스 수가 사용자가 지정한 최댓값을 일시적으로 초과할 수 있습니다. 하지만 사용자가 지정한 최대 개수를 초과하는 인스턴스에 대해서는 비용이 청구되지 않습니다.

min_idle_instances

선택사항: 이 버전에 대해 실행 상태로 유지되고 트래픽을 처리할 수 있는 추가 인스턴스 수입니다.

App Engine은 target_cpu_utilizationtarget_throughput_utilization와 같은 확장 설정을 기반으로 현재 애플리케이션 트래픽을 처리하는 데 필요한 인스턴스 수를 계산합니다. min_idle_instances을 설정하면 이 계산된 숫자 외에 실행할 인스턴스 수가 지정됩니다. 예를 들어 App Engine에서 트래픽 처리를 위해 5개의 인스턴스가 필요하다고 계산하고 min_idle_instances가 2로 설정된 경우 App Engine은 7개의 인스턴스를 실행합니다(트래픽을 기준으로 계산된 5개와 min_idle_instances당 추가 2개를 합산).

트래픽 수신 여부에 관계없이 지정된 인스턴스 수에 따라 비용이 청구됩니다. 다음 사항에 유의하세요.

  • 최솟값이 낮으면 유휴 기간 중에 실행 비용을 낮출 수 있지만 갑작스러운 부하 증가에 대응하기 위해 즉시 사용할 수 있는 인스턴스 수가 부족할 수 있습니다.
  • 최솟값이 높으면 요청 부하가 급증하더라도 애플리케이션을 우선적으로 처리할 수 있습니다. App Engine은 들어오는 요청을 처리하도록 최소한의 인스턴스를 계속 실행합니다. 요청을 처리 중인지 여부에 관계없이 지정된 인스턴스 수에 따라 비용이 청구됩니다.

    유휴 인스턴스의 최소 개수를 설정하면, 대기 지연 시간이 애플리케이션 성능에 영향을 덜 줍니다.

target_cpu_utilization
선택사항. 0.5에서 0.95 사이의 값을 지정합니다. 기본값은 0.6입니다.

이 매개변수는 트래픽 처리를 위해 새 인스턴스가 시작되는 CPU 사용량 임계값을 지정합니다. 이렇게 하면 성능과 비용 간의 균형을 유지할 수 있습니다. 값을 낮추면 성능과 비용이 높아지고, 값을 높이면 성능이 낮아지지만 비용도 낮아집니다. 예를 들어 값이 0.7이면 CPU 사용량이 70%에 도달한 후 새 인스턴스가 시작됩니다.

target_throughput_utilization
선택사항. 0.5에서 0.95 사이의 값을 지정합니다. 기본값은 0.6입니다.

동시 요청으로 인해 새 인스턴스가 시작되는 경우를 지정하기 위해 max_concurrent_requests과 함께 사용됩니다. 동시 요청 수가 max_concurrent_requeststarget_throughput_utilization을 곱한 값에 도달하면 스케줄러는 새 인스턴스를 시작하려고 합니다.

max_concurrent_requests

선택사항. 스케줄러가 새 인스턴스를 만들기 전에 자동 확장 인스턴스가 허용할 수 있는 동시 요청 수입니다(기본값: 10, 최댓값: 1000).

동시 요청으로 인해 새 인스턴스가 시작되는 경우를 지정하기 위해 target_throughput_utilization과 함께 사용됩니다. 동시 요청 수가 max_concurrent_requeststarget_throughput_utilization을 곱한 값에 도달하면 스케줄러는 새 인스턴스를 시작하려고 합니다.

단일 스레딩이 필요하지 않으면 max_concurrent_requests를 10보다 작은 값으로 설정하지 않는 것이 좋습니다. 값이 10보다 작으면 threadsafe 앱에 필요한 것보다 더 많은 인스턴스가 생성될 수 있어 불필요한 비용이 발생할 수 있습니다.

이 설정이 너무 높으면 API 지연 시간이 늘어날 수 있습니다. 스케줄러는 실제 최대 요청 수에 도달하기 전에 새 인스턴스를 생성할 수 있습니다.

max_pending_latency

대기 지연 시간이 감소되도록 요청 처리를 위해 추가 인스턴스를 시작하기 전에 App Engine이 대기 큐에서 요청에 허용해야 하는 최대 대기 시간입니다. 이 임곗값에 도달하면 확장해야 하며, 그 결과 인스턴스 수가 증가합니다. 지정되지 않은 경우 기본값은 automatic입니다. 즉, 새 인스턴스 시작이 트리거되기 전에 요청이 최대 대기 요청 시간 제한인 10초 동안 대기 중인 큐에 남아 있을 수 있습니다.

최댓값이 낮으면 App Engine이 대기 중인 요청에 새 인스턴스를 더 빠르게 시작하므로 성능이 향상되지만 실행 비용도 높아집니다.

최댓값이 높으면 (대기 중인 요청이 있지만 이를 처리하기 위한 유휴 인스턴스가 없는 경우) 요청이 처리될 때까지 사용자가 더 오래 기다려야 할 수 있지만 애플리케이션 실행 비용이 낮아집니다.

min_pending_latency

App Engine이 요청을 처리할 수 있도록 새로운 인스턴스를 시작하기 전에 대기 큐에서 대기해야 하는 최소 시간을 지정하기 위해 설정할 수 있는 선택적 요소입니다. 값을 지정하면 실행 비용이 낮아지지만 요청 처리를 위해 사용자가 기다려야 하는 시간이 늘어납니다.

무료 앱의 기본값은 500ms이고, 유료 앱의 기본값은 0입니다.

이 요소는 max_pending_latency 요소와 함께 사용되어 App Engine이 새 인스턴스를 생성하는 시점을 결정합니다. 큐에서 대기 중인 요청이 다음과 같으면 다음이 수행됩니다.

  • 지정된 min_pending_latency보다 짧으면 App Engine은 새 인스턴스를 만들지 않습니다.
  • max_pending_latency보다 길면 App Engine은 새 인스턴스 만들기를 시도합니다.
  • min_pending_latencymax_pending_latency로 지정된 시간 사이이면 App Engine은 기존 인스턴스를 재사용하려고 시도합니다. max_pending_latency 이전에 요청을 처리할 수 있는 인스턴스가 없으면 App Engine은 새 인스턴스를 만듭니다.
예를 들면 다음과 같습니다.
automatic_scaling:
  target_cpu_utilization: 0.65
  min_instances: 5
  max_instances: 100
  min_pending_latency: 30ms
  max_pending_latency: automatic
  max_concurrent_requests: 50
basic_scaling

B1 이상의 인스턴스 클래스를 사용하는 애플리케이션은 이 요소 또는 manual_scaling을 지정해야 합니다.

이 요소는 인스턴스 클래스 B1 이상의 기본 확장을 사용 설정하며 다음 요소를 포함할 수 있습니다.

max_instances
필수사항. 이 서비스 버전에 대해 App Engine이 만들 수 있는 최대 인스턴스 수입니다. 이는 서비스 비용을 제한하는 데 유용합니다.
idle_timeout
선택사항. 마지막 요청을 받은 후 이 시간이 경과되면 인스턴스가 종료됩니다. 기본값은 5분입니다(5m).
예시
basic_scaling:
  max_instances: 11
  idle_timeout: 10m
manual_scaling

B1 이상의 인스턴스 클래스를 사용하는 애플리케이션은 이 요소 또는 basic_scaling을 지정해야 합니다.

이 요소는 인스턴스 클래스 B1 이상의 수동 확장을 사용 설정하며 다음 요소를 포함할 수 있습니다.

instances
시작 시 서비스에 할당할 인스턴스 수입니다.
예를 들면 다음과 같습니다.
manual_scaling:
  instances: 5