使用 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 文件,以便在部署期间安装软件包、提供 start 命令以及指定您希望应用程序使用的 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. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

容器选项

您可以指定以下特定于平台的选项:

  • Proxy server(代理服务器)– 要在环境实例上使用的代理服务器。默认使用 NGINX。

日志选项

日志选项部分有两个设置:

  • Instance profile(实例配置文件)– 指定有权访问与应用程序关联的 Amazon S3 存储桶的实例配置文件。

  • Enable log file rotation to Amazon S3(启用到 Amazon S3 的日志轮换)– 指定是否将应用程序的 Amazon EC2 实例的日志文件复制到与应用程序关联的 Amazon S3 存储桶。

静态文件

为了提高性能,您可以使用 Static files(静态文件)部分配置代理服务器,以便从 Web 应用程序内的一组目录提供静态文件(例如 HTML 或图像)。对于每个目录,您都将虚拟路径设置为目录映射。当代理服务器收到对指定路径下的某个文件的请求时,它将直接提供此文件,而不是将请求路由至您的应用程序。

有关使用配置文件或 Elastic Beanstalk 控制台配置静态文件的详细信息,请参阅 提供静态文件

环境属性

使用 Environment Properties(环境属性)部分,在运行应用程序的 Amazon EC2 实例上指定环境配置设置。这些设置会以密钥值对的方式传递到应用程序。

在运行于 AWS Elastic Beanstalk 中的 Node.js 环境内,您可以通过运行 process.env.ENV_VARIABLE 来访问环境变量。

var endpoint = process.env.API_ENDPOINT

Node.js 平台会将 PORT 环境变量设置为代理服务器将流量传输到的端口。有关更多信息,请参阅 配置代理服务器

请参阅环境属性和其他软件设置了解更多信息。

仅在使用 Amazon Linux AMI 平台版本(在 Amazon Linux 2 之前)的 Elastic Beanstalk Node.js 环境中支持以下控制台软件配置类别。

注意

在配置页面上,指定以下内容:

  • Proxy server(代理服务器)– 指定要用来代理与 Node.js 连接的 Web 服务器。默认使用 NGINX。如果选择 none,则静态文件映射不会生效,并且 GZIP 压缩会被禁用。

  • Node.js 版本 – 指定 Node.js 的版本。有关受支持的 Node.js 版本的列表,请参阅 AWS Elastic Beanstalk 平台指南中的 Node.js

  • GZIP compression(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 提供了许多用于自定义环境的配置选项。除了配置文件之外,您还可使用控制台、保存的配置、EB CLI 或 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.js Amazon 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. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在环境概述页面上的 Platform(平台)下,选择 Change(更改)。

  4. Update platform version(更新平台版本)对话框中,选择 Node.js 版本。

    Elastic Beanstalk 更新平台版本确认
  5. 选择保存

Node.js Amazon Linux AMI 平台在 aws:elasticbeanstalk:container:nodejs:staticfilesaws:elasticbeanstalk:container:nodejs 命名空间中定义附加选项。

以下配置文件将指示 Elastic Beanstalk 使用 npm start 运行应用程序。它也将代理类型设置为 Apache 并启用压缩。最后,它将代理配置为从两个源目录提供静态文件。一个源是来自 statichtml 源目录的网站根目录下的 html 路径的 HTML 文件。另一个源是来自 staticimages 源目录的网站根目录下的 images 路径的 HTML 文件。

例 .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 来配置选项。参阅 配置选项 了解更多信息。