使用 AWS CloudFormation 集成 TiDB Cloud Serverless 与 Amazon Lambda
本文档提供了一个分步指南,介绍如何使用 AWS CloudFormation 将 TiDB Cloud Serverless,一款云原生分布式 SQL 数据库,与 AWS Lambda,一项无服务器、事件驱动的计算服务集成。通过将 TiDB Cloud Serverless 与 Amazon Lambda 集成,你可以利用 TiDB Cloud Serverless 和 AWS Lambda 的微服务架构,实现高扩展性和成本效益。AWS CloudFormation 可自动化创建和管理 AWS 资源,包括 Lambda 函数、API Gateway 和 Secrets Manager。
方案概述
在本指南中,你将创建一个功能完整的在线书店项目,包含以下组件:
- AWS Lambda Function:使用 Sequelize ORM 和 Fastify API 框架处理请求并查询 TiDB Cloud Serverless 集群中的数据。
- AWS Secrets Manager SDK:获取并管理 TiDB Cloud Serverless 集群的连接配置信息。
- AWS API Gateway:处理 HTTP 请求路由。
- TiDB Cloud Serverless:云原生分布式 SQL 数据库。
AWS CloudFormation 用于为该项目创建所需的资源,包括 Secrets Manager、API Gateway 和 Lambda Functions。
书店项目的结构如下所示:
前置条件
在开始之前,请确保你具备以下条件:
一个 AWS 账号,并有权限访问以下 AWS 服务:
一个 TiDB Cloud 账号和一个 TiDB Cloud Serverless 集群。获取你的 TiDB Cloud Serverless 集群的连接信息:
API 测试工具,如 Postman 和 cURL。本文档中的大多数示例使用 cURL。对于 Windows 用户,推荐使用 Postman。
下载项目的 最新发布资源 到本地,包括
cloudformation_template.yml
和cloudformation_template.json
文件。
如果你使用的区域不是 us-east-1
,请修改并重新构建 Lambda 函数代码
如果你将集群区域设置为 us-east-1
,请跳过本节,直接前往 步骤 1:使用 AWS CloudFormation 搭建书店项目。
如果你在 us-east-1
以外的 AWS 区域创建 AWS 资源,则需要修改 Lambda 函数代码,重新构建,并将代码包上传到你自己的 S3 bucket。
为避免本地开发环境问题,建议你使用云原生开发环境,如 Gitpod。
要重新构建并上传代码包到你自己的 S3 bucket,请执行以下操作:
初始化开发环境。
- 打开 Gitpod 工作区,并使用你的 GitHub 账号登录。
修改 Lambda 函数代码。
- 在左侧边栏打开
aws-lambda-cloudformation/src/secretManager.ts
文件。 - 定位到第 22 行,修改
region
变量为你自己的区域。
- 在左侧边栏打开
重新构建代码包。
安装依赖项。
在 Gitpod 中打开终端。
进入工作目录:
cd aws-lambda-cloudformation安装依赖:
yarn
重新构建代码包。
构建代码包。
yarn build检查
aws-lambda-cloudformation/dist/index.zip
文件。右键点击
index.zip
文件并选择 Download。
将重新构建的代码包上传到你自己的 S3 bucket。
- 访问 AWS 管理控制台中的 S3 服务。
- 在你选择的区域创建一个新的 bucket。
- 将
index.zip
文件上传到该 bucket。 - 记录 S3 bucket 名称和区域,后续会用到。
步骤 1. 使用 AWS CloudFormation 搭建书店项目
要使用 AWS CloudFormation 搭建书店项目,请执行以下操作:
进入 AWS 管理控制台,访问 AWS CloudFormation 服务。
点击 Create Stack > With new resources (standard)。
在 Create Stack 页面,完成堆栈创建流程。
在 Prerequisite 区域,选择 Choose an existing template。
在 Specify template 区域,选择 Upload a template file,点击 Choose file 上传模板文件(YAML 或 JSON 格式),然后点击 Next。
如果你还没有该文件,请从 GitHub 下载。该文件包含用于创建项目所需资源的 AWS CloudFormation 模板。
指定堆栈详细信息。
如果你使用
us-east-1
作为集群区域,请按照下图填写各项字段:- Stack name:输入堆栈名称。
- S3Bucket:输入存放 zip 文件的 S3 bucket 名称。
- S3Key:输入 S3 key。
- TiDBDatabase:输入 TiDB Cloud 集群名称。
- TiDBHost:输入 TiDB Cloud 数据库访问的主机 URL。请填写
localhost
。 - TiDBPassword:输入 TiDB Cloud 数据库访问密码。
- TiDBPort:输入 TiDB Cloud 数据库访问端口。
- TiDBUser:输入 TiDB Cloud 数据库访问用户名。
如果你使用的 AWS 区域不是
us-east-1
,请按照以下步骤操作:- 参考 如果你使用的区域不是
us-east-1
,请修改并重新构建 Lambda 函数代码 修改 Lambda 函数代码,重新构建并上传代码包到你自己的 S3 bucket。 - 在堆栈详细信息字段中,根据你的配置填写
S3Bucket
和S3Key
参数。 - 其他字段按照上图填写。
- 参考 如果你使用的区域不是
配置堆栈选项。你可以使用默认配置。
审核并创建堆栈。
步骤 2. 使用书店项目
堆栈创建完成后,你可以按如下方式使用该项目:
访问 AWS 管理控制台中的 API Gateway 服务,点击
TiDBCloudApiGatewayV2
API,然后在左侧点击 API: TiDBCloudApiGatewayV2。在 Overview 页面复制
Invoke URL
。该 URL 即为 API 端点。使用 Postman 或 cURL 等 API 测试工具测试 API:
初始化模拟书籍:
curl -X POST -H "Content-Type: application/json" -d '{"count":100}' https://<your-api-endpoint>/book/init获取所有书籍:
curl https://<your-api-endpoint>/book根据书籍 ID 获取书籍:
curl https://<your-api-endpoint>/book/<book-id>创建书籍:
curl -X POST -H "Content-Type: application/json" -d '{ "title": "Book Title", "type": "Test", "publishAt": "2022-12-15T21:01:49.000Z", "stock": 123, "price": 12.34, "authors": "Test Test" }' https:// <your-api-endpoint>/book更新书籍:
curl -X PUT -H "Content-Type: application/json" -d '{ "title": "Book Title(updated)" }' https://<your-api-endpoint>/book/<book-id>删除书籍:
curl -X DELETE https://<your-api-endpoint>/book/<book-id>
步骤 3. 清理资源
为避免产生不必要的费用,请清理所有已创建的资源。
- 访问 AWS 管理控制台。
- 删除你创建的 AWS CloudFormation 堆栈。