使用 Elastic Beanstalk Node.js 平台 - AWS Elastic Beanstalk

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

使用 Elastic Beanstalk Node.js 平台

本主題說明如何在 Elastic Beanstalk 上設定、建置和執行 Node.js 應用程式。

AWS Elastic Beanstalk 支援許多不同版本的 Node.js 程式設計語言的平台分支。如需完整清單,請參閱AWS Elastic Beanstalk 平台文件中的 Node.js

Elastic Beanstalk 提供組態選項,您可以用來自訂在 Elastic Beanstalk 環境中 EC2 執行個體上執行的軟體。您可以設定應用程式所需的環境變數,啟用 Amazon S3 的日誌輪換,並將包含靜態檔案的應用程式來源中的資料夾映射到代理伺服器提供的路徑。

Elastic Beanstalk 主控台中提供了修改正在執行環境組態的組態選項。要避免在終止環境的組態時遺失組態,您可以使用已儲存組態來儲存您的設定,並在之後套用至另一個環境。

若要將設定儲存於原始程式碼,您可以包含組態檔案。每次您建立環境或部署應用程式,組態檔案裡的設定就會套用。您也可以使用組態檔案來安裝套件、執行指令碼,並在部署期間執行其他執行個體自訂操作。

您可以在原始碼套件中包含一個 Package.json 檔案,以便在部署期間安裝套件、提供啟動命令,以及指定您希望應用程式使用的 Node.js 版本。您可以包含一個 npm-shrinkwrap.json 檔案來鎖定相依性版本。

Node.js 平台包含一個代理伺服器,以為靜態資產提供服務、將流量轉發至您的應用程式,以及壓縮回應資料。您可以針對進階的應用情境,來擴展或覆寫預設的代理組態

有幾個選項可以啟動您的應用程序。您可以將 Procfile 新增到原始碼套件中,以指定啟動應用程式的命令。如果您未提供 Procfile 但提供 package.json 檔案,則 Elastic Beanstalk 會執行 npm start。如果您也沒有提供該檔案,則 Elastic Beanstalk 會依序尋找 app.jsserver.js 檔案,並執行程式碼。

在 Elastic Beanstalk 主控台中套用的設定會覆寫組態檔案中相同的設定 (如存在)。這可讓您在組態檔案中擁有預設設定,並以主控台的環境專屬設定覆寫之。如需優先順序以及其他變更設定方法的詳細資訊,請參閱組態選項

如需各種擴充 Elastic Beanstalk Linux 類型平台方式的詳細資訊,請參閱 擴充 Elastic Beanstalk Linux 平台

設定您的 Node.js 環境

您可以使用Node.js平台設定來微調 Amazon EC2 執行個體的行為。您可以使用 Elastic Beanstalk 控制台編輯 Elastic Beanstalk 環境的 Amazon EC2 實例配置。

使用 Elastic Beanstalk 主控台來啟用至 Amazon S3 的日誌輪換,和設定您的應用程式可以從環境讀取的變數。

在 Elastic Beanstalk 主控台中設定 Node.js 環境
  1. 開啟彈性魔豆控制台,然後在區域清單中選取您的. AWS 區域

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

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇組態

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

容器選項

您可以指定這些平台特有的選項:

  • 代理伺服器 – 要在您的環境執行個體上使用的代理伺服器。預設為使用 NGNIX。

日誌選項

Log Options (日誌選項) 區段有兩個設定:

  • Instance profile (執行個體描述檔) – 指定執行個體描述檔,此描述檔具有的許可,可存取和您應用程式相關的 Amazon S3 儲存貯體。

  • 啟用 Amazon S3 的日誌檔輪替 — 指定是否將應用程式 Amazon EC2 執行個體的日誌檔複製到與應用程式關聯的 Amazon S3 儲存貯體。

靜態檔案

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

如需使用組態檔案或 Elastic Beanstalk 主控台設定靜態檔案的詳細資訊,請參閱提供靜態檔案

環境屬性

使用「環境屬性」區段可在執行應用程式的 Amazon EC2 執行個體上指定環境組態設定。這些設定會以金鑰值對的形式傳到應用程式。

在中執行的Node.js環境中 AWS Elastic Beanstalk,您可以透過執行來存取環境變數process.env.ENV_VARIABLE

var endpoint = process.env.API_ENDPOINT

Node.js 平台會將 PORT 環境變數設定為代理伺服器傳送流量至其中的連接埠。如需詳細資訊,請參閱在 Elastic Beanstalk 上配置代理服務器

