アプリケーションの依存関係の設定 - AWS Elastic Beanstalk

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

アプリケーションの依存関係の設定

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

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

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_modules ディレクトリに Node.js の依存関係を含める」を参照してください。

package.json ファイルを使用した Node.js の依存関係の指定

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

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

例 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 属性は、ローカルの開発とテストにのみ必要なパッケージを指定します。

Elastic Beanstalk は、次のコマンドを使用して webapp ユーザーとして npm install を実行します。コマンドオプションは、アプリケーションが実行されるプラットフォームブランチに含まれる npm バージョンによって異なります。

  • npm v6 – Elastic Beanstalk は、デフォルトで依存関係を本番モードでインストールします。コマンド npm install --production を使用します。

  • npm v7 以降 – Elastic Beanstalk は devDependencies を省略します。コマンド npm install --omit=dev を使用します。

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

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

SSH と HTTPS

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

例 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" }

バージョンとバージョン範囲

重要

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

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

package.json — 単一の Node.js バージョン
{ ... "engines": { "node" : "14.16.0" } }
package.json — Node.js のバージョン範囲
{ ... "engines": { "node" : ">=10 <11" } }

バージョン範囲が指定されると、Elastic Beanstalk では、プラットフォームにあるバージョンの中から、範囲内で利用可能な最新の Node.js バージョンをインストールします。この例では、範囲は、バージョンがバージョン 10 以上で、バージョン 11 より小さくなければならないことが示されています。その結果、Elastic Beanstalk では、サポートされているプラットフォームで利用可能な最新の Node.js バージョン 10.x.y がインストールされます。

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

注記

使用しているバージョンの Node.js に対する support がプラットフォームバージョンから削除された場合は、プラットフォームの更新に先立って、Node.js バージョン設定を変更または削除する必要があります。これは、1 つ以上のバージョンの Node.js でセキュリティの脆弱性が検出された場合に発生することがあります

この場合、設定された Node.js バージョンをsupport していないプラットフォームの新しいバージョンに更新しようとすると失敗します。新しい環境を作成する必要がないようにするには、package.json の Node.js のバージョニング設定を、古いプラットフォームバージョンと新しいプラットフォームバージョンの両方で support されている Node.js バージョンに変更します。このトピックで前述したように、support されているバージョンを含む Node.js のバージョニング範囲を指定することもできます。また、設定を削除して、新しいソースバンドルをデプロイするオプションもあります。

node_modules ディレクトリに Node.js の依存関係を含める

アプリケーションコードとともに依存関係パッケージを環境インスタンスにデプロイするには、プロジェクトソースのルートにある node_modules という名前のディレクトリにそれらを含めます。詳細については、npm ドキュメントのウェブサイトで「パッケージをローカルでダウンロードしてインストールする」を参照してください。

node_modules ディレクトリを Amazon Linux 2 Node.js プラットフォームバージョンにデプロイすると、Elastic Beanstalk では独自の依存関係パッケージが提供されていると見なして、package.json ファイルで指定された依存関係をインストールしないようにします。また、Node.js では node_modules ディレクトリで依存関係を探します。詳細については、Node.js ドキュメントの「node_modules フォルダからの読み込み」を参照してください。

注記

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