使用 Node.js 平台 - AWS App Runner

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Node.js 平台

AWS App Runner Node.js 平台提供托管运行时。使用基于 Node.js 版本的 Web 应用程序,每个运行时都可以轻松构建和运行容器。当你使用 Node.js 运行时时,App Runner 从托管的 Node.js 运行时镜像开始。此镜像基于亚马逊 Linux Docker 镜像,包含某个 Node.js 版本的运行时包和一些工具。App Runner 使用此托管运行时映像作为基础映像,并添加您的应用程序代码来构建 Docker 映像。然后,它会部署此映像以在容器中运行您的 Web 服务。

在使用 App Runner 控制台或 CreateServiceAPI 操作创建服务时,可以为 App Runner 服务指定运行时。您也可以将运行时指定为源代码的一部分。在包含在代码存储库中的 A pp Runner 配置文件中使用runtime关键字。托管运行时的命名约定是 <language-name><major-version>

有关有效的 Node.js 运行时名称和版本,请参阅Node.js 运行时发布信息

每次部署或服务更新时,App Runner 都会将服务的运行时更新到最新版本。如果您的应用程序需要托管运行时的特定版本,则可以使用 App Runner 配置文件中的runtime-version关键字进行指定。您可以锁定到任何级别的版本,包括主要版本或次要版本。App Runner 仅对服务的运行时进行较低级别的更新。

Node.js 运行时的版本语法:major[.minor[.patch]]

例如:12.21.0

以下示例演示了版本锁定:

  • 12.21— 锁定主要版本和次要版本。App Runner 仅更新补丁版本。

  • 12.21.0— 锁定到特定的补丁版本。App Runner 不会更新你的运行时版本。

Node.js 运行时配置

选择托管运行时时,还必须至少配置生成和运行命令。您可以在创建更新 App Runner 服务时对其进行配置。您可以使用以下方法之一来执行此操作:

  • 使用 App Runner 控制台-在创建过程或配置选项卡的 “配置构建” 部分中指定命令。

  • 使用 App Runner API — 调用CreateServiceUpdateServiceAPI 操作。使用CodeConfigurationValues数据类型的BuildCommandStartCommand成员来指定命令。

  • 使用配置文件-在最多三个构建阶段中指定一个或多个构建命令,并指定一个用于启动应用程序的运行命令。还有其他可选的配置设置。

提供配置文件是可选的。使用控制台或 API 创建 App Runner 服务时,您可以指定 App Runner 是在创建时直接获取配置设置还是从配置文件中获取配置设置。

具体而言,对于 Node.js 运行时,您还可以使用源存储库根目录package.json中命名的 JSON 文件配置构建和运行时。使用此文件,您可以配置 Node.js 引擎版本、依赖包和各种命令(命令行应用程序)。诸如 npm 或 yarn 之类的 Package 管理器将此文件解释为其命令的输入。

例如:

  • npm install安装中dependenciesdevDependencies节点定义的软件包package.json

  • npm start或者npm 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 Doc s 网站上创建 package.json 文件

提示
  • 如果您的package.json文件定义了start命令,则可以将其用作 App Runner 配置文件中的run命令,如下例所示。

    package.j

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

    apprunner.yaml

    run: command: npm start
  • 当你在开发环境npm install中运行时,npm 会创建该文件package-lock.json。此文件包含 npm 刚安装的软件包版本的快照。此后,当 npm 安装依赖项时,它会使用这些确切的版本。如果你安装 yarn,它会创建一个yarn.lock文件。将这些文件提交到您的源代码存储库中,以确保您的应用程序与您开发和测试的依赖项版本一起安装。

  • 您也可以使用 App Runner 配置文件来配置 Node.js 版本并启动命令。执行此操作时,这些定义会覆盖中的定义package.json。中的nodepackage.json版本与 App Runner 配置文件中的runtime-version值发生冲突会导致 App Runner 构建阶段失败。

特定运行时版本的标注

Node.js 18(修改后的 App Runner 版本)

App Runner 现在基于以下运行时版本为应用程序运行更新的构建流程:Python 3.11 和 Node.js 18。如果您的应用程序在其中一个运行时版本上运行,请参阅托管运行时版本和 App Runner 版本,了解有关修订后的构建过程的更多信息。使用所有其他运行时版本的应用程序不受影响,它们将继续使用原始的构建过程。

Node.js 运行时示例

以下示例显示了用于构建和运行 Node.js 服务的 App Runner 配置文件。

注意

这些示例中使用的运行时版本是 12.21.0 和 18.19. 0。您可以将其替换为要使用的版本。有关支持的最新的 Node.js 运行时版本,请参阅Node.js 运行时发布信息

此示例显示了一个可以与 Node.js 托管运行时配合使用的最小配置文件。有关 App Runner 使用最小配置文件做出的假设,请参阅配置文件示例

例 apprunner.yaml
version: 1.0 runtime: nodejs12 build: commands: build: - npm install --production run: command: node app.js

此示例显示了在 Node.js 托管运行时中使用所有配置密钥的情况。

注意

这些示例中使用的运行时版本为 12.21.0。您可以将其替换为要使用的版本。有关支持的最新的 Node.js 运行时版本,请参阅Node.js 运行时发布信息

例 apprunner.yaml
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 使用的是修订后的 App Runner 版本。

只有修订后的 App Runner 版本支持该pre-run参数。如果您的应用程序使用原始 App Runner 版本支持的运行时版本,请不要在配置文件中插入此参数。有关更多信息,请参阅 托管运行时版本和 App Runner 版本

注意

这些示例中使用的运行时版本为 18.19.0。您可以将其替换为要使用的版本。有关支持的最新的 Node.js 运行时版本,请参阅Node.js 运行时发布信息

例 apprunner.yaml
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"

此示例说明如何配置使用 Grunt 开发的 Node.js 应用程序。Grunt 是一个命令行 JavaScript 任务运行器。它运行重复性任务并管理流程自动化以减少人为错误。Grunt 和 Grunt 插件是使用 npm 安装和管理的。您可以通过将Gruntfile.js文件包含在源存储库的根目录中来配置 Grunt。

例 package.j
{ "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']); };
例 apprunner.yaml
注意

这些示例中使用的运行时版本为 12.21.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