

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Elastic Beanstalk Node.js プラットフォームを使用する
<a name="create_deploy_nodejs.container"></a>

このトピックでは、Elastic Beanstalk で Node.js アプリケーションを設定、ビルド、実行する方法について説明します。

AWS Elastic Beanstalk は、Node.js プログラミング言語のさまざまなバージョンの多数のプラットフォームブランチをサポートしています。完全なリストについては、「AWS Elastic Beanstalk プラットフォーム」ドキュメントの「[Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)」を参照してください。

Elastic Beanstalk には、Elastic Beanstalk 環境内の EC2 インスタンスで実行されるソフトウェアのカスタマイズに使用できる[設定オプション](command-options.md)が用意されています。アプリケーションに必要な[環境変数を設定](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)し、Amazon S3 に対してログのローテーションを有効にしたら、アプリケーションの出典で静的ファイルが含まれるフォルダを、プロキシサーバーによって提供されるパスにマッピングできます。

設定オプションは[実行中の環境の設定を変更するために](environment-configuration-methods-after.md) Elastic Beanstalk コンソールで利用できます。環境を終了したときにその設定が失われないようにするため、[保存済み設定](environment-configuration-savedconfig.md)を使用して設定を保存し、それを後で他の環境に適用することができます。

ソースコードの設定を保存する場合、[設定ファイル](ebextensions.md)を含めることができます。設定ファイルの設定は、環境を作成するたびに、またはアプリケーションをデプロイするたびに適用されます。設定ファイルを使用して、デプロイの間にパッケージをインストールしたり、スクリプトを実行したり、他のインスタンスのカスタマイズオペレーションを実行することもできます。