如需更多資訊,請參閱環境屬性與其他軟體設定

下列主控台軟體組態類別僅在使用 Amazon Linux AMI 平台版本 (之前的 Amazon Linux 2) 的 Elastic Beanstalk Node.js 環境中受支援。

備註

在組態頁面上指定下列項目:

  • Proxy server (代理伺服器) – 指定要使用哪一個 Web 伺服器來將代理連線連至 Node.js。預設為使用 NGINX。如果選擇 none (無),則靜態檔案映射不會生效,而且會停用 GZIP 壓縮功能。

  • Node.js 版本 – 指定 Node.js 的版本。如需支援的 Node.js 版本清單,請參閱 AWS Elastic Beanstalk 平台指南中的 Node.js

  • GZIP 壓縮 – 指定是否啟用 GZIP 壓縮。預設為啟用 GZIP 壓縮。

  • Node command (節點命令) – 讓您能輸入用來啟動 Node.js 應用程式的命令。空白字串 (預設值) 表示 Elastic Beanstalk 將會依序使用 app.jsserver.jsnpm start

Node.js 組態命名空間

您可以使用組態檔案來設定組態選項,並在部署期間執行其他的執行個體設定工作。組態選項可透過 Elastic Beanstalk 服務或您使用的平台來定義,並且會組織成命名空間

您可以使用 aws:elasticbeanstalk:environment:proxy 命名空間來選擇要在環境的執行個體上使用的代理。以下範例會將您的環境設定為使用 Apache HTTPD 代理伺服器。

範例 .ebextensions/nodejs-settings.config
option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: apache

您可以使用 aws:elasticbeanstalk:environment:proxy:staticfiles 命名空間設定代理提供靜態檔案。如需詳細資訊和範例,請參閱 提供靜態檔案

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案之外,您也可以使用主控台、儲存的組態CLI、EB 或. AWS CLI如需更多資訊,請參閱組態選項

如果您的 Elastic Beanstalk Node.js 環境使用 Amazon Linux AMI 平台版本(在 Amazon Linux 2 之前),請考慮本節中的特定組態和建議。

備註

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.jsAmazon Linux AMI 平台與其他 Elastic Beanstalk 託管平台不同。這是因為每個 Node.js 平台版本僅支援幾個 Node.js 語言版本。如需支援的 Node.js 版本清單,請參閱 AWS Elastic Beanstalk 平台指南中的 Node.js

您可以使用平台特定的組態選項來設定語言版本。如需說明,請參閱 設定您的 Node.js 環境。或者,使用 Elastic Beanstalk 主控台來更新您的環境使用的 Node.js 版本,作為更新平台版本的一部分。

注意

如果您所使用的 Node.js 版本的支援已從平台移除,您必須在平台更新之前變更或移除版本設定。當發現一個或多個版本的 Node.js 存在安全漏洞時,可能會出現此種狀況。

發生這種情況時,嘗試更新為不支援設定的平台的新版本會NodeVersion失敗。若要避免需要建立新環境,請將NodeVersion組態選項變更為舊平台版本和新版本都支援的 Node.js 版本,或移除選項設定,然後執行平台更新。

在 Elastic Beanstalk 主控台中設定環境的 Node.js 版本
  1. 開啟彈性魔豆控制台,然後在區域清單中選取您的. AWS 區域

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

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在環境概觀頁面的 Platform (平台) 下,選擇 Change (變更)

  4. Update platform version (更新平台版本) 對話方塊中,選取 Node.js 平台版本。

    Elastic Beanstalk 更新平台版本確認
  5. 選擇 Save (儲存)。

Node.jsAmazon Linux AMI 平台定義了aws:elasticbeanstalk:container:nodejs:staticfilesaws:elasticbeanstalk:container:nodejs命名空間中的其他選項。

下列組態檔案會告知 Elastic Beanstalk 使用 npm start 來執行應用程式。還將代理類型設定為 Apache 並啟用壓縮。最後,它設定代理從兩個來源目錄提供靜態檔案。其中一個來源是來自 statichtml 來源目錄,在網站根目錄下 html 路徑中的 HTML 檔案。另一個來源是來自 staticimages 來源目錄的網站根目錄下的 images 路徑的映像檔案。

範例 .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 可提供許多組態選項讓您自訂環境。除了組態檔案之外,您也可以使用主控台、儲存的組態CLI、EB 或. AWS CLI如需更多資訊,請參閱組態選項