AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Express 应用程序部署到 Elastic Beanstalk

本部分演示如何使用 Elastic Beanstalk 命令行界面 (EB CLI) 和 Git 向 Elastic Beanstalk 部署示例应用程序,然后更新该应用程序以使用 Express 框架。

先决条件

本教程要求使用 Node.js 语言及其程序包管理器 NPM。请参阅设置 Node.js 开发环境了解有关设置本地开发环境的详细信息。本教程还需要 Elastic Beanstalk 命令行界面 (EB CLI)。有关安装和配置 EB CLI 的详细说明,请参阅安装 Elastic Beanstalk 命令行界面 (EB CLI)配置 EB CLI

安装 Express 和生成项目

设置 Express 并创建项目结构。以下向您演示了如何在 Linux 操作系统上设置 Express。

在本地计算机上设置 Express 开发环境

  1. 为 Express 应用程序创建目录。

    ~$ mkdir node-express ~$ cd node-express
  2. 全局安装 Express,以便您拥有 express 命令的访问权限。

    ~/node-express$ npm install -g express-generator
  3. 根据操作系统,您可能需要设置路径才能运行 express 命令。如果需要设置路径,请使用上一步 (安装 Express) 中的输出。以下是示例。

    ~/node-express$ export PATH=$PATH:/usr/local/share/npm/bin/express
  4. 运行 express 命令。这会生成 package.json

    ~/node-express$ express

    在系统提示您是否要继续时,键入 y

  5. 设置本地依赖项。

    ~/node-express$ npm install
  6. 验证它是否工作。

    ~/node-express$ npm start

    您应该可以看到类似于如下所示的输出内容:

    > nodejs@0.0.0 start /home/local/user/node-express > node ./bin/www

    Ctrl+C 以停止该服务器。

  7. 初始化 Git 存储库。如果您没有安装 Git,请从 Git 下载站点下载它。

    ~/node-express$ git init
  8. 创建名为 .gitignore 的文件,并向其中添加以下文件和目录。这些文件不会被添加到存储库中。这一步不是必须执行的,但建议执行。

    node-express/.gitignore

    node_modules/ .gitignore .elasticbeanstalk/

创建 Elastic Beanstalk 环境

为您的应用程序配置 EB CLI 存储库,并创建运行 Node.js 平台的 Elastic Beanstalk 环境。

  1. 使用 eb init 命令创建存储库。

    ~/node-express$ eb init --platform node.js --region us-west-2 Application node-express has been created.

    此命令在名为 .elasticbeanstalk 的文件夹中创建配置文件,该配置文件指定用于为您的应用程序创建环境的设置;并创建以当前文件夹命名的 Elastic Beanstalk 应用程序。

  2. 使用 eb create 命令创建运行示例应用程序的环境。

    ~/node-express$ eb create --sample node-express-env

    此命令使用 Node.js 平台的默认设置以及以下资源来创建负载均衡环境:

    • EC2 实例 – 配置来在您选择的平台上运行 Web 应用程序的 Amazon Elastic Compute Cloud (Amazon EC2) 虚拟机。

      各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 nginx 作为 Web 应用程序前的反向代理,向其转发请求、提供静态资产以及生成访问和错误日志。

    • 实例安全组 – 配置来允许通过端口 80 访问的 Amazon EC2 安全组。通过此资源,HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下,其他端口不允许流量进入。

    • 负载均衡器 – 配置来向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。

    • 安全组 – 配置来允许通过端口 80 访问的 Amazon EC2 安全组。利用此资源,HTTP 流量可从 Internet 到达负载均衡器。默认情况下,其他端口不允许流量进入。

    • Auto Scaling 组 – 配置来在实例终止或不可用时替换实例的 Auto Scaling 组。

    • Amazon S3 存储桶 – 使用 Elastic Beanstalk 时创建的源代码、日志和其他项目的存储位置。

    • Amazon CloudWatch 警报 – 用于监控环境实例负载的两个 CloudWatch 警报,在负载过高或过低时触发。警报触发后,您的 Auto Scaling 组会扩展或收缩进行响应。

    • AWS CloudFormation 堆栈 – Elastic Beanstalk 使用 AWS CloudFormation 启动您的环境中的资源并传播配置更改。这些资源在您可通过 AWS CloudFormation 控制台查看的模板中定义。

    • 域名 – 一个域名,它以下面的形式路由到您的 Web 应用程序:subdomain.region.elasticbeanstalk.com

  3. 当环境创建完成后,使用 eb open 命令在默认浏览器中打开环境 URL。

    ~/node-express$ eb open

