实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API
理论千遍,不如动手一遍!在前面几篇文章中,我们了解了 Serverless 的概念、FaaS 的核心原理以及 BaaS 的重要作用。现在,是时候把这些知识运用起来,亲手构建一个简单但完整的 Serverless 应用了。
本次实战,我们将使用 Amazon Web Services (AWS) 这个主流的云平台,结合它的两个核心 Serverless 服务:
- AWS Lambda (FaaS): 运行我们的后端代码。
- AWS API Gateway (BaaS): 创建一个公开的 HTTP 接口,接收请求并触发 Lambda 函数。
目标: 创建一个简单的 HTTP GET API 端点,当用户访问这个端点时,它会返回一个 JSON 消息:“Hello from Lambda!”。
听起来很简单?没错!但这将让你体验到 Serverless 开发的核心流程。
准备工作
在开始之前,请确保你已准备好:
- 一个 AWS 账户: 如果没有,可以访问 AWS 官网 免费注册一个。新用户通常有一年的免费套餐额度,足够我们本次实验使用。
- 登录 AWS 管理控制台: 我们将主要通过 AWS 的网页界面来完成操作,对新手更友好。
- (可选) Node.js 环境: 我们将使用 Node.js 编写 Lambda 函数代码。虽然可以直接在 AWS 控制台编辑,但如果你想在本地编写和测试,需要安装 Node.js (LTS 版本即可)。
准备好了吗?我们开始吧!
第一步:创建 Lambda 函数
我们的“大脑”——处理请求的代码,将放在 Lambda 函数中。
- 登录 AWS 管理控制台。
- 在顶部的搜索栏中输入
Lambda
,然后点击进入 Lambda 服务页面。 - 点击 “创建函数” (Create function) 按钮。
- 选择 “从头开始创作” (Author from scratch)。
- 基本信息配置:
- 函数名称 (Function name): 输入一个有意义的名称,例如
myHelloFunction
。 - 运行时 (Runtime): 选择一个较新的 Node.js LTS 版本,例如
Node.js 18.x
或Node.js 20.x
。 - 架构 (Architecture): 保持默认的
x86_64
即可。 - 权限 (Permissions): 展开 “更改默认执行角色” (Change default execution role)。选择 “创建具有基本 Lambda 权限的新角色” (Create a new role with basic Lambda permissions)。这将自动创建一个允许函数将日志写入 AWS CloudWatch 的角色,方便后续排查问题。
- 点击 “创建函数” (Create function)。等待函数创建完成。
编写函数代码:
- 函数创建成功后,向下滚动到 “代码源” (Code source) 部分。
- 你会看到一个默认的
index.mjs
或index.js
文件。将其中的全部内容替换为以下 Node.js 代码:
- 代码解释:
export const handler = async (event) => { ... }
: 这是 Lambda 函数的入口点(处理程序)。当函数被触发时,AWS 会调用这个handler
函数。event
对象包含了触发事件的所有信息(对于 API Gateway 触发,它包含 HTTP 请求的详细信息)。responseBody
: 我们要返回的 JSON 数据。response
: 这是关键!我们稍后会将 API Gateway 配置为Lambda 代理集成 (Proxy Integration) 模式,这种模式要求 Lambda 函数必须返回一个包含statusCode
,headers
, 和body
(字符串形式) 的特定结构的 JSON 对象。
- 点击代码编辑器上方的 “部署” (Deploy) 按钮,保存你的代码更改。
很好!我们的 Lambda 函数已经准备就绪,可以接收事件并返回一个 JSON 响应了。
第二步:创建 API Gateway
现在,我们需要创建一个公共的 URL 入口,让用户可以通过互联网访问我们的 Lambda 函数。
- 在顶部的搜索栏中输入
API Gateway
,然后点击进入 API Gateway 服务页面。 - 找到 REST API 卡片(注意不是 HTTP API 或 WebSocket API),点击 “构建” (Build) 按钮。
- 在 “创建新 API” 页面:
- 选择 “新建 API” (New API)。
- API 名称 (API name): 输入一个名称,例如
myHelloAPI
。 - 描述 (Description): (可选) 添加描述。
- 终端节点类型 (Endpoint Type): 选择 “区域” (Regional)。
- 点击 “创建 API” (Create API)。
创建资源和方法:
- API 创建成功后,在左侧导航栏选中 “资源” (Resources)。
- 点击 “操作” (Actions) 下拉菜单,选择 “创建资源” (Create Resource)。
- 资源名称 (Resource Name): 输入
hello
。 - 资源路径 (Resource Path): 会自动填充为
hello
。 - 确保 “启用 API Gateway CORS” (Enable API Gateway CORS) 暂时不勾选(我们已经在 Lambda 代码里添加了简单的 CORS 头)。
- 点击 “创建资源” (Create Resource)。
- 现在,选中刚刚创建的
/hello
资源。再次点击 “操作” (Actions) 下拉菜单,选择 “创建方法” (Create Method)。 - 在
/hello
下方出现的小下拉框中,选择GET
,然后点击旁边的对勾 ✔️。
配置 GET 方法与 Lambda 集成:
- 在 “GET - 设置” (GET - Setup) 页面:
- 集成类型 (Integration type): 选择 “Lambda 函数” (Lambda Function)。
- 勾选 “使用 Lambda 代理集成” (Use Lambda Proxy integration)。这一步非常重要! 它让 API Gateway 将原始的 HTTP 请求直接传递给 Lambda 函数(在
event
对象中),并将 Lambda 函数返回的特定格式响应(包含statusCode
,headers
,body
)直接映射回 HTTP 响应。这大大简化了配置。 - Lambda 区域 (Lambda Region): 保持默认(你当前所在的区域)。
- Lambda 函数 (Lambda Function): 开始输入你之前创建的函数名称
myHelloFunction
,系统会自动提示,选中它。 - 保持 “使用默认超时” (Use Default Timeout) 勾选。
- 点击 “保存” (Save)。
- 会弹出一个提示 “授予 API Gateway 权限以调用您的 Lambda 函数” (Add Permission to Lambda Function),点击 “确定” (OK)。这允许 API Gateway 在收到请求时触发
myHelloFunction
。
第三步:部署 API
API 配置好了,但还需要部署到一个“阶段”(Stage) 才能被公开访问。
- 仍然在
/hello
资源的GET
方法配置页面,或者选中左侧的/hello
->GET
。 - 点击 “操作” (Actions) 下拉菜单,选择 “部署 API” (Deploy API)。
- 在 “部署 API” 弹窗中:
- 部署阶段 (Deployment stage): 选择 “[新阶段]” ([New Stage])。
- 阶段名称 (Stage name): 输入
dev
(表示开发环境)或其他你喜欢的名称。 - 阶段描述 / 部署描述 (Stage/Deployment description): (可选) 添加描述。
- 点击 “部署” (Deploy)。
第四步:测试你的 Serverless API!
部署成功后,你会进入 dev
阶段编辑器页面。
- 展开
dev
阶段 ->/
->/hello
->GET
。 - 你会看到一个 “调用 URL” (Invoke URL),类似
https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev
。 - 完整的 API 端点 URL 是 “调用 URL” 加上你的资源路径
/hello
,例如:https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/hello
(请替换成你自己的 URL)。 - 测试方法:
- 浏览器: 直接将完整的 API 端点 URL 粘贴到浏览器地址栏并访问。
- curl (命令行): 打开终端或命令提示符,输入
curl <你的完整 API 端点 URL>
,例如:
- 预期结果: 你应该会看到类似以下的 JSON 输出:
如果遇到问题怎么办?
- 检查 URL 是否正确: 确保包含了阶段名称 (
/dev
) 和资源路径 (/hello
)。 - 检查 API Gateway 部署: 每次修改配置后都需要重新部署 API 到某个阶段才能生效。
- 检查 Lambda 函数日志: 回到 Lambda 函数页面,切换到 “监控” (Monitor) 标签页,点击 “查看 CloudWatch 中的日志” (View logs in CloudWatch)。在这里你可以看到函数的执行日志(包括
console.log
输出)和任何错误信息。这是排查问题的首选之地!
小结与展望
恭喜你! 你刚刚成功地创建、部署并测试了你的第一个 Serverless API!回顾一下,你:
- 编写了一个简单的 Node.js 函数并在 AWS Lambda 上部署了它。
- 配置了 AWS API Gateway 来接收公网 HTTP GET 请求。
- 将 API Gateway 与 Lambda 函数通过代理集成连接起来。
- 将 API 部署到了一个可访问的阶段。
- 通过 URL 成功调用了你的 Serverless API!
最重要的是,整个过程中你没有配置任何服务器、操作系统或网络,AWS 平台为你处理了这一切。而且这个 API 具备自动伸缩能力,并按实际调用次数和执行时间付费。