ソースバンドルに [`Package.json` ファイルを含めて](nodejs-platform-dependencies.md#nodejs-platform-packagejson)、デプロイ中にパッケージをインストールしたり、開始コマンドを指定したり、アプリケーションで使用する Node.js のバージョンを指定したりできます。依存関係のバージョンをロックダウンする [`npm-shrinkwrap.json` ファイル](nodejs-platform-shrinkwrap.md)を含めることができます。

Node.js プラットフォームには、静的なアセットを配信し、アプリケーションにトラフィックを転送して、レスポンスを圧縮するためのプロキシサーバーが含まれています。アドバンスト・シナリオでは、[デフォルトのプロキシ設定を拡張また上書き](nodejs-platform-proxy.md)できます。

アプリケーションをスタートするには、いくつかのオプションがあります。ソースバンドルに [Procfile](nodejs-configuration-procfile.md) を追加すると、アプリケーションをスタートするコマンドを指定できます。`Procfile` を指定しない場合、`package.json` ファイルを指定すると Elastic Beanstalk で `npm start` を実行します。そのいずれかを指定しない場合、Elastic Beanstalk では `app.js` または `server.js` をこの順序で探して、スクリプトを実行します。

Elastic Beanstalk コンソールで適用される設定は、設定ファイルに同じ設定があれば、それらの設定を上書きします。これにより、設定ファイルでデフォルト設定を定義し、コンソールでそのデフォルト設定を環境固有の設定で上書きできます。設定の優先順位の詳細と設定の他の変更方法については、「[設定オプション](command-options.md)」を参照してください。

Elastic Beanstalk Linux ベースのプラットフォームを拡張するさまざまな方法の詳細については、「[Elastic Beanstalk Linux プラットフォームの拡張](platforms-linux-extend.md)」を参照してください。

## Node.js 環境の設定
<a name="nodejs-platform-console"></a>

Node.js プラットフォーム設定を使用して、Amazon EC2 インスタンスの動作を微調整できます。Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境での Amazon EC2 インスタンスの設定を編集できます。

Elastic Beanstalk コンソールを使用して、Amazon S3 へのログローテーションを有効にでき、アプリケーションが環境から読むことができる変数を設定します。

**Elastic Beanstalk コンソールで Node.js 環境を設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

### コンテナオプション
<a name="nodejs-platform-console-settings"></a>

次のプラットフォーム固有のオプションを指定できます。
+ [**プロキシサーバー**] – 環境インスタンスで使用するプロキシサーバーです。デフォルトでは、NGINX が使用されます。

### ログオプション
<a name="nodejs-platform-console-logging"></a>

[**ログ Options**] セクションには、2 つの設定があります。
+ **インスタンスプロファイル** – アプリケーションに関連付けられた Amazon S3 バケットへのアクセス許可が付与されているインスタンスプロファイルを指定します。
+ **[Enable log file rotation to Amazon S3]** (Amazon S3 へのログファイルのローテーションの有効化) - アプリケーションの Amazon EC2 インスタンスのログファイルを、アプリケーションに関連付けられている Amazon S3 バケットにコピーするかどうかを指定します。

### 静的ファイル
<a name="nodejs-platform-console-staticfiles"></a>

パフォーマンスを向上させるために、**[Static files]** (静的ファイル) セクションを使用して、ウェブアプリケーション内のディレクトリセットから静的ファイル (HTML、イメージなど) を配信するようにプロキシサーバーを設定することができます。ディレクトリごとに、仮想パスをディレクトリマッピングに設定します。プロキシサーバーは、指定されたパスのファイルに対するリクエストを受け取ると、アプリケーションにリクエストをルーティングする代わりにファイルを直接　　処理します。

設定ファイルまたは、Elastic Beanstalk コンソールを使用した静的ファイルの設定の詳細については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

### 環境プロパティ
<a name="nodejs-platform-console-envprops"></a>

[**環境プロパティ**] セクションを使用して、アプリケーションを実行している Amazon EC2 インスタンスの環境設定を指定できます。これらの設定は、キーバリューのペアでアプリケーションに渡されます。

が実行されるNode.js環境内では AWS Elastic Beanstalk、 を実行して環境変数にアクセスできます`process.env.ENV_VARIABLE`。

```
var endpoint = process.env.API_ENDPOINT
```

Node.js プラットフォームでは、プロキシサーバーがトラフィックを渡すポートに PORT 環境変数を設定します。詳細については、「[プロキシサーバーを設定します](nodejs-platform-proxy.md)」を参照してください。

詳細については「[環境変数とその他のソフトウェアの設定](environments-cfg-softwaresettings.md)」を参照してください。

### Amazon Linux AMI (Amazon Linux 2 より前) の Node.js 環境の設定
<a name="nodejs-platform-console.alami"></a>

次のコンソールソフトウェア設定カテゴリは、Amazon Linux AMI プラットフォームバージョン (Amazon Linux 2 より前) を使用する Elastic Beanstalk Node.js 環境でのみサポートされます。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

#### コンテナオプション — Amazon Linux AMI (AL1)
<a name="nodejs-platform-console-settings"></a>

設定ページで、次のように指定します。
+ **[Proxy server]** (プロキシサーバー) – Node.js へのプロキシ接続に使用するウェブサーバーを指定します。デフォルトでは、NGINX が使用されます。**[none]** (なし) を選択した場合、静的なファイルマッピングは有効にならず、GZIP 圧縮は無効になります。
+ **[Node.js version]** — Node.js のバージョンを指定します。サポートされている Node.js バージョンのリストについては、「*AWS Elastic Beanstalk プラットフォーム*ガイド」の「[https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)」を参照してください。
+ **[GZIP compression]** － GZIP 圧縮を有効にするかどうかを指定します。デフォルトでは、GZIP 圧縮は有効になっています。
+ **[Node command]** (ノードコマンド) - Node.js アプリケーションのスタートに使用するコマンドを入力できます。空の文字列 (デフォルト) は、Elastic Beanstalk が `app.js`、`server.js`、`npm start` をこの順に使用していることを意味します。

## Node.js 設定の名前空間
<a name="nodejs-namespaces"></a>

[設定ファイル](ebextensions.md)を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクをパフォーマンスできます。設定オプションは、[プラットフォーム固有](command-options-specific.md)のものでも、Elastic Beanstalk サービス全体の[すべてのプラットフォーム](command-options-general.md)に適用できるものでもかまいません。設定オプションは、名前空間として整理されています。

`aws:elasticbeanstalk:environment:proxy` 名前空間を使用して、環境のインスタンスで使用するプロキシを選択できます。次の例では、Apache HTTPD プロキシサーバーを使用するように環境を設定します。

**Example .ebextensions/nodejs-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```

`aws:elasticbeanstalk:environment:proxy:staticfiles` 名前空間を使用して、静的ファイルを配信するようにプロキシを設定できます。詳細と例については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については「[設定オプション](command-options.md)」を参照してください。

## Amazon Linux AMI (Amazon Linux 2 より前) の Node.js プラットフォーム
<a name="nodejs.alami"></a>

Elastic Beanstalk Node.js 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションで具体的な設定と推奨事項を検討してください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### Node.js プラットフォーム固有の設定オプション — Amazon Linux AMI (AL1)
<a name="nodejs.alami.options"></a>

Elastic Beanstalk では、Amazon Linux AMI Node.js プラットフォームバージョンのプラットフォームに固有の設定オプションをいくつかサポートしています。アプリケーションの前に実行するプロキシサーバー、実行する Node.js の特定のバージョン、およびアプリケーションの実行に使用するコマンドを選択できます。

プロキシサーバーについては、NGINX または Apache プロキシサーバーを使用できます。`none` の値を `ProxyServer` オプションに設定できます。この設定では、Elastic Beanstalk は、プロキシサーバーの背後で実行されるのではなく、スタンドアロンとしてアプリケーションを実行します。環境でスタンドアロンアプリケーションを実行している場合は、NGINX でトラフィックを転送するポートをリッスンするようにコードを更新します。

```
var port = process.env.PORT || 8080;

app.listen(port, function() {
  console.log('Server running at http://127.0.0.1:%s', port);
});
```

### Node.js 言語バージョン — Amazon Linux AMI (AL1)
<a name="nodejs.alami.versions"></a>

サポートされている言語バージョンに関しては、Node.js Amazon Linux AMI プラットフォームは他の Elastic Beanstalk マネージド型プラットフォームとは異なります。これは、Node.js プラットフォームの各バージョンでサポートされている Node.js 言語バージョンが少ないためです。サポートされている Node.js バージョンのリストについては、「*AWS Elastic Beanstalk プラットフォーム*ガイド」の「[https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)」を参照してください。

プラットフォーム固有の設定オプションを使用して、言語バージョンを設定できます。手順については、「[Node.js 環境の設定](#nodejs-platform-console)」を参照してください。または、Elastic Beanstalk コンソールを使用し、プラットフォームバージョンの更新の一環として、環境で使用する Node.js のバージョンを更新します。

**注記**  
使用しているバージョンの Node.js に対する support がプラットフォームバージョンから削除された場合は、[プラットフォームの更新](using-features.platform.upgrade.md)に先立って、バージョニング設定を変更または削除する必要があります。これは、1 つ以上のバージョンの Node.js でセキュリティの脆弱性が検出された場合に発生することがあります  
この場合、設定した [NodeVersion](command-options-specific.md#command-options-nodejs) をサポートしない新しいバージョンのプラットフォームにアップグレードしようとすると、失敗します。新しい環境の作成を回避するには、古いプラットフォームバージョンと新しいプラットフォームバージョンの両方でsupport されている Node.js バージョンに *NodeVersion* 設定オプションを変更するか、[オプション設定を削除](environment-configuration-methods-after.md)してから、プラットフォームの更新をパフォーマンスします。

**Elastic Beanstalk コンソールで環境の Node.js バージョンを設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. 環境の概要ページの [**プラットフォーム**] で、[**変更**] を選択します。

1. **[Update platform version]** (プラットフォームのバージョンの更新) ダイアログボックスで、Node.js バージョンを選択します。  
![\[Elastic Beanstalk プラットフォームバージョン更新の確認\]](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/platform-nodejs-update-node-version.png)

1. **[保存]** を選択します。

### Node.js 設定の名前空間 — Amazon Linux AMI (AL1)
<a name="nodejs.alami.namespaces"></a>

Node.js Amazon Linux AMI プラットフォームでは、名前空間 (`aws:elasticbeanstalk:container:nodejs:staticfiles` および `aws:elasticbeanstalk:container:nodejs`) の追加のオプションを定義します。

次の設定ファイルは、Elastic Beanstalk がアプリケーションの実行に `npm start` を使用するよう指示します。また、プロキシタイプを Apache に設定し、圧縮を有効にします。最後に、2 つのソースディレクトリから静的ファイルを提供するようにプロキシを設定します。1 つのソースは、`statichtml` ソースディレクトリからのウェブサイトのルート下の `html` パスにある HTML  ファイルです。もう 1 つのソースは、`staticimages` ソースディレクトリからのウェブサイトのルートの下の `images` パスにあるイメージファイルです。

**Example .ebextensions/ノード-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:nodejs: 
    NodeCommand: "npm start"
    ProxyServer: apache
    GzipCompression: true
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    /html: statichtml
    /images: staticimages
```

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については「[設定オプション](command-options.md)」を参照してください。

# Elastic Beanstalk での Procfile を使用したカスタムスタートコマンドの設定
<a name="nodejs-configuration-procfile"></a>

アプリケーションを起動するコマンドを指定するには、ソースバンドルのルートに `Procfile` というファイルを含めます。

**Example Procfile**  

```
web: node index.js
```

`Procfile` の使用方法については、「[ビルドファイルと Procfile](platforms-linux-extend.build-proc.md)」を参照してください。

**注記**  
この機能により、`aws:elasticbeanstalk:container:nodejs` 名前空間にあるレガシーオプション `NodeCommand` が置き換えられます。

# Elastic Beanstalk でのアプリケーションの依存関係の設定
<a name="nodejs-platform-dependencies"></a>

アプリケーションには、`require()` ステートメントで指定したモジュールなど、いくつかの Node.js モジュールに対する依存関係がある可能性があります。これらのモジュールは `node_modules` ディレクトリに保存されます。アプリケーションが実行されると、Node.js でこのディレクトリからモジュールを読み込みます。詳細については、Node.js ドキュメントの「[node\$1modules フォルダからの読み込み](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)」を参照してください。

これらのモジュールの依存関係は、`package.json` ファイルを使用して指定できます。Elastic Beanstalk がこのファイルを検出し、`node_modules` ディレクトリが存在しない場合、Elastic Beanstalk は *webapp* ユーザーとして `npm install` を実行します。この `npm install` コマンドでは、Elastic Beanstalk であらかじめ作成した `node_modules` ディレクトリに依存関係をインストールします。この `npm install` コマンドでは、パブリック npm レジストリまたは他のロケーションから `package.json` ファイルにリストされているパッケージにアクセスします。詳細については、[npm ドキュメント](https://docs.npmjs.com/about-the-public-npm-registry)のウェブサイトを参照してください。

Elastic Beanstalk で `node_modules` ディレクトリを検出した場合、`package.json` ファイルが存在していても Elastic Beanstalk で `npm install` を実行することはありません。Elastic Beanstalk では、依存関係パッケージは `node_modules` ディレクトリ内において Node.js でアクセスして読み込めることを前提としています。

次のセクションでは、アプリケーションにおける Node.js モジュールの依存関係の確立に関する詳細を確認できます。

**注記**  
Elastic Beanstalk で `npm install` の実行中にデプロイに関する問題が発生した場合は、別のアプローチを検討してください。アプリケーションソースバンドルに、依存関係モジュールを有する `node_modules` ディレクトリを含めます。そうすることで、問題を調査している間に、パブリック npm レジストリからの依存関係のインストールに伴う問題を回避できます。依存関係モジュールはローカルディレクトリから供給されるため、これを行うとデプロイ時間を短縮できる可能性もあります。詳細については、[node\$1modules ディレクトリに Node.js の依存関係を含める](#nodejs-platform-nodemodules)を参照してください。

## package.json ファイルを使用した Node.js の依存関係の指定
<a name="nodejs-platform-packagejson"></a>

プロジェクトの出典のルートに `package.json` ファイルを含めることにより、依存関係パッケージを指定し、スタートコマンドを指定します。`package.json` ファイルが存在し、プロジェクトソースのルートに `node_modules` ディレクトリが存在しない場合、Elastic Beanstalk は *webapp* ユーザーとして `npm install` を実行し、パブリック npm レジストリから依存関係をインストールします。また、Elastic Beanstalk で `start` コマンドを使用してアプリケーションを開始します。`package.json` ファイルの詳細については、「*npm ドキュメント*のウェブサイト」で「[`package.json` ファイルでの依存関係の指定](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file)」を参照してください。

`scripts` キーワードを使用して、スタートコマンドを指定します。現在は、`aws:elasticbeanstalk:container:nodejs` 名前空間の古い `NodeCommand` オプションの代わりに `scripts` キーワードが使用されています。

**Example package.json – Express**  

```
{
    "name": "my-app",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
      "ejs": "latest",
      "aws-sdk": "latest",
      "express": "latest",
      "body-parser": "latest"
    },
    "scripts": {
      "start": "node app.js"
    }
  }
```

**本番モードと開発の依存関係**  
`package.json` ファイル内で依存関係を指定するには、*dependencies* 属性と *devDependencies* 属性を使用します。*dependencies* 属性は、本番環境のアプリケーションに必要なパッケージを指定します。*devDependencies* 属性は、ローカルの開発とテストにのみ必要なパッケージを指定します。

*devDependencies* パッケージをインストールする必要がある場合は、NPM\$1USE\$1PRODUCTION 環境プロパティを `false` に設定します。この設定では、npm install の実行時に上記のオプションを使用しません。これにより、*devDependencies* パッケージがインストールされます。

## node\$1modules ディレクトリに Node.js の依存関係を含める
<a name="nodejs-platform-nodemodules"></a>

アプリケーションコードとともに依存関係パッケージを環境インスタンスにデプロイするには、プロジェクトソースのルートにある `node_modules` という名前のディレクトリにそれらを含めます。詳細については、「*npm ドキュメント*のウェブサイト」で「[パッケージをローカルでダウンロードしてインストールする](https://docs.npmjs.com/downloading-and-installing-packages-locally)」を参照してください。

`node_modules` ディレクトリを AL2023/AL2 Node.js プラットフォームバージョンにデプロイすると、Elastic Beanstalk では独自の依存関係パッケージが提供されていると見なして、[package.json](#nodejs-platform-packagejson) ファイルで指定された依存関係をインストールしないようにします。Node.js では `node_modules` ディレクトリで依存関係を探します。詳細については、Node.js ドキュメントの「[node\$1modules フォルダからの読み込み](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)」を参照してください。

**注記**  
Elastic Beanstalk で `npm install` の実行中にデプロイに関する問題が発生した場合は、問題を調査している間の回避策として、このトピックで説明されているアプローチを使用することを検討してください。  
 

### Amazon Linux 2 での Node.js に関する考慮事項
<a name="nodejs-al2-considerations"></a>

*Amazon Linux 2* で実行されている *Node.js* プラットフォームブランチを使用している場合は、このセクションをお読みください。

#### Amazon Linux 2 での Node.js に関する考慮事項
<a name="nodejs-al2-considerations-detail"></a>

**注記**  
このトピックの情報は、Amazon Linux 2 で実行されているNode.jsプラットフォームブランチに適用されます。このコンテンツでは、AL2-specific機能と動作について説明します。 AL2023

**コマンドのバリエーション**  
コマンドオプションは、アプリケーションが実行される Amazon Linux 2 プラットフォームブランチに含まれる npm バージョンによって異なります。
+ npm v6 – Elastic Beanstalk は、デフォルトで依存関係を本番モードでインストールします。コマンド `npm install --production` を使用します。
+ npm v7 以降 — Elastic Beanstalk は *devDependencies* を省略します。コマンド `npm install --omit=dev` を使用します。

上記の両方のコマンドは、*devDependencies* であるパッケージをインストールしません。

**Git 依存関係の SSH プロトコルと HTTPS プロトコル**  
2023 年 3 月 7 日の Amazon Linux 2 プラットフォームリリース以降、SSH および HTTPS プロトコルを使用して Git リポジトリからパッケージを取得できます。プラットフォームブランチ Node.js 16 は、SSH プロトコルと HTTPS プロトコルの両方をサポートします。Node.js 14 は HTTPS プロトコルのみをサポートします。

**Example package.json – Node.js 16 は HTTPS と SSH の両方をサポートします**  

```
    ...
    "dependencies": {
      "aws-sdk": "https://github.com/aws/aws-sdk-js.git",
      "aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git"
    }
```

**バージョンとバージョン範囲**  
`package.json` ファイルで `engines` キーワードを使用して、アプリケーションで使用する Node.js のバージョンを指定します。npm 表記を使用してバージョニング範囲を指定することもできます。バージョン範囲の構文の詳細については、Node.js のウェブサイトの「[npm を使用したセマンティックバージョニング](https://nodejs.dev/learn/semantic-versioning-using-npm)」を参照してください。Node.js `package.json` ファイルの `engines` キーワードでは、`aws:elasticbeanstalk:container:nodejs` 名前空間の古い `NodeVersion` オプションを置換します。

**重要**  
バージョン範囲を指定する機能は、AL2023 上で動作する Node.js プラットフォームブランチでは使用できません。AL2023 上の特定の Node.js ブランチ内では 1 つの Node.js バージョンのみがサポートされています。`package.json` ファイルでバージョン範囲が指定されている場合、その指定は無視され、Node.js のプラットフォームブランチバージョンがデフォルトで使用されます。

**Example `package.json` — 単一の Node.js バージョン**  

```
{
    ...
    "engines": { "node" : "14.16.0" }
  }
```

**Example `package.json` — Node.js のバージョン範囲**  

```
{
    ...
    "engines": { "node" : ">=10 <11" }
  }
```

バージョン範囲が指定されると、Elastic Beanstalk では、プラットフォームにあるバージョンの中から、範囲内で利用可能な最新の Node.js バージョンをインストールします。この例では、範囲は、バージョンがバージョン 10 以上で、バージョン 11 より小さくなければならないことが示されています。その結果、Elastic Beanstalk では、[サポートされているプラットフォーム](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)で利用可能な最新の Node.js バージョン 10.x.y がインストールされます。

指定できるのは、プラットフォームブランチに対応する Node.js バージョンのみであることに注意してください。例えば、Node.js 16 プラットフォームブランチを使用している場合、16.x.y Node.js バージョンのみを指定できます。npm で support されているバージョン範囲オプションを使用すると、柔軟性が向上します。各プラットフォームブランチにおける有効な Node.js バージョンについては、「*AWS Elastic Beanstalk プラットフォーム*ガイド」の「[https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)」を参照してください。

**注記**  
使用しているバージョンの Node.js に対する support がプラットフォームバージョンから削除された場合は、[プラットフォームの更新](using-features.platform.upgrade.md)に先立って、Node.js バージョン設定を変更または削除する必要があります。これは、1 つ以上のバージョンの Node.js でセキュリティの脆弱性が検出された場合に発生することがあります  
この場合、設定された Node.js バージョンをsupport していないプラットフォームの新しいバージョンに更新しようとすると失敗します。新しい環境を作成する必要がないようにするには、`package.json` の Node.js のバージョニング設定を、古いプラットフォームバージョンと新しいプラットフォームバージョンの両方で support されている Node.js バージョンに変更します。このトピックで前述したように、support されているバージョンを含む Node.js のバージョニング範囲を指定することもできます。また、設定を削除して、新しいソースバンドルをデプロイするオプションもあります。

# Elastic Beanstalk での npm shrinkwrap による依存関係のロック
<a name="nodejs-platform-shrinkwrap"></a>

Node.js プラットフォームは、デプロイするたびに *webapp* ユーザーとして `npm install` を実行します。依存関係の新しいバージョンが利用可能になった場合、そのインストールがアプリケーションをデプロイする際に行われ、デプロイに長い時間がかかる可能性があります。

アプリケーションの依存関係を現在のバージョンにロックダウンする `npm-shrinkwrap.json` ファイルを作成することで、依存関係のアップグレードを回避できます。

```
$ npm install
$ npm shrinkwrap
wrote npm-shrinkwrap.json
```

依存関係が 1 回のみインストールされるようにするため、出典バンドルにこのファイルを含めます。

# プロキシサーバーを設定します
<a name="nodejs-platform-proxy"></a>

Elastic Beanstalk では、リバースプロキシとして NGINX または Apache HTTPD を使用して、ポート 80 の Elastic Load Balancing ロードバランサーにアプリケーションをマッピングできます。デフォルトは NGINX です。Elastic Beanstalk にはデフォルトのプロキシ設定が用意されています。これは拡張することも、独自の設定で完全に上書きすることもできます。

デフォルトでは、Elastic Beanstalk はポート 5000 でアプリケーションにリクエストを送信するようプロキシを設定します。デフォルトのポートを上書きするには、`PORT` [環境プロパティ](create_deploy_nodejs.container.md#nodejs-platform-console)を、主要なアプリケーションがリッスンするポートに設定します。

**注記**  
アプリケーションでリッスンしているポートは、ロードバランサーからリクエストを受信するために NGINX サーバーでリッスンするポートに影響を与えません。

**ご使用のプラットフォームバージョンでプロキシサーバーを設定する**  
すべての AL2023/AL2 プラットフォームでは、統一されたプロキシ設定機能がサポートされています。AL2023/AL2 を実行中のプラットフォームバージョンでプロキシサーバーを設定する方法の詳細については、「[リバースプロキシの設定](platforms-linux-extend.proxy.md)」を参照してください。

## (Amazon Linux 2 より前の) Amazon Linux AMI でのプロキシの設定
<a name="nodejs-platform-proxy.alami"></a>

Elastic Beanstalk Node.js 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの情報を読んでください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### デフォルトのプロキシ設定の拡張および上書き — Amazon Linux AMI (AL1)
<a name="nodejs-platform-proxy.alami.extending"></a>

Node.js プラットフォームではリバースプロキシを使用して、インスタンスのポート 80 から、ポート 8081 でリッスンしているアプリケーションにリクエストを中継します。Elastic Beanstalk にはデフォルトのプロキシ設定が用意されています。これは拡張することも、独自の設定で完全に上書きすることもできます。

デフォルト設定を拡張するには、設定ファイルで `.conf` に `/etc/nginx/conf.d` ファイルを追加します。具体的な例については、「[Node.js を実行している EC2 インスタンスで HTTPS を終了する](https-singleinstance-nodejs.md)」を参照してください。

Node.js プラットフォームでは、プロキシサーバーがトラフィックを渡すポートに PORT 環境変数を設定します。コードでこの変数を読み取って、アプリケーションのポートを設定します。

```
    var port = process.env.PORT || 3000;

    var server = app.listen(port, function () {
        console.log('Server running at http://127.0.0.1:' + port + '/');
    });
```

デフォルトの NGINX 設定では、`127.0.0.1:8081` にある `nodejs` という名前のアップストリームサーバーにトラフィックを転送します。デフォルト設定を削除し、[設定ファイル](ebextensions.md)に独自の設定を指定することができます。

**Example .ebextensions/proxy.config**  
次の例では、デフォルト設定を削除し、ポート 8081 ではなく 5000 にトラフィックを転送するカスタム設定を追加します。  

```
files:
  /etc/nginx/conf.d/proxy.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      upstream nodejs {
        server 127.0.0.1:5000;
        keepalive 256;
      }

      server {
        listen 8080;

        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        access_log  /var/log/nginx/access.log  main;

        location / {
            proxy_pass  http://nodejs;
            proxy_set_header   Connection "";
            proxy_http_version 1.1;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        gzip on;
        gzip_comp_level 4;
        gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location /static {
            alias /var/app/current/static;
        }

      }

  /opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh:
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash -xe
      rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
      service nginx stop 
      service nginx start

container_commands:
  removeconfig:
    command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
```
設定例 (`/etc/nginx/conf.d/proxy.conf`) では、`/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf` のデフォルト設定をベースとして使用し、圧縮とログの設定および静的なファイルマッピングでデフォルトのサーバーブロックを含めます。  
`removeconfig` コマンドでは、コンテナのデフォルト設定を削除し、プロキシサーバーでカスタム設定が使用されるようにします。Elastic Beanstalk は、各構成がデプロイされるときにデフォルト設定を再作成します。これを考慮して、次の例では、設定のデプロイ後のフック (`/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh`) が追加されます。これにより、デフォルト設定が削除され、プロキシサーバーが再起動されます。

**注記**  
デフォルト設定は、Node.js プラットフォームの今後のバージョンで変更される可能性があります。カスタマイズのベースとして、最新バージョンの設定を使用して互換性を確保します。

デフォルト設定を上書きする場合は、静的なファイルマッピングと GZIP 圧縮を定義する必要があります。これは、プラットフォームが[標準設定](create_deploy_nodejs.container.md#nodejs-namespaces)を適用できないためです。