使用 Elastic Beanstalk Node.js 平台 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Elastic Beanstalk Node.js 平台

重要

Amazon Linux 2 平台版本与 Amazon Linux AMI 平台版本(在 Amazon Linux 2 之前)完全不同。这些不同层代的平台在多个方面不兼容。如果您要迁移到 Amazon Linux 2 平台版本,请务必阅读将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2中的信息。

AWS Elastic Beanstalk Node.js 平台是在 nginx 代理服务器之后运行的 Node.js Web 应用程序的一组平台版本

Elastic Beanstalk 提供了配置选项,可供您用于自定义在 Elastic Beanstalk 环境中的 EC2 实例上运行的软件。您可配置应用程序所需的环境变量,启用日志轮换至 Amazon S3,并将应用程序源中包含静态文件的文件夹映射至代理服务器所提供的路径。

Elastic Beanstalk 控制台中提供了配置选项,可用于修改运行环境的配置。要避免在终止环境时丢失环境配置,可以使用保存的配置来保存您的设置,并在以后将这些设置应用到其他环境。

要保存源代码中的设置,您可以包含配置文件。在您每次创建环境或部署应用程序时,会应用配置文件中的设置。您还可在部署期间使用配置文件来安装程序包、运行脚本以及执行其他实例自定义操作。

您可以在源包中包含一个 Package.json 文件,以便在部署期间安装软件包、提供 start 命令以及指定您希望应用程序使用的 Node.js 版本。您可以包含一个 npm-shrinkwrap.json 文件来锁定依赖项版本。

Node.js 平台包含一个代理服务器,以服务静态资产、将流量转发到应用程序和压缩响应。您可以扩展或覆盖默认代理配置,以适应高级方案。

可提供多个选项供您启动应用程序。您可以将 Procfile 添加到源代码包来指定用于启动应用程序的命令。如果您不提供 Procfile,Elastic Beanstalk 将在您提供 package.json 文件时运行 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. Software (软件) 配置类别中,选择 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 控制台配置静态文件的详细信息,请参阅提供静态文件

环境属性

环境属性部分,您可以在运行应用程序的 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 之前)Node.js 环境

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

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

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

  • Node.js version (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 来配置选项。有关更多信息,请参阅配置选项

Amazon Linux AMI(在 Amazon Linux 2 之前)Node.js 平台

如果您的 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. 选择 Save

Node.js Amazon 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 提供了许多用于自定义环境的配置选项。除了配置文件之外,您还可使用控制台、保存的配置、EB CLI 或 AWS CLI 来配置选项。有关更多信息,请参阅配置选项