发布于 2026-01-06 5 阅读
0

使用 AWS Lambda、Node.js、TypeScript 和 Express.js 创建无服务器 API 简介 入门 结论

使用 AWS Lambda 和 Node.js,结合 TypeScript 和 Express.js 创建无服务器 API

介绍

入门

结论

介绍

本文将使用Node.jsTypeScriptExpress.js创建一个应用程序,其中将实现无服务器 API 并将其部署到AWS Lambda服务上。

入门

在 AWS Lambda 上创建并配置账户

AWS Lambda是一项服务,它允许您运行几乎任何类型的应用程序的代码,而无需预置或管理服务器或集群。

1.让我们创建并配置账户。访问网站https://aws.amazon.com/lambda/并单击“开始使用 AWS Lambda”按钮

AWS Lambda - 首页

2.现在我们将点击“Root 用户”选项,填写“Root 用户电子邮件地址”字段,然后点击“下一步”按钮

AWS Lambda - 登录

笔记:

3.接下来,我们将填写“密码”字段,然后点击“登录”按钮。

AWS Lambda - 根用户登录

4.登录账户后,在搜索栏中输入aim,然后点击AIM选项。

AWS Lambda - IAM 服务

5.现在我们将点击“用户”菜单。

AWS Lambda - IAM 控制面板

6.接下来,我们将点击“添加用户”按钮。

AWS Lambda - 用户

7.进入添加用户界面后,我们将填写用户名字段,然后点击“下一步”按钮

AWS Lambda - 指定用户详细信息

8.现在我们将点击“直接附加策略”选项,点击“AdministratorAccess”项,然后点击“下一步”按钮。

AWS Lambda - 设置权限

9.接下来,我们将点击“创建用户”按钮。

AWS Lambda - 审核和创建

10.创建用户后,我们将点击带有用户名的链接。

AWS Lambda - 用户

11.现在我们将点击“安全凭证”选项卡,然后点击“创建访问密钥”按钮。

AWS Lambda - 安全凭证

12.接下来,我们将单击“命令行界面 (CLI)”选项,然后单击“下一步”按钮

AWS Lambda - 访问密钥最佳实践和替代方案

13.然后,我们将点击“创建访问密钥”按钮。

AWS Lambda - 设置描述标签

14.创建访问密钥后,我们将复制“访问密钥”“秘密访问密钥”,因为这些密钥将在命令行中使用,然后单击“创建访问密钥”按钮。

AWS Lambda - 获取访问密钥

15.完成!您的账户已创建、配置完成,密钥也已生成。

创建 Node.js 应用程序

Node.js是一款开源的跨平台软件,用于在服务器端运行 JavaScript 代码。它基于谷歌的 V8 JavaScript 解释器。

1.让我们创建应用程序。我们将创建应用程序文件夹。

mkdir nodejs-aws-lambda
cd nodejs-aws-lambda
Enter fullscreen mode Exit fullscreen mode

2.现在我们将创建文件package.json。此选项-y允许在不询问应用程序名称、版本等问题的情况下创建文件。

npm init -y
Enter fullscreen mode Exit fullscreen mode

3.接下来,我们将安装应用程序依赖expressserverless-http

npm install express serverless-http
Enter fullscreen mode Exit fullscreen mode

4.安装完应用程序依赖项后,我们将安装开发依赖项ts-nodetypescript以及@types/express

npm install rimraf ts-node typescript @types/express --save-dev
Enter fullscreen mode Exit fullscreen mode

5.现在我们将创建 TypeScript 配置文件tsconfig.json

./node_modules/.bin/tsc --init
Enter fullscreen mode Exit fullscreen mode

6.接下来,我们将配置 TypeScript 文件tsconfig.json

{
  "compilerOptions": {
    "target": "ESNEXT",
    "module": "commonjs",
    "outDir": "./dist",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  },
  "include": [
    "src/**/*"
  ]
}
Enter fullscreen mode Exit fullscreen mode

7.配置好 TypeScript 文件后,我们将在文件中添加转译脚本package.json

  "scripts": {
    "build": "rimraf dist && tsc"
  },
Enter fullscreen mode Exit fullscreen mode

8.现在我们将创建文件夹srcsrc/routessrc/routes/v1

mkdir -p src/routes/v1
Enter fullscreen mode Exit fullscreen mode

9.接下来,我们将创建路由文件src/routes/v1/books.ts

touch src/routes/v1/books.route.ts
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

11.src/routes/v1/index.ts现在我们将创建版本 1 的路由配置文件。

touch src/routes/v1/index.ts
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

13.src/routes/index.ts然后,我们将创建包含路由配置的文件。

touch src/routes/index.ts
Enter fullscreen mode Exit fullscreen mode

14.创建路由配置文件后,我们将把路由配置添加到该文件中src/routes/index.ts

import { Router } from 'express';

import v1 from './v1';

const router = Router();

router.use('/v1', v1);

export default router;
Enter fullscreen mode Exit fullscreen mode

15.src/app.ts现在我们将使用 Express.js 设置创建应用程序文件。

touch src/app.ts
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

17.serverless.yml添加 Express.js 设置后,我们将使用 AWS Lambda 设置创建 Serverless 配置文件。

touch serverless.yml
Enter fullscreen mode Exit fullscreen mode

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+}
Enter fullscreen mode Exit fullscreen mode

19.接下来,我们将构建应用程序。

npm run build

> nodejs-aws-lambda@1.0.0 build /home/rodrigokamada/nodejs-aws-lambda
> rimraf dist && tsc
Enter fullscreen mode Exit fullscreen mode

20.应用程序构建完成后,我们将安装serverless工具。

npm install -g serverless
Enter fullscreen mode Exit fullscreen mode

21.现在我们将配置该serverless工具。

serverless config credentials --provider aws --key 7YEE7ANQHFDGLZAKIAQR --secret yyyMEboMvA/IXUFI7djIoMRBJ3b0kFQ8p8TN6pKW
 Profile "default" has been configured
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

23.应用程序部署完成后,我们将确认应用程序是否已部署到 AWS Lambda 服务上。我们将在搜索框中输入“lambda” ,然后点击Lambda选项

AWS Lambda - Lambda 服务

24.现在我们将确认是否创建了一个名为nodejs-aws-lambda-dev-app 的函数

AWS Lambda - Lambda 函数

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"
  }
]
Enter fullscreen mode Exit fullscreen mode

2.完成!我们测试了部署在 AWS Lambda 服务上的无服务器 API。

结论

本文内容总结如下:

  • 我们在亚马逊网络服务(AWS)上创建了一个账户。
  • 我们在亚马逊网络服务(AWS)上创建了访问密钥。
  • 我们创建了一个Node.js应用程序。
  • 我们使用 Express.js 在 Node.js 应用程序中创建了路由。
  • 我们在 AWS Lambda 服务上测试了 Node.js 应用程序。

您可以利用本文在云端提供 API,而无需管理服务器或集群。

感谢阅读,希望您喜欢这篇文章!

这篇教程是用葡萄牙语发布在我的博客上的。

为了及时了解我发布的最新文章,请在TwitterLinkedIn上关注我。

文章来源:https://dev.to/aws-builders/creating-a-serverless-api-using-aws-lambda-and-nodejs-with-typescript-and-expressjs-4kfk