

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 提供[組態選項](command-options.md)，您可以用來自訂在 Elastic Beanstalk 環境中 EC2 執行個體上執行的軟體。您可以設定應用程式所需的[環境變數](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)，啟用 Amazon S3 的日誌輪換，並將包含靜態檔案的應用程式來源中的資料夾映射到代理伺服器提供的路徑。

Elastic Beanstalk 主控台中提供了[修改正在執行環境組態](environment-configuration-methods-after.md)的組態選項。要避免在終止環境的組態時遺失組態，您可以使用[已儲存組態](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>

**Log Options (日誌選項)** 區段有兩個設定：
+ **Instance profile** (執行個體描述檔) – 指定執行個體描述檔，此描述檔具有的許可，可存取和您應用程式相關的 Amazon S3 儲存貯體。
+ **Enable log file rotation to Amazon S3** (啟用 Amazon S3 的日誌檔案輪換) – 指定是否將應用程式 Amazon EC2 執行個體的日誌檔案複製到與應用程式關聯的 Amazon S3 儲存貯體。

### 靜態檔案
<a name="nodejs-platform-console-staticfiles"></a>

為改善效能，您可以使用 **Static files** (靜態檔案) 區段來設定代理伺服器，以為來自 Web 應用程式一組目錄中的靜態檔案 (例如 HTML 或影像) 提供服務。對於每個目錄，您可以設定目錄映射的虛擬路徑。代理伺服器收到位於指定路徑下的檔案請求時，會直接提供檔案而非將請求路由至您的應用程式。

如需使用組態檔案或 Elastic Beanstalk 主控台設定靜態檔案的詳細資訊，請參閱[提供靜態檔案](environment-cfg-staticfiles.md)。

### 環境屬性
<a name="nodejs-platform-console-envprops"></a>

使用 **Environment Properties** (環境屬性) 部分針對執行您應用程式的 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** (代理伺服器) – 指定要使用哪一個 Web 伺服器來將代理連線連至 Node.js。預設為使用 NGINX。如果選擇 **none** (無)，則靜態檔案映射不會生效，而且會停用 GZIP 壓縮功能。
+ **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)。
+ **GZIP 壓縮** – 指定是否啟用 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 AMI 平台版本 (先前的 Amazon Linux 2)，請考慮本節中的特定組態和建議。

**備註**  
本主題中的資訊僅適用於以 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 版本的支援已從平台移除，您必須在[平台更新](using-features.platform.upgrade.md)之前變更或移除版本設定。當發現一個或多個版本的 Node.js 存在安全漏洞時，可能會出現此種狀況。  
此時，如果嘗試將不支援已設定 [NodeVersion](command-options-specific.md#command-options-nodejs) 的平台更新至新版本，此動作將會失敗。為省去建立新環境的必要，請將 *NodeVersion* 組態選項變更為新舊平台版本皆支援的 Node.js 版本，或是[移除選項設定](environment-configuration-methods-after.md)，然後執行平台更新。

**在 Elastic Beanstalk 主控台中設定環境的 Node.js 版本**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在環境概觀頁面的 **Platform (平台)** 下，選擇 **Change (變更)**。

1. 在 **Update platform version** (更新平台版本) 對話方塊中，選取 Node.js 平台版本。  
![\[Elastic Beanstalk 更新平台版本確認\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/platform-nodejs-update-node-version.png)

1. 選擇 **Save** (儲存)。

### 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 並啟用壓縮。最後，它設定代理從兩個來源目錄提供靜態檔案。其中一個來源是來自 `statichtml` 來源目錄，在網站根目錄下 `html` 路徑中的 HTML 檔案。另一個來源是來自 `staticimages` 來源目錄的網站根目錄下的 `images` 路徑的映像檔案。

**Example .ebextensions/node-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)。