更新应用程序

在创建具有示例应用程序的环境后,可将其更新为自己的应用程序。在这一步中,我们会更新示例应用程序,以使用 Express 框架。

更新您的应用程序以使用 Express

  1. 添加一个将 Node Command 设为“npm start”的配置文件:

    node-express/.ebextensions/nodecommand.config

    option_settings: aws:elasticbeanstalk:container:nodejs: NodeCommand: "npm start"

    有关更多信息,请参阅使用配置文件 (.ebextensions) 进行高级环境自定义

  2. 暂存文件:

    ~/node-express$ git add . ~/node-express$ git commit -m "First express app"
  3. 部署更改:

    ~/node-express$ eb deploy
  4. 在环境变为绿色并准备就绪后,刷新 URL 以验证环境是否工作。您应看到一个显示 Welcome to Express (欢迎使用 Express) 的网页。

接下来,让我们更新 Express 应用程序以使用静态文件并添加新页面。

配置静态文件并向 Express 应用程序添加新页面

  1. 添加包含以下内容的第二个配置文件:

    node-express/.ebextensions/staticfiles.config

    option_settings: aws:elasticbeanstalk:container:nodejs:staticfiles: /public: /public

    此设置将代理服务器配置为从应用程序的 public 路径上的 /public 文件夹中提供文件。从代理静态提供文件可减少应用程序的负载。

  2. 注释掉 node-express/app.js 中的静态映射。这一步不是必须执行的,但可以很好地测试出是否正确配置了静态映射。

    // app.use(express.static(path.join(__dirname, 'public')));
  3. 将更新的文件添加到本地存储库,然后提交更改。

    ~/node-express$ git add .ebextensions/ app.js ~/node-express$ git commit -m "Serve stylesheets statically with nginx."
  4. 添加 node-express/routes/hike.js.键入以下内容:

    exports.index = function(req, res) { res.render('hike', {title: 'My Hiking Log'}); }; exports.add_hike = function(req, res) { };
  5. 更新 node-express/app.js 以包含三个新行。

    首先,添加以下行来为此路由添加 require

    hike = require('./routes/hike');

    您的文件应类似于以下代码段:

    var express = require('express'); var path = require('path'); var hike = require('./routes/hike');

    然后,将以下两行添加到 node-express/app.js 中的 var app = express(); 后面

    app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);

    您的文件应类似于以下代码段:

    var app = express(); app.get('/hikes', hike.index); app.post('/add_hike', hike.add_hike);
  6. node-express/views/index.jade 复制到 node-express/views/hike.jade

    ~/node-express$ cp views/index.jade views/hike.jade
  7. 将文件添加到本地存储库,提交更改,然后部署更新的应用程序。

    ~/node-express$ git add . ~/node-express$ git commit -m "Add hikes route and template." ~/node-express$ eb deploy
  8. 您的环境将在几分钟后进行更新。在环境变为绿色并准备就绪后,通过刷新浏览器并将 hikes 追加到 URL 末尾(例如 http://node-express-env-syypntcz2q.elasticbeanstalk.com/hikes),验证环境是否正常工作。

    您应看到标题为 My Hiking Log 的网页。

清除

如果您已使用完 Elastic Beanstalk,则可以终止您的 环境。

使用 eb terminate 命令终止您的环境以及其中包含的所有资源。

~/node-express$ eb terminate The environment "node-express-env" and all associated instances will be terminated. To confirm, type the environment name: node-express-env INFO: terminateEnvironment is starting. ...