Node.js 14 が一般提供になりました。

Node.js ランタイム環境

Node.js ランタイムは、ウェブサービスのコードとその依存関係をインストールしてサービスを実行する役割を果たすソフトウェア スタックです。

スタンダード環境の App Engine 用 Node.js ランタイムは、app.yaml ファイル内で次のように宣言されています。

Node.js 14

runtime: nodejs14

Node.js 12

runtime: nodejs12

Node.js 10

runtime: nodejs10

Node.js 8(非推奨)

runtime: nodejs8

Node.js バージョン

Node.js ランタイムは、Node.js 14、Node.js 12、Node.js 10、Node.js 8(非推奨)をサポートしています。ランタイムは、app.yaml ファイルで指定されているバージョンの最新の安定版を使用します。App Engine では、新しいパッチ バージョンとマイナー リリース バージョンには自動的に更新されますが、メジャー バージョンの更新は自動的には行われません。

たとえば、アプリケーションを Node.js 10.9.4 にデプロイすると、その後バージョン 10.10.0 に自動的に更新されますが、Node.js 12.x.x に自動的に更新されることはありません。

マイナー バージョンとパッチ バージョンは自動的に更新されるため、package.json ファイル内の engines.node プロパティではメジャー バージョンのみを指定できます。

Node.js 14

{
  "engines": {
    "node": "14.x.x"
  }
}

Node.js 12

{
  "engines": {
    "node": "12.x.x"
  }
}

Node.js 10

{
  "engines": {
    "node": "10.x.x"
  }
}

Node.js 8(非推奨)

{
  "engines": {
    "node": "8.x.x"
  }
}

engines.node プロパティは省略可能ですが、指定する場合は、app.yaml ファイルで指定された Node.js のバージョンと互換性がある値でなければなりません。次に例を示します。

Node.js 14

  • 14.x.x
  • ^14.0.0
  • ~14
  • >=6

Node.js 12

  • 12.x.x
  • ^12.0.0
  • ~12
  • >=6

Node.js 10

  • 10.x.x
  • ^10.0.0
  • ~10
  • >=6

Node.js 8(非推奨)

  • 8.x.x
  • ^8.0.0
  • ~8
  • >=6

package.json ファイル内で互換性のない Node.js バージョンを指定すると、デプロイが失敗し、エラー メッセージが表示されます。

依存関係

デプロイ中に、ランタイムは npm install コマンド(yarn.lock ファイルが存在する場合は yarn install コマンド)を使用して依存関係をインストールします。詳細については、依存関係の指定をご覧ください。このランタイムによるインストールは新規インストールであるため、node_modules フォルダをアップロードする必要はありません。

このランタイムには、ネイティブ拡張を必要とする Node.js パッケージをサポートするために、ImageMagickFFmpegChrome ヘッドレスなどのツールを使用可能にするシステム パッケージが組み込まれています。パッケージの一覧は、組み込みシステム パッケージをご覧ください。サポートが必要なパッケージがある場合は、Issue Tracker に問題を登録してください。

アプリケーションの起動

デフォルトでは、ランタイムは node server.js を実行してアプリケーションを起動します。package.json ファイルで start スクリプトを指定すると、ランタイムは代わりに指定された起動スクリプトを実行します。次に例を示します。

"scripts": {
  "start": "node app.js"
}

アプリで HTTP リクエストを受信するには、ホスト 0.0.0.0 と、PORT 環境変数で指定され、Node.js で process.env.PORT としてアクセスできるポートでリッスンするウェブサーバーを、start スクリプトで起動する必要があります。

アプリケーションの新しいインスタンスが作成されるたびにスクリプトが実行されるため、パフォーマンスの観点から start スクリプトは軽量にし、ビルドステップを除外する必要があります。

この動作は、app.yamlentrypoint フィールドでスクリプトを指定することによってオーバーライドできます。ランタイムは、node server.js または起動スクリプトを実行する代わりに、entrypoint で指定したコマンドを使用してアプリケーションを起動します。

環境変数

ランタイムは以下の環境変数を設定します。

環境変数 説明
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。
NODE_ENV サービスがデプロイされたとき production に設定。
PORT HTTP リクエストを受信するポート。

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

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

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

Express.js では、次の trust proxy 設定を使用します。

app.set('trust proxy', true);

ファイルシステム

このランタイムには完全なファイル システムが含まれています。このファイル システムの /tmp(App Engine インスタンスの RAM 内のデータを格納する仮想ディスク)以外の場所は読み取り専用です。

メタデータ サーバー

アプリケーションの各インスタンスは、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 に送信します。