使用 AWS Lambda 和 Node.js,结合 TypeScript 和 Express.js 创建无服务器 API
介绍
入门
结论
介绍
本文将使用Node.js、TypeScript和Express.js创建一个应用程序,其中将实现无服务器 API 并将其部署到AWS Lambda服务上。
入门
在 AWS Lambda 上创建并配置账户
AWS Lambda是一项服务,它允许您运行几乎任何类型的应用程序的代码,而无需预置或管理服务器或集群。
1.让我们创建并配置账户。访问网站https://aws.amazon.com/lambda/并单击“开始使用 AWS Lambda”按钮。
2.现在我们将点击“Root 用户”选项,填写“Root 用户电子邮件地址”字段,然后点击“下一步”按钮。
笔记:
- 如果您没有亚马逊账户,请按照“使用 Amazon Cognito 对 Angular 应用程序进行身份验证”会话中的步骤 1 到 9 操作,在“在 Amazon Cognito 上创建和配置账户”中创建和配置账户。
3.接下来,我们将填写“密码”字段,然后点击“登录”按钮。
4.登录账户后,在搜索栏中输入aim,然后点击AIM选项。
5.现在我们将点击“用户”菜单。
6.接下来,我们将点击“添加用户”按钮。
7.进入添加用户界面后,我们将填写用户名字段,然后点击“下一步”按钮。
8.现在我们将点击“直接附加策略”选项,点击“AdministratorAccess”项,然后点击“下一步”按钮。
9.接下来,我们将点击“创建用户”按钮。
10.创建用户后,我们将点击带有用户名的链接。
11.现在我们将点击“安全凭证”选项卡,然后点击“创建访问密钥”按钮。
12.接下来,我们将单击“命令行界面 (CLI)”选项,然后单击“下一步”按钮。
13.然后,我们将点击“创建访问密钥”按钮。
14.创建访问密钥后,我们将复制“访问密钥”和“秘密访问密钥”,因为这些密钥将在命令行中使用,然后单击“创建访问密钥”按钮。
15.完成!您的账户已创建、配置完成,密钥也已生成。
创建 Node.js 应用程序
Node.js是一款开源的跨平台软件,用于在服务器端运行 JavaScript 代码。它基于谷歌的 V8 JavaScript 解释器。
1.让我们创建应用程序。我们将创建应用程序文件夹。
mkdir nodejs-aws-lambda
cd nodejs-aws-lambda
2.现在我们将创建文件package.json。此选项-y允许在不询问应用程序名称、版本等问题的情况下创建文件。
npm init -y
3.接下来,我们将安装应用程序依赖express项serverless-http。
npm install express serverless-http
4.安装完应用程序依赖项后,我们将安装开发依赖项ts-node,typescript以及@types/express。
npm install rimraf ts-node typescript @types/express --save-dev
5.现在我们将创建 TypeScript 配置文件tsconfig.json。
./node_modules/.bin/tsc --init
6.接下来,我们将配置 TypeScript 文件tsconfig.json。
{
"compilerOptions": {
"target": "ESNEXT",
"module": "commonjs",
"outDir": "./dist",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
},
"include": [
"src/**/*"
]
}
7.配置好 TypeScript 文件后,我们将在文件中添加转译脚本package.json。
"scripts": {
"build": "rimraf dist && tsc"
},
8.现在我们将创建文件夹src,src/routes和src/routes/v1。
mkdir -p src/routes/v1
9.接下来,我们将创建路由文件src/routes/v1/books.ts。
touch src/routes/v1/books.route.ts
10.创建路由文件后,我们将向该文件中添加路由src/routes/v1/books.route.ts。
import { Request, Response, Router } from 'express';
const router = Router();
router.get('/', async (req: Request, res: Response) => {
try {
res.status(200).json([]);
} catch (error) {
console.error('An error ocurred:', error);
res.status(500).json(error);
}
});
router.get('/:id', async (req: Request, res: Response) => {
try {
res.status(200).json({});
} catch (error) {
console.error('An error ocurred:', error);
res.status(500).json(error);
}
});
router.post('/', async (req: Request, res: Response) => {
try {
res.status(201).json({});
} catch (error) {
console.error('An error occurred:', error);
res.status(500).json(error);
}
});
router.put('/:id', async (req: Request, res: Response) => {
try {
res.status(200).json({});
} catch (error) {
console.error('An error occurred:', error);
res.status(500).json(error);
}
});
router.delete('/:id', async (req: Request, res: Response) => {
try {
res.status(200).json({});
} catch (error) {
console.error('An error occurred:', error);
res.status(500).json(error);
}
});
export default router;
11.src/routes/v1/index.ts现在我们将创建版本 1 的路由配置文件。
touch src/routes/v1/index.ts
12.接下来,我们将在文件中添加路由配置src/routes/v1/index.ts。
import { Router } from 'express';
import books from './books.route';
const router = Router();
router.use('/books', books);
export default router;
13.src/routes/index.ts然后,我们将创建包含路由配置的文件。
touch src/routes/index.ts
14.创建路由配置文件后,我们将把路由配置添加到该文件中src/routes/index.ts。
import { Router } from 'express';
import v1 from './v1';
const router = Router();
router.use('/v1', v1);
export default router;
15.src/app.ts现在我们将使用 Express.js 设置创建应用程序文件。
touch src/app.ts
16.接下来,我们将在文件中添加 Express.js 设置src/app.ts。
import express from 'express';
import serverless from 'serverless-http';
import routes from './routes';
const app = express();
app.use(express.json());
app.use('/', routes);
app.use((req: express.Request, res: express.Response, next: express.NextFunction) => {
res.status(404).send();
});
app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => {
res.status(err.status || 500).send();
});
export const handler = serverless(app);
17.serverless.yml添加 Express.js 设置后,我们将使用 AWS Lambda 设置创建 Serverless 配置文件。
touch serverless.yml
18.现在我们将向文件中添加 AWS Lambda 设置serverless.yml。
service: nodejs-aws-lambda
provider:
name: aws
runtime: nodejs18.x
functions:
app:
handler: dist/app.handler
events:
- http: ANY /
- http: ANY /{proxy+}
19.接下来,我们将构建应用程序。
npm run build
> nodejs-aws-lambda@1.0.0 build /home/rodrigokamada/nodejs-aws-lambda
> rimraf dist && tsc
20.应用程序构建完成后,我们将安装serverless工具。
npm install -g serverless
21.现在我们将配置该serverless工具。
serverless config credentials --provider aws --key 7YEE7ANQHFDGLZAKIAQR --secret yyyMEboMvA/IXUFI7djIoMRBJ3b0kFQ8p8TN6pKW
✔ Profile "default" has been configured
22.接下来,我们将部署应用程序。
serverless deploy
Deploying nodejs-aws-lambda to stage dev (us-east-1)
✔ Service deployed to stack nodejs-aws-lambda-dev (56s)
endpoints:
ANY - https://5imsknki87.execute-api.us-east-1.amazonaws.com/dev
ANY - https://5imsknki87.execute-api.us-east-1.amazonaws.com/dev/{proxy+}
functions:
app: nodejs-aws-lambda-dev-app (853 kB)
Monitor Express APIs by route with the Serverless Console: run "serverless --console"
23.应用程序部署完成后,我们将确认应用程序是否已部署到 AWS Lambda 服务上。我们将在搜索框中输入“lambda” ,然后点击Lambda选项。
24.现在我们将确认是否创建了一个名为nodejs-aws-lambda-dev-app 的函数。
25.完成!应用程序已创建并部署到 AWS Lambda。
该应用程序存储库位于https://github.com/rodrigokamada/nodejs-aws-lambda。
在 AWS Lambda 服务上测试应用程序
1.让我们在 AWS Lambda 服务上测试该应用程序。向创建的路由和提供的 URL 发送请求。
curl -s "https://5imsknki87.execute-api.us-east-1.amazonaws.com/dev/v1/books" | jq
[
{
"id": "ebb3d966-74e4-11ed-8db0-136d663b98e7",
"title": "Some Title",
"author": "Some Author"
}
]
2.完成!我们测试了部署在 AWS Lambda 服务上的无服务器 API。
结论
本文内容总结如下:
- 我们在亚马逊网络服务(AWS)上创建了一个账户。
- 我们在亚马逊网络服务(AWS)上创建了访问密钥。
- 我们创建了一个Node.js应用程序。
- 我们使用 Express.js 在 Node.js 应用程序中创建了路由。
- 我们在 AWS Lambda 服务上测试了 Node.js 应用程序。
您可以利用本文在云端提供 API,而无需管理服务器或集群。
感谢阅读,希望您喜欢这篇文章!
这篇教程是用葡萄牙语发布在我的博客上的。
为了及时了解我发布的最新文章,请在Twitter和LinkedIn上关注我。
文章来源:https://dev.to/aws-builders/creating-a-serverless-api-using-aws-lambda-and-nodejs-with-typescript-and-expressjs-4kfk















