## 步骤1- 使用serverless 快速构建Express应用 ### 目的 通过把一个传统 Web 应用使用容器化方式部署到 AWS Lambda,体验 AWS 无服务器服务。涉及服务:AWS Lambda、Amazon API Gateway、Amazon ECR、AWS SAM、AWS Cloud9。 ### 步骤 1. 构建本地应用。在本地搭建 Express 应用,这是最传统的应用构建方式。 2. 改造成容器。将前述 Express 应用改造成容器。 3. 改造成无服务器应用。将容器应用改造成无服务器应用。 ### 1. 构建本地应用 - 下载 Express 和 EJS - 创建网页文件 - 本地测试 #### 1-1. 下载 Express 和 EJS 我们先下载 Express 和 EJS 以及 Body Parser 工具。 Express 是 Web 服务器,EJS(Embedded JavaScript)是一个用 JS 来写模板的工具,Body Parser 用于提取 HTTP 请求中的信息。 ```shell # 进入 environment 文件夹 cd ~/environment # 创建子文件夹 mkdir serverless-express cd serverless-express # 初始化 Node 项目 npm init -y # 下载 Express 和 EJS npm i express ejs body-parser ``` #### 1-2. 创建网页文件 接下来我们创建一个非常简单的待办事项 Web 应用。复制下面的代码,粘贴到命令行,并执行。 ```shell # 创建入口文件(index.js) cat <<"EOF" > index.js var express = require('express'); var app = express(); var port = 8081; var bodyParser = require("body-parser"); app.use(bodyParser.urlencoded({ extended: true })); app.set('view engine', 'ejs'); var task = ["buy milk", "learn javascript", "learn express"]; app.post('/addtask', function (req, res) { var newTask = req.body.newtask; task.push(newTask); res.redirect("/"); }); app.get("/", function(req, res) { res.render('index', { task, completed }); }); var completed = ["finish learning nodejs"]; app.post("/removetask", function(req, res) { var completedTask = req.body.check; if (typeof completedTask === "string") { completed.push(completedTask); task.splice(task.indexOf(completedTask), 1); } else if (typeof completedTask === "object") { for (var i = 0; i < completedTask.length; i++){ completed.push(completedTask[i]); task.splice(task.indexOf(completedTask[i]), 1); } } res.redirect("/"); }); app.listen(port, function () { console.log(`LISTENING PORT ${port}`); }); EOF ``` 然后我们创建一个网页模板。同样,复制下面的代码,粘贴到命令行,并执行。 ```shell # 创建模板文件夹 mkdir views # 创建模板(views/index.ejs) cat <<"EOF" > views/index.ejs