Node.js ランタイム環境

は、

Node.js ランタイムは、ウェブサービスのコードとその依存関係をインストールしてサービスを実行するまでの役割を果たすソフトウェア スタックです。スタンダード環境の App Engine 用 Node.js ランタイムは app.yaml ファイル内で nodejs8 という名前で宣言されています。

runtime: nodejs8

Node.js バージョン

Node.js ランタイムの目的は、Node.js 8 の最新リリースとそれに対応する npm のリリースが使われるようにすることにあります。App Engine は自動アップデートで新しいマイナー リリースとパッチ リリースに対応しますが、メジャー バージョンには対応しません。たとえば、Node.js 8.9.4 のときにデプロイしたアプリケーションは、その後、自動アップデートでバージョン 8.10.0 になることはあっても、Node.js 10.x.x にアップデートされることはありません。

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

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

engines.node プロパティは省略可能ですが、指定する場合は、Node.js 8 と互換性がある値でなければなりません。次に例を示します。

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

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

依存関係

デプロイ時、このランタイムは npm install を使用して、package.json および package-lock.json ファイル内に定義されている依存関係をインストールします。このランタイムによるインストールは新規インストールなので、node_modules フォルダをアップロードする必要はありません。

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

アプリケーションの起動

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

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

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

パフォーマンスの観点から、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 ファイル内で指定されているランタイム。Node.js では、nodejs8 です。
GAE_SERVICE app.yaml ファイル内で指定されているサービス名。サービス名が指定されていない場合は、default に設定されます。
GAE_VERSION サービスの現在のバージョン ラベル。
GOOGLE_CLOUD_PROJECT アプリケーションに関連付けられている GCP プロジェクト ID。
NODE_ENV サービスがデプロイされたとき production に設定。
PORT HTTP リクエストを受信するポート。8080 に設定します。

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

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 スタンダード環境に関するドキュメント