Ruby 2.6 と 2.7 が一般提供になりました。

Ruby ランタイム環境

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

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

runtime: ruby27 # or another supported version

Ruby のバージョン

Ruby ランタイムは Ruby 2.5、Ruby 2.6、Ruby 2.7 をサポートし、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 アプリケーションに関連付けられた Cloud プロジェクト ID。
PORT HTTP リクエストを受信するポート。

app.yaml ファイル内で追加の環境変数を定義できますが、上記の値をオーバーライドすることはできません。

HTTPS プロキシと転送プロキシ

App Engine は、ロードバランサにおいて HTTPS 接続を終了し、リクエストをアプリケーションに転送します。アプリケーションによっては、元のリクエストの IP とプロトコルが何か確認する必要があります。ユーザーの IP アドレスは、標準の X-Forwarded-For ヘッダーで確認できます。この情報が必要なアプリケーションでは、プロキシを信頼するようにウェブ フレームワークを構成してください。

ファイルシステム

ランタイムは書き込み可能な /tmp ディレクトリを持ち、それ以外のディレクトリはすべて読み取り専用です。/tmp に書き込むとシステムメモリが消費されます。詳細については、TempDirTempFile のドキュメントをご覧ください。

メタデータ サーバー

アプリケーションの各インスタンスは、App Engine メタデータ サーバーを使用してインスタンスとプロジェクトに関する情報を照会できます。

次のエンドポイントを介してメタデータ サーバーにアクセスできます。

  • http://metadata
  • http://metadata.google.internal

次の表に、特定のメタデータを取得するための HTTP リクエストの各エンドポイントを示します。

メタデータ エンドポイント 説明
/computeMetadata/v1/project/numeric-project-id プロジェクトに割り当てられているプロジェクト番号。
/computeMetadata/v1/project/project-id プロジェクトに割り当てられているプロジェクト ID。
/computeMetadata/v1/instance/zone インスタンスが実行されているゾーン。
/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 に送信します。