커스텀 런타임을 사용하면 지원되는 가변형 환경 언어의 대체 구현을 사용하거나 Google에서 제공하는 언어를 맞춤설정할 수 있습니다. 또한 들어오는 HTTP 요청을 처리할 수 있는 다른 언어로 코드를 작성할 수 있습니다(예시). 커스텀 런타임을 사용하면 가변형 환경은 확장, 모니터링, 부하 분산 인프라를 제공 및 관리하므로 개발자는 애플리케이션 빌드에 집중할 수 있습니다.
커스텀 런타임을 만들려면 다음을 수행해야 합니다.
- App Engine에대한 애플리케이션의 런타임 구성을 설명하는
app.yaml
파일을 제공합니다. - 런타임 환경을 내부적으로 구성하는
Dockerfile
을 추가합니다. - 코드가 일부 기본 규칙을 준수하는지 확인합니다.
app.yaml
파일 제공
app.yaml
구성 파일에는 적어도 다음 설정이 포함되어야 합니다.
runtime: custom
env: flex
앱에 설정할 수 있는 다른 항목에 대한 자세한 내용은 app.yaml로 앱 구성을 참조하세요.
Dockerfile 만들기
Docker 웹사이트에서 Dockerfile 만들기에 대한 종합 문서가 제공됩니다. 커스텀 런타임을 사용할 경우 자체 기본 이미지를 제공하거나 Google의 기본 이미지를 사용할 것인지 여부를 Dockerfile에 제공해야 합니다.
기본 이미지 지정
Dockerfile에서 첫 번째 명령어는 일반적으로 기본 이미지를 지정하는 FROM
명령어입니다.
기본 이미지는 컨테이너를 만들고 애플리케이션을 빌드하는 데 사용됩니다. 자체 기본 이미지를 작성하거나 DockerHub와 같은 Container Registry에서 기본 이미지를 선택할 수 있습니다.
Dockerfile 찾기
일반적으로 Dockerfile 이름은 항상 Dockerfile
이며 해당 app.yaml
파일과 같은 디렉터리에 저장됩니다. 하지만 경우에 따라 도구 환경의 요구 사항이 달라질 수 있습니다. 예를 들어 Maven, Gradle, Eclipse, IntelliJ 플러그인과 같은 Cloud SDK 기반 자바 도구는 Dockerfile
이 src/main/docker/Dockerfile
에 있고 app.yaml
파일이 src/main/appengine/app.yaml
에 있어야 합니다. 자세한 내용은 도구 환경 문서를 참조하세요.
코드 구조
이 섹션에서는 Google 제공 기본 이미지 또는 사용자의 고유한 기본 이미지 사용 여부에 관계없이 코드에서 구현되어야 하는 동작을 설명합니다.
포트 8080으로 수신 대기
App Engine 프런트 엔드는 들어오는 요청의 경로를 포트 8080의 적합한 모듈로 지정합니다. 애플리케이션 코드가 8080에서 수신 대기 중인지 확인해야 합니다.
수명 주기 이벤트 처리
가변형 환경은 주기적으로 애플리케이션의 특정 수명 주기 이벤트를 전송합니다.
애플리케이션 종료
인스턴스를 종료해야 하는 경우 새로 추가되는 요청은 다른 인스턴스(있는 경우)로 라우팅되고 현재 처리 중인 요청을 완료할 수 있는 시간이 제공됩니다. 인스턴스를 종료할 경우 일반적으로 가변형 환경은 앱 컨테이너에 STOP
(SIGTERM
) 신호를 전송합니다. 앱이 이 이벤트에 응답할 필요는 없지만 컨테이너가 종료되기 전에 이를 사용하여 필요한 정리 작업을 수행할 수 있습니다. 정상 조건에서 시스템은 앱이 중지할 때까지 최대 30초까지 기다린 후 인스턴스 종료 직후 KILL
(SIGKILL
) 신호를 전송합니다.
드물지만 중단으로 인해 App Engine에서 30초 종료 시간을 제공하지 못할 수 있습니다. 이는 인스턴스가 종료되기 전에 STOP
및 KILL
신호가 전송되지 않을 수 있음을 의미합니다. 이러한 문제를 처리하기 위해서는 안정적인 데이터 저장소가 아닌 메모리 내 캐시로 사용해서 인스턴스 상태를 주기적으로 검사해야 합니다.
상태 확인 요청
정기적인 상태 확인 요청을 통해 VM 인스턴스가 성공적으로 배포되었는지 확인하고 실행 중인 인스턴스가 정상 상태로 유지되는지 확인할 수 있습니다.
커스텀 런타임 빌드 후 배포
app.yaml
및 DOCKER
파일을 구성한 후 컨테이너 이미지를 빌드하고 App Engine에 배포할 수 있습니다.
또는 Artifact Registry에 저장된 커스텀 런타임의 사전 빌드된 컨테이너 이미지를 배포할 수 있습니다. 예를 들어 Cloud Build를 사용하여 이미지를 개별적으로 빌드한 후 해당 이미지를 Artifact Registry에 저장할 수 있습니다. 자세한 내용은 이미지 내보내기 및 가져오기를 참조하세요.
애플리케이션을 Google Cloud와 통합
커스텀 런타임에서 실행되는 애플리케이션은 Google Cloud 클라이언트 라이브러리를 사용하여 Google Cloud 서비스에 액세스할 수 있습니다. 커스텀 런타임의 애플리케이션은 표준 API를 통해 모든 타사 서비스도 사용할 수 있습니다.
Google Cloud 서비스로 인증
애플리케이션 기본 사용자 인증 정보는 Google API를 인증 및 호출하는 가장 간단한 방법입니다.
애플리케이션에서 Docker 이미지 컴파일을 위해 Cloud Build가 사용되는 경우 cloudbuild
네트워크가 애플리케이션 기본 사용자 인증 정보를 호스트하여 연관된 Google Cloud 서비스가 사용자 인증 정보를 자동으로 찾을 수 있게 합니다.
인증에 대한 자세한 내용은 Google에서 인증을 참조하세요.
로깅
App Engine에서 실행되는 애플리케이션에 요청이 전송되면 요청과 응답 세부정보가 자동으로 로깅되며, Google Cloud Console 로그 탐색기에서 이를 볼 수 있습니다.
애플리케이션은 요청 처리 시 stdout
및 stderr
에 고유한 로깅 메시지를 기록할 수도 있습니다. 이러한 파일은 자동으로 수집되며 로그 탐색기에서 볼 수 있습니다. 크기를 제한하기 위해 stdout
및 stderr
에 대한 최신 항목만 유지됩니다.
.log
또는 .json
으로 끝나는 파일을 사용하여 /var/log/app_engine/custom_logs
에 커스텀 로그를 작성할 수도 있습니다.
애플리케이션 컨테이너에 서드 파티 에이전트를 포함하는 경우 stdout
및 stderr
또는 커스텀 로그에 로깅하도록 에이전트를 구성해야 합니다.
그러면 이러한 에이전트로 인해 생성된 오류가 Cloud Logging에 표시됩니다.
앱의 요청 및 애플리케이션 로그는 Cloud Logging 에이전트에서 수집되며 최대 1GB 크기로 최대 90일 동안 보관됩니다. 로그를 장기간 저장하거나 1GB보다 큰 파일로 저장하려면 Cloud Storage로 로그를 내보내면 됩니다. 또한 추가 처리를 위해 로그를 BigQuery 및 Pub/Sub로 내보낼 수 있습니다.
다른 로그도 사용할 수 있습니다. 다음은 기본적으로 구성된 일부 로그를 보여줍니다.
로그 이름 | 페이로드 유형 | 목적 |
---|---|---|
crash.log |
텍스트 | 설정이 실패할 때 기록되는 정보입니다. 애플리케이션이 실행되지 않으면 이 로그를 확인합니다. |
monitoring.* |
텍스트 | Cloud Monitoring에 데이터를 게시하는 Docker 컨테이너의 정보입니다. |
shutdown.log |
텍스트 | 종료 시 기록되는 정보입니다. |
stdout |
텍스트 | 앱의 표준 출력입니다. |
stderr |
텍스트 | 컨테이너의 표준 오류입니다. |
syslog |
텍스트 | Docker 컨테이너 외부의 VM syslog입니다. |