部署一个简单的 Node.js 程序到 AWS Elastic Beanstalk

Wikipedia:

AWS Elastic Beanstalk is an orchestration service offered by Amazon Web Services for deploying applications which orchestrates various AWS services

AWS:

AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services developed with Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker on familiar servers such as Apache, Nginx, Passenger, and IIS.

Elastic Beanstalk,本来以为是容器服务,但其实更像是在 EC2 实例上进行自动化配置,Orchestration 可以理解为使用所有相关技术为特定技术栈的应用程序配置运行环境。

但是使用它和使用容器服务的优缺点我又困惑了。

AWS 的产品线铺这么开也许是商业策略,另外,就需要大量持有资格认证的专家顾问来答疑解惑了。

说正题

AWS Elastic Beanstalk 创建应用程序

  1. 进入 Elastic Beanstalk,点击 Create Application
  2. 填写 Application Name
  3. Platform 选择 Node.js
  4. Application code 选择默认的 Sample application
  5. 确认创建应用程序

Elastic Beanstalk 会为 Application 创建一个关联的 Environment,需要几分钟时间。

一个 Application 可以对应多个 Environment,这个可以理解。但是所有的配置项都归在 Environment 下,包括 Application Code,所以 Application 的概念很让人费解。暂时不深究。

Application code 也可以选择 Amazon S3 或本地上传,但我们是不会用这种简单的方法的,所以暂时先选择 Sample application。

Environment 创建完成后,你会得到一个基于 elasticbeanstalk.com 的子域名,点击打开 Sample application,确认应用程序创建无误。

AWS Elastic Beanstalk sample application

AWS CodePipeline 部署应用程序

AWS: AWS CodePipeline is a continuous delivery service

Node.js Express 编写一个简单的 Web app,push 到 GitHub

const express = require("express");
const app = express();

const port = process.env.port || 3000;

app.listen(port, () => {
  console.log(`listening on port ${port}`);
});

app.get("/", (req, res) => {
  res.send("Node.js app deployed to AWS Elastic Beanstalk");
});
  1. 进入 CodePipeline,点击 Create pipeline。
  2. 填写 Pipeline name,下一步。
  3. Source provider, 选择 GitHub,连接到 GitHub 账户,选择 repo 和 branch,下一步。
  4. Skip build stage。
  5. Deploy provider 选择 AWS Elastic Beanstalk,Application Name 和 Environment Name 选择之前在 Elastic Beanstalk 里创建的 Application 和 Environment,下一步。
  6. 确认创建 pipeline。

Pipeline 会自动把 GitHub repo 的更新部署到 Elastic Beanstalk application,在 pipeline 页面可以查看执行状态。

AWS CodePipeline

其它

打开链接查看程序更新,如果返回 502 Bad Gateway 错误,是因为默认端口设置。

找到对应的 Environment,打开 Configuration > Software - Edit,在 Environment properties 部分填入以下内容。

Name Value
port 8081