在本教程中,您将创建一个无服务器 API,用于创建、读取、更新和删除 DynamoDB 表中的项目。DynamoDB 是一项完全托管的 NoSQL 数据库服务,提供快速而可预测的性能,能够实现无缝扩展。完成本教程大约需要 30 分钟,您可以在AWS免费套餐
首先,使用 DynamoDB 控制台创建 DynamoDB 表。然后,使用 AWS Lambda 控制台创建 Lambda 函数。接下来,使用 API Gateway 控制台创建 HTTP API。最后,测试您的 API。
当您调用 HTTP API 时,API Gateway 会将请求路由到您的 Lambda 函数。Lambda 函数与 DynamoDB 进行交互,并将响应返回 API Gateway。然后 API Gateway 会向您返回响应。

要完成本练习,您需要一个AWS账户以及一位具有控制台访问权限的 AWS Identity and Access Management 用户。有关更多信息,请参阅 设置为使用 API Gateway。
在本教程中,您将使用 AWS Management Console。如需创建此 API 和所有相关资源的 AWS SAM 模板,请参阅 template.yaml
。
主题
步骤 1:创建 DynamoDB 表
您可以使用 DynamoDB 表为您的 API 存储数据。
每个项目都有一个唯一的 ID,我们将其用作表的分区键。
创建 DynamoDB 表
从 https://console.aws.amazon.com/dynamodb/
打开 DynamoDB 控制台。 -
选择创建表。
-
对于表名称,输入
http-crud-tutorial-items
。 -
对于分区键,输入
id
。 -
选择创建表。
步骤 2:创建 Lambda 函数
创建 Lambda 函数以用作您的 API 后端。此 Lambda 函数从 DynamoDB 中创建、读取、更新和删除项目。该函数使用 API Gateway 中的事件来决定如何与 DynamoDB 交互。为简单起见,本教程使用单个 Lambda 函数。作为最佳实践,您应该为每个路由创建单独的函数。有关更多信息,请参阅 The Lambda monolith
创建 Lambda 函数
通过以下网址登录 Lambda 控制台:https://console.aws.amazon.com/lambda
。 -
选择创建函数。
-
对于函数名称,请输入
http-crud-tutorial-function
。 -
在运行时中,选择受支持的最新 Node.js 或 Python 运行时。
-
在权限下,选择更改默认执行角色。
-
选择从 AWS 策略模板中创建新角色。
-
对于角色名称,输入
http-crud-tutorial-role
。 -
对于策略模板,选择
Simple microservice permissions
。此策略授予 Lambda 函数与 DynamoDB 进行交互的权限。注意
为简单起见,本教程使用托管策略。作为最佳实践,您应创建自己的 IAM 策略以授予所需的最低权限。
-
选择 Create function (创建函数)。
-
在控制台的代码编辑器中打开 Lambda 函数,并将其内容替换为以下代码。选择部署以更新您的函数。
import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; import { DynamoDBDocumentClient, ScanCommand, PutCommand, GetCommand, DeleteCommand, } from "@aws-sdk/lib-dynamodb"; const client = new DynamoDBClient({}); const dynamo = DynamoDBDocumentClient.from(client); const tableName = "http-crud-tutorial-items"; export const handler = async (event, context) => { let body; let statusCode = 200; const headers = { "Content-Type": "application/json", }; try { switch (event.routeKey) { case "DELETE /items/{id}": await dynamo.send( new DeleteCommand({ TableName: tableName, Key: { id: event.pathParameters.id, }, }) ); body = `Deleted item ${event.pathParameters.id}`; break; case "GET /items/{id}": body = await dynamo.send( new GetCommand({ TableName: tableName, Key: { id: event.pathParameters.id, }, }) ); body = body.Item; break; case "GET /items": body = await dynamo.send( new ScanCommand({ TableName: tableName }) ); body = body.Items; break; case "PUT /items": let requestJSON = JSON.parse(event.body); await dynamo.send( new PutCommand({ TableName: tableName, Item: { id: requestJSON.id, price: requestJSON.price, name: requestJSON.name, }, }) ); body = `Put item ${requestJSON.id}`; break; default: throw new Error(`Unsupported route: "${event.routeKey}"`); } } catch (err) { statusCode = 400; body = err.message; } finally { body = JSON.stringify(body); } return { statusCode, body, headers, }; };
步骤 3:创建 HTTP API
HTTP API 为您的 Lambda 函数提供了 HTTP 端点。在此步骤中,您将创建空 API。在以下步骤中,您将配置路由和集成以连接 API 和 Lambda 函数。
要创建 HTTP API
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择创建 API,然后为 HTTP API 选择构建。
-
对于 API 名称,请输入
http-crud-tutorial-api
。 -
选择下一步。
-
对于配置路由,选择下一步以跳过路由创建。稍后再创建路由。
-
查看 API Gateway 为您创建的阶段,然后选择下一步。
-
选择创建。
步骤 4:创建路由
路由是将传入的 API 请求发送到后端资源的一种方式。路由包含两部分:HTTP 方法和资源路径,例如 GET /items
。对于此示例 API,我们创建了四个路由:
-
GET /items/{id}
-
GET /items
-
PUT /items
-
DELETE /items/{id}
要创建路由
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
选择路由。
-
选择创建。
-
对于方法,选择
GET
。 -
对于路径,请输入
/items/{id}
。路径结尾的{id}
是 API Gateway 在客户端提出请求时从请求路径中接收的路径参数。 -
选择创建。
-
对
GET /items
、DELETE /items/{id}
和PUT /items
重复步骤 4-7。

步骤 5:创建集成
您可以创建集成以将路由连接到后端资源。对于此示例 API,您可以创建一个用于所有路由的 Lambda 集成。
要创建集成
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
选择集成。
-
选择管理集成,然后选择创建。
-
跳过将此集成附加到一个路由。在后续步骤中再完成此操作。
-
对于集成类型,选择 Lambda 函数。
-
对于 Lambda 函数,输入
http-crud-tutorial-function
。 -
选择创建。
步骤 6:将集成附加到路由
对于此示例 API,您对所有路由都使用相同的 Lambda 集成。将集成附加到所有的 API 路由后,当客户端调用您的任何路由时,您的 Lambda 函数将被调用。
要将集成附加到路由
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
选择集成。
-
选择路由。
-
在选择现有集成下,选择
http-crud-tutorial-function
。 -
选择附加集成。
-
对所有路由重复步骤 4-6。
所有路由均显示附加了 AWS Lambda 集成。

现在您已经有了一个包含路由和集成的 HTTP API,您可以测试 API 了。
步骤 7:测试您的 API
为了确保您的 API 正常工作,您可以使用 curl
要获取调用 API 的 URL
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
请记下您的 API 的调用 URL。它显示在详细信息页面上的调用 URL 下。
-
请复制您的 API 的调用 URL。
完整的 URL 类似于以下所示:
https://
。abcdef123
.execute-api.us-west-2
.amazonaws.com
要创建或更新项目
-
使用以下命令以创建或更新项目。该命令包括带有项目 ID、价格和名称的请求正文。
curl -X "PUT" -H "Content-Type: application/json" -d "{\"id\": \"123\", \"price\": 12345, \"name\": \"myitem\"}" https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items
要获取所有项目
-
使用以下命令列出所有项目。
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items
要获取一个项目
-
使用以下命令按 ID 获取项目。
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items/123
如何删除项目
-
使用以下命令删除项目。
curl -X "DELETE" https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items/123
-
获取所有项目以验证项目已删除。
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/items
步骤 8:清除
为避免不必要的成本,请删除作为本入门练习的一部分而创建的资源。以下步骤将删除 HTTP API、Lambda 函数和相关资源。
删除 DynamoDB 表
从 https://console.aws.amazon.com/dynamodb/
打开 DynamoDB 控制台。 -
选择您的表。
-
选择删除表。
-
确认您的选择,然后选择删除。
要删除 HTTP API
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
在 API 页面上,选择一个 API。选择操作,然后选择删除。
-
选择删除。
要删除 Lambda 函数
通过以下网址登录 Lambda 控制台:https://console.aws.amazon.com/lambda
。 -
在函数页面上,选择一个函数。选择操作,然后选择删除。
-
选择删除。
要删除 Lambda 函数的日志组
-
在 Amazon CloudWatch 控制台中,打开日志组页面
。 -
在日志组页面上,选择函数的日志组 (
/aws/lambda/http-crud-tutorial-function
)。选择操作,然后选择删除日志组。 -
选择删除。
要删除 Lambda 函数的执行角色
-
打开AWS Identity and Access Management控制台中的角色页面
。 -
选择函数的角色,例如
http-crud-tutorial-role
。 -
选择删除角色。
-
选择是,删除。
下一步:使用 AWS SAM 或 AWS CloudFormation 实现自动化
您可以使用 AWS CloudFormation 或 AWS SAM 自动创建和清理AWS资源。如需本教程中所用的 AWS SAM 示例模板,请参阅 template.yaml
。
如需示例 AWS CloudFormation 模板,请参阅示例 AWS CloudFormation 模板