Ruby ランタイム環境

Ruby ランタイムでは、サンドボックス環境で App Engine のアプリを実行できます。このドキュメントでは、コードに記述するヘッダーや App Engine にアプリケーションを正常にデプロイするために必要な情報など、Ruby ランタイム環境の詳細について説明します。

スタンダード環境の App Engine 用 Ruby ランタイムを、app.yaml ファイル内で次のように指定します。

runtime: rubyVERSION

ここで、VERSION は Ruby MAJOR MINOR バージョン番号です。たとえば 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

大部分のウェブ アプリケーションは、PumaUnicornThin など、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 の先頭には「region code~」が付きます。たとえば、ヨーロッパでデプロイされたアプリケーションの場合は「e~」となります。
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 APIs に認証させるための認証トークンを返します。

たとえば、プロジェクト ID を取得するには、リクエストを http://metadata.google.internal/computeMetadata/v1/project/project-id に送信します。