使用 Node.js 平台 - AWS App Runner

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

使用 Node.js 平台

AWS App Runner Node.js 平台提供受管理的執行階段。每個執行階段都可讓您輕鬆建置和執行容器,並以 Node.js 版本為基礎的 Web 應用程式。當您使用 Node.js 執行階段時,應用程式執行程式會以受管理的 Node.js 執行階段映像開始。此映像檔是以 Amazon Linux 泊塢視窗映像為基礎,其中包含 Node.js 版本和某些工具的執行階段套件。App Runner 使用此託管運行時映像作為基本映像,並添加您的應用程序代碼來構建 Docker 映像。然後,它將部署此映像以在容器中運行 Web 服務。

當您使用應用程式執行器主控台或 CreateServiceAPI 作業建立服務時,您可以指定應用程式執行器服務的執行階段。您也可以將執行階段指定為原始程式碼的一部分。在您包含在程式碼儲存庫中的 App Runner 設定檔中使用runtime關鍵字。託管運行時的命名約定是 <language-name><major-version>

如需有效的 Node.js 執行階段名稱和版本,請參閱Node.js 執行階段版本資訊

App Runner 會在每次部署或服務更新時,將服務的執行階段更新為最新版本。如果您的應用程式需要特定版本的受管理執行階段,您可以使用 App Runner 設定檔中的runtime-version關鍵字來指定它。您可以鎖定到任何級別的版本,包括主要或次要版本。應用程序運行器僅對服務的運行時進行較低級別的更新。

Node.js 執行階段的版本語法:major[.minor[.patch]]

例如:12.21.0

下列範例會示範版本鎖定:

  • 12.21-鎖定主要和次要版本。應用程序運行器僅更新補丁版本。

  • 12.21.0— 鎖定到特定的修補程式版本。應用程序運行器不會更新您的運行時版本。

Node.js 執行階段設定

當您選擇受管理的執行階段時,您也必須設定最低限度的建置和執行命令。您可以在創建更新應用程序運行器服務時進行配置。您可以使用下列其中一種方法來執行此操作:

  • 使用 App Runner 主控台 — 在建立程序或設定索引標籤的 [設定組建] 區段中指定命令。

  • 使用應用程式執行程式 API — 呼叫CreateServiceUpdateServiceAPI 作業。使用CodeConfigurationValues資料類型的BuildCommandStartCommand成員指定命令。

  • 使用組態檔案 — 在最多三個建置階段中指定一或多個建置命令,以及用來啟動應用程式的單一執行命令。還有其他可選配置設置。

提供組態檔案是選擇性的。當您使用主控台或 API 建立 App Runner 服務時,您可以指定應用程式執行器是在建立時直接取得您的組態設定,還是從組態檔案取得您的組態設定。

使用 Node.js 執行階段時,您也可以使用來源存放庫根目錄package.json中名為的 JSON 檔案來設定組建和執行階段。使用此檔案,您可以設定 Node.js 引擎版本、相依性套件和各種命令 (命令列應用程式)。諸如 npm 或 yarn 之類的 Package 件管理員會將此檔案解譯為其命令的輸入。

例如:

  • npm install安裝由中的dependenciesdevDependencies節點定義的套件package.json

  • npm startnpm run start執行中的scripts/start節點定義的指令package.json

以下是範例 package.json 檔案。

{ "name": "node-js-getting-started", "version": "0.3.0", "description": "A sample Node.js app using Express 4", "engines": { "node": "12.21.0" }, "scripts": { "start": "node index.js", "test": "node test.js" }, "dependencies": { "cool-ascii-faces": "^1.3.4", "ejs": "^2.5.6", "express": "^4.15.2" }, "devDependencies": { "got": "^11.3.0", "tape": "^4.7.0" } }

如需詳細資訊package.json,請參閱在 npm 文件網站上建立封裝 .json 檔案

提示
  • 如果您的package.json檔案定義了start命令,您可以在 App Runner 設定檔中將其當做run命令使用,如下列範例所示。

    包裝

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

    阿普魯人. 羊

    run: command: npm start
  • 當您npm install在開發環境中執行時,npm 會建立檔案package-lock.json。此文件包含剛剛安裝的軟件包版本 npm 的快照。此後,當 npm 安裝依賴關係時,它使用這些確切的版本。如果你安裝 yarn 它創建一個yarn.lock文件。將這些檔案提交至您的原始程式碼儲存庫,以確保您的應用程式已安裝您所開發並測試的相依性版本。

  • 您還可以使用應用程序運行器配置文件來配置 Node.js 版本和啟動命令。當您執行此操作時,這些定義會覆寫中的定義package.json。中的node版本package.json與應用程式執行器設定檔中的runtime-version值之間的衝突會導致應用程式執行器建置階段失敗。

特定執行階段版本的編號說明

Node.js 18 (已修訂的應用程式執行程式組建

應用程式執行程式現在會針對以下執行階段版本的應用程式執行更新的建置程序:Python 3.11 和 Node.js 18。如果您的應用程式在其中一個執行階段版本上執行,請參閱以託管運行時版本和應用程序運行器構建取得有關修訂建置程序的詳細資訊。使用所有其他執行階段版本的應用程式不會受到影響,而且會繼續使用原始建置程序。

Node.js 執行階段範例

下列範例顯示用於建置和執行 Node.js 服務的應用程式執行器組態檔案。

注意

這些範例中使用的執行階段版本為 12.21.0 和 18.19.0。您可以將其替換為您要使用的版本。如需最新支援的 Node.js 執行階段版本,請參閱Node.js 執行階段版本資訊

此範例顯示可與 Node.js 受管理執行階段搭配使用的最小組態檔案。如需 App Runner 使用最小組態檔案所做的假設,請參閱組態檔案範例

範例 阿普魯人. 羊
version: 1.0 runtime: nodejs12 build: commands: build: - npm install --production run: command: node app.js

此範例顯示所有組態索引鍵與 Node.js 受管理執行階段的使用。

注意

這些範例中使用的執行階段版本為 12.2 1.0。您可以將其替換為您要使用的版本。如需最新支援的 Node.js 執行階段版本,請參閱Node.js 執行階段版本資訊

範例 阿普魯人. 羊
version: 1.0 runtime: nodejs12 build: commands: pre-build: - npm install --only=dev - node test.js build: - npm install --production post-build: - node node_modules/ejs/postinstall.js env: - name: MY_VAR_EXAMPLE value: "example" run: runtime-version: 12.21.0 command: node app.js network: port: 8000 env: APP_PORT env: - name: MY_VAR_EXAMPLE value: "example"

此範例顯示在中使用 Node.js 受管理執行階段的所有組態索引鍵 apprunner.yaml 此範例包含一個pre-run區段,因為此版本的 Node.js 使用修訂的應用程式執行程式組建。

pre-run參數僅由修訂後的應用程序運行器構建支持。如果您的應用程式使用原始 App Runner 組建支援的執行階段版本,請勿在設定檔中插入此參數。如需詳細資訊,請參閱 託管運行時版本和應用程序運行器構建

注意

這些範例中使用的執行階段版本為 18.19. 0。您可以將其替換為您要使用的版本。如需最新支援的 Node.js 執行階段版本,請參閱Node.js 執行階段版本資訊

範例 阿普魯人. 羊
version: 1.0 runtime: nodejs18 build: commands: pre-build: - npm install --only=dev - node test.js build: - npm install --production post-build: - node node_modules/ejs/postinstall.js env: - name: MY_VAR_EXAMPLE value: "example" run: runtime-version: 18.19.0 pre-run: - node copy-global-files.js command: node app.js network: port: 8000 env: APP_PORT env: - name: MY_VAR_EXAMPLE value: "example"

這個例子演示了如何配置與咕嚕開發的 Node.js 應用程序。咕嚕是一個命令行 JavaScript 任務亞軍。它運行重複性任務並管理過程自動化以減少人為錯誤。咕嚕和咕嚕插件安裝和使用 NPM 管理。您可以通過包括在源存儲庫的根Gruntfile.js文件配置咕嚕。

範例 包裝
{ "scripts": { "build": "grunt uglify", "start": "node app.js" }, "devDependencies": { "grunt": "~0.4.5", "grunt-contrib-jshint": "~0.10.0", "grunt-contrib-nodeunit": "~0.4.1", "grunt-contrib-uglify": "~0.5.0" }, "dependencies": { "express": "^4.15.2" }, }
範例 Gruntfile.js
module.exports = function(grunt) { // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: { options: { banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, build: { src: 'src/<%= pkg.name %>.js', dest: 'build/<%= pkg.name %>.min.js' } } }); // Load the plugin that provides the "uglify" task. grunt.loadNpmTasks('grunt-contrib-uglify'); // Default task(s). grunt.registerTask('default', ['uglify']); };
範例 阿普魯人. 羊
注意

這些範例中使用的執行階段版本為 12.2 1.0。您可以將其替換為您要使用的版本。如需最新支援的 Node.js 執行階段版本,請參閱Node.js 執行階段版本資訊

version: 1.0 runtime: nodejs12 build: commands: pre-build: - npm install grunt grunt-cli - npm install --only=dev - npm run build build: - npm install --production run: runtime-version: 12.21.0 command: node app.js network: port: 8000 env: APP_PORT