Python 런타임은 웹 서비스의 코드와 종속 항목을 설치하고 App Engine 서비스를 실행하는 소프트웨어 스택입니다.
표준 환경에서 App Engine용 Python 런타임은 app.yaml
파일에서 선언됩니다.
runtime: pythonVERSION
여기서 VERSION은 Python MAJOR
및 MINOR
버전 번호입니다. 예를 들어 최신 Python 버전인 Python 3.12를 사용하려면 312
를 지정합니다.
지원되는 다른 Python 버전과 Python 버전의 해당 Ubuntu 버전은 런타임 지원 일정을 참조하세요.
Python 3 버전
Python 런타임은 app.yaml
파일에 지정된 최신 안정화 버전을 사용합니다.
App Engine은 새로운 패치 버전으로 자동 업데이트되지만 부 버전은 자동으로 업데이트되지 않습니다.
예를 들어 애플리케이션은 Python 3.7.0에 배포된 후 자동으로 Python 3.7.1로 업데이트될 수 있지만 다음 부 버전인 Python 3.8.0으로 자동 업데이트되지 않습니다.
직접 사용해 보기
Google Cloud를 처음 사용하는 경우 계정을 만들어 실제 시나리오에서 App Engine의 성능을 평가할 수 있습니다. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
App Engine 무료로 사용해 보기App Engine은 최신 Ubuntu Linux 배포판에서 gVisor로 보호되는 컨테이너에서 Python 앱을 실행합니다.
종속 항목
배포하는 동안 App Engine은 Python 패키지 관리자 pip
를 사용하여 프로젝트의 루트 디렉터리에 있는 requirements.txt
메타데이터 파일에 정의된 종속 항목을 설치합니다. App Engine이 새로 설치를 수행하기 때문에 종속 항목을 업로드하지 않아도 됩니다.
Pipfile
/Pipfile.lock
표준을 사용하는 종속 항목 사양은 현재 지원되지 않으며 프로젝트에 이러한 파일이 없어야 합니다.
애플리케이션 시작
런타임은 app.yaml
파일의 entrypoint
필드에 지정한 명령어를 실행하여 앱을 시작합니다. app.yaml
파일에서 Gunicorn 웹 서버 진입점을 구성한 경우 requirements.txt
파일에도 gunicorn
을 추가해야 합니다.
이 진입점은 PORT
환경 변수에 지정된 포트에서 수신 대기하는 웹 서버를 시작해야 합니다. 예를 들면 다음과 같습니다.
entrypoint: gunicorn -b :$PORT main:app
앱에서 사용하는 웹 프레임워크는 요청을 앱의 적절한 핸들러로 라우팅하는 역할을 합니다.
앱이 다음 요구사항을 충족하고 entrypoint
필드가 지정되지 않는 경우 App Engine이 gunicorn
웹 서버로 앱을 시작합니다.
앱 디렉터리의 루트에는
app
이라는 WSGI 호환 객체가 있는main.py
파일이 포함되어 있습니다.앱에는
Pipfile
이나Pipfile.lock
파일이 없습니다.
Python 3 런타임의 진입점을 지정하지 않으면 App Engine에서 기본 Gunicorn 웹 서버를 구성하고 시작합니다.
진입점 권장사항
app.yaml
에서 지정된 진입점을 실행하는 데 필요한 Python 모듈이requirements.txt
파일에 있는지 확인합니다.app.yaml
파일에서gunicorn
엔드포인트가 명시적으로 지정된 경우에만gunicorn
을requirements.txt
파일에 추가합니다.최상의 성능을 얻으려면 진입점은 가벼워야 합니다. 애플리케이션의 새 인스턴스가 생성될 때마다 실행되기 때문입니다.
진입점 필드를 사용하여 앱의 성능을 조정할 수 있습니다. 예를 들어
gunicorn
을 웹 서버로 사용하는 경우, 진입점 필드에서--workers
플래그를 사용하여 앱을 제공하는 작업자 수를 구성할 수 있습니다.지정한 작업자 수가 App Engine 앱의 인스턴스 클래스와 일치해야 합니다.
인스턴스 클래스 작업자 F1 2 F2 4 F4 8 F4_1G 8 B1 2 B2 4 B4 8 B4_1G 8 B8 8 이 지침은 작업자 수를 선택하는 출발지 역할을 합니다. 앱의 성능 특성에 따라 다른 작업자 수를 사용해야 할 수도 있습니다. 아래 예시는 앱 제공에 2개의
gunicorn
작업자를 사용하는 App Engine 배포를 보여줍니다.entrypoint: gunicorn -b :$PORT -w 2 main:app
$PORT
환경 변수로 지정된 포트에서 HTTP 요청을 리슨하고 응답하도록 웹 서버를 구성하는 것이 좋습니다. 기본 포트8080
을 사용하면 App Engine이 NGINX 레이어를 사용하여 HTTP 응답을 압축하는 것을 방지할 수 있습니다. 포트8080
을 사용하는 경우 포트8080
및 NGINX에 대한 경고가 앱 로그 파일에 표시됩니다.
기타 웹 프레임워크
Django 및 Flask 외에도 uwsgi
및 Tornado
와 같은 다른 웹 프레임워크를 App Engine과 함께 사용할 수 있습니다. 다음 예시에서는 uwsgi
를 App Engine과 함께 사용하는 방법을 보여줍니다.
환경 변수
다음 환경 변수는 런타임에서 설정됩니다.
환경 변수 | 설명 |
---|---|
GAE_APPLICATION
|
App Engine 애플리케이션 ID입니다. 이 ID는 유럽에 배포된 애플리케이션의 'e~'와 같이 'region code~'로 시작됩니다. |
GAE_DEPLOYMENT_ID |
현재 배포 ID입니다. |
GAE_ENV |
App Engine 환경입니다. standard 로 설정합니다. |
GAE_INSTANCE |
서비스가 현재 실행되고 있는 인스턴스 ID입니다. |
GAE_MEMORY_MB |
애플리케이션 프로세스에 제공되는 메모리 양(MB)입니다. |
GAE_RUNTIME |
app.yaml 파일에 지정된 런타임입니다. |
GAE_SERVICE |
app.yaml 파일에 지정된 서비스 이름입니다. 서비스 이름을 지정하지 않으면 default 로 설정됩니다. |
GAE_VERSION |
서비스의 현재 버전 라벨입니다. |
GOOGLE_CLOUD_PROJECT |
애플리케이션과 연결된 Google Cloud 프로젝트 ID입니다. |
PORT |
HTTP 요청을 수신하는 포트입니다. |
NODE_ENV (Node.js 런타임에서만 사용 가능) |
서비스가 배포되면 production 으로 설정하세요. |
app.yaml
파일에 추가 환경 변수를 정의할 수 있지만 NODE_ENV
외에는 위 값을 재정의할 수 없습니다.
HTTPS 및 전달 프록시
App Engine은 부하 분산기에서 HTTPS 연결을 종료하고 애플리케이션에 요청을 전달합니다. 일부 애플리케이션에서는 원본 요청 IP와 프로토콜을 확인해야 합니다. 사용자의 IP 주소는 표준 X-Forwarded-For
헤더에서 제공됩니다. 이 정보가 필요한 애플리케이션은 프록시를 신뢰하도록 웹 프레임워크를 구성해야 합니다.
파일 시스템
런타임은 전체 파일 시스템을 포함합니다. 파일 시스템은 App Engine 인스턴스의 RAM에 데이터를 저장하는 가상 디스크인 /tmp
위치를 제외하고 읽기 전용입니다.
메타데이터 서버
애플리케이션의 각 인스턴스는 App Engine 메타데이터 서버를 사용하여 인스턴스와 프로젝트에 대한 정보를 쿼리할 수 있습니다.
다음 엔드포인트를 통해 메타데이터 서버에 액세스할 수 있습니다.
http://metadata
http://metadata.google.internal
메타데이터 서버로 전송되는 요청에는 요청 헤더 Metadata-Flavor: Google
이 포함되어야 합니다. 이 헤더는 요청이 메타데이터 값을 검색하기 위해 전송되었음을 나타냅니다.
다음 표에는 특정 메타데이터에 대해 HTTP 요청을 수행할 수 있는 엔드포인트가 나열되어 있습니다.
메타데이터 엔드포인트 | 설명 |
---|---|
/computeMetadata/v1/project/numeric-project-id |
프로젝트에 할당된 프로젝트 번호입니다. |
/computeMetadata/v1/project/project-id |
프로젝트에 할당된 프로젝트 ID입니다. |
/computeMetadata/v1/instance/region |
인스턴스가 실행 중인 리전입니다. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
프로젝트에 할당된 기본 서비스 계정 이메일입니다. |
/computeMetadata/v1/instance/service-accounts/default/ |
프로젝트의 모든 기본 서비스 계정이 나열됩니다. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
기본 서비스 계정에 지원되는 모든 범위가 나열됩니다. |
/computeMetadata/v1/instance/service-accounts/default/token |
다른 Google Cloud API에 애플리케이션을 인증하기 위해 사용할 수 있는 인증 토큰을 반환합니다. |
예를 들어 프로젝트 ID를 검색하려면 http://metadata.google.internal/computeMetadata/v1/project/project-id
에 요청을 보냅니다.