Node.js ランタイム環境

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

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

Node.js 10

runtime: nodejs10

Node.js 8

runtime: nodejs8

Node.js バージョン

Node.js ランタイムは、Node.js の最新リリースとそれに対応する npm のリリースを使用します。App Engine ではデプロイ時に新しいマイナー リビジョンに自動的に更新されますが、メジャー バージョンの更新は自動的に行われません。

たとえば、Node.js 10.9.4 のときにデプロイしたアプリケーションは、その後、自動アップデートでバージョン 10.10.0 になることはあっても、Node.js 12.x.x に自動アップデートされることはありません。

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

Node.js 10

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

Node.js 8

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

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

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 ヘッドレスなどのツールを使用可能にするシステム パッケージが組み込まれています。パッケージの一覧は、組み込みシステム パッケージをご覧ください。サポートが必要なパッケージがある場合は、公開バグトラッカーに問題を登録してください。

アプリケーションの起動

このランタイムは、npm start を使用してアプリケーションを起動します。その際、package.json ファイルに指定されている start スクリプトが使用されます。次に例を示します。

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

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

パフォーマンスの観点から、start スクリプトを軽量化し、そこでビルドステップを行わないことが重要です。このスクリプトはアプリケーションの新しいインスタンスが作成されるたびに実行されるからです。

環境変数

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

環境変数 説明
GAE_APPLICATION App Engine アプリケーションの ID。
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 アプリケーションに関連付けられた GCP プロジェクトの 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 API に認証させるための認証トークンを返します。

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

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Node.js 用 App Engine スタンダード環境に関するドキュメント