Ruby 런타임 환경

Ruby 런타임을 사용하면 샌드박스 환경의 App Engine에서 앱을 실행할 수 있습니다. 이 문서에서는 코드에 제공되는 헤더 및 App Engine에 애플리케이션을 성공적으로 배포하기 위한 기타 정보를 비롯하여 Ruby 런타임 환경의 세부정보를 설명합니다.

app.yaml 파일의 표준 환경에서 App Engine용 Ruby 런타임을 지정합니다.

runtime: rubyVERSION

여기서 VERSION은 Ruby MAJORMINOR 버전 번호입니다. 예를 들어 최신 Ruby 버전인 Ruby 3.2를 사용하려면 32를 지정합니다.

지원되는 다른 Ruby 버전과 Ruby 버전의 해당 Ubuntu 버전은 런타임 지원 일정을 참조하세요.

Ruby 버전

Ruby 런타임은 app.yaml 파일에 지정된 최신 안정화 버전을 사용합니다. App Engine은 새로운 패치 출시 버전으로 자동 업데이트되지만 부 버전은 자동으로 업데이트되지 않습니다.

예를 들어 애플리케이션이 Ruby 2.6.0에 배포되고 이후 배포 시에 자동으로 버전 2.6.1로 업데이트될 수 있지만 자동으로 Ruby 2.7로 업데이트되지는 않습니다.

종속 항목

종속 항목 선언 및 관리에 대한 자세한 내용은 종속 항목 지정을 참조하세요.

애플리케이션 시작

런타임은 app.yaml에서 정의된 entrypoint를 사용하여 애플리케이션을 시작합니다. 이 진입점에서 환경 변수 PORT로 정의된 포트에서 HTTP 요청에 응답하는 프로세스를 시작할 것입니다. 예를 들면 다음과 같습니다.

entrypoint: bundle exec rails server -p $PORT

대부분의 웹 애플리케이션에서는 Puma, Unicorn, Thin과 같은 Rack 지원 웹 서버를 사용합니다.

서버를 애플리케이션의 Gemfile 구성 파일에 종속 항목으로 추가해야 합니다. 런타임은 진입점을 호출하기 전에 모든 종속 항목을 설치합니다.

source "https://rubygems.org"

gem "rack"
gem "puma"

Rails 애플리케이션에 puma를 사용하는 진입점의 예:

entrypoint: bundle exec rails server Puma -p $PORT

Rack 애플리케이션에 puma를 사용하는 진입점의 예:

entrypoint: bundle exec rackup -s Puma -p $PORT

Rack 서버 없이 요청을 처리할 수 있는 애플리케이션에서는 ruby 스크립트만 실행하면 됩니다.

entrypoint: bundle exec ruby app.rb

환경 변수

다음 환경 변수는 런타임에서 설정됩니다.

환경 변수 설명
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 헤더에서 제공됩니다. 이 정보가 필요한 애플리케이션은 프록시를 신뢰하도록 웹 프레임워크를 구성해야 합니다.

파일 시스템

런타임에는 읽기 전용 액세스 권한이 있는 다른 모든 디렉터리와 함께 쓰기 가능한 /tmp 디렉터리가 포함됩니다. /tmp에 쓰는 데 시스템 메모리가 사용됩니다. 자세한 내용은 TempDirTempFile 문서를 참조하세요.

메타데이터 서버

애플리케이션의 각 인스턴스는 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에 요청을 보냅니다.