Ruby ランタイムでは、サンドボックス環境で App Engine のアプリを実行できます。このドキュメントでは、コードに記述するヘッダーや App Engine にアプリケーションを正常にデプロイするために必要な情報など、Ruby ランタイム環境の詳細について説明します。
スタンダード環境の App Engine 用 Ruby ランタイムを、app.yaml
ファイル内で次のように指定します。
runtime: rubyVERSION
ここで、VERSION は Ruby の MAJOR
と MINOR
のバージョン番号です。たとえば、最新バージョンの Ruby(Ruby 3.3)を使用するには、33
を指定します。
サポートされている他の 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 の先頭には「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
に書き込むとシステムメモリが消費されます。詳細については、TempDir
と TempFile
のドキュメントをご覧ください。
メタデータ サーバー
アプリケーションの各インスタンスは、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
に送信します。