集成:Lambda、HTTP 与模拟
将 API Gateway 方法连接到 Lambda 代理集成、上游 HTTP 端点和用于测试的模拟集成。
集成:Lambda、HTTP 与模拟 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
API Gateway 集成类型概览
每个 API Gateway 方法都需要一个后端集成,即负责处理请求并返回响应的系统。API Gateway 支持五种集成类型:Lambda 代理、Lambda 自定义、HTTP 代理、HTTP 自定义和模拟。HTTP API 仅支持 Lambda 代理和 HTTP 代理。REST API 支持全部五种类型。选择合适的集成类型决定了您对请求和响应转换的控制程度。
Lambda 代理集成
在Lambda 代理集成中,API Gateway 会将完整的 HTTP 请求作为结构化事件对象传递给 Lambda,其中包括标头、查询字符串、路径参数、正文和上下文。您的 Lambda 函数负责返回格式正确的响应对象,其中包含 statusCode、headers 和 body。这是最简单且最常见的模式,无需映射模板,并且由 Lambda 完全控制响应。
def lambda_handler(event, context):
# event.httpMethod, event.path, event.queryStringParameters
# event.headers, event.body
user_id = event['pathParameters']['userId']
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': '{"userId": "' + user_id + '", "name": "Alice"}'
}Lambda 非代理(自定义)集成
在Lambda 非代理(自定义集成)中,API Gateway 使用映射模板(Apache Velocity 模板语言,VTL)转换请求,然后再将其发送给 Lambda;同时还会转换 Lambda 的响应,然后再将其返回给客户端。您的 Lambda 函数接收的是干净的自定义负载,而不是原始的 API Gateway 事件。这种方式将传输问题与业务逻辑分离,但需要维护 VTL 模板。当您希望严格分离 API 与后端之间的契约时,请使用自定义集成。
## Integration Request Mapping Template (VTL)
#set($inputRoot = $input.path('$'))
{
'userId': '$input.params('userId')',
'action': '$inputRoot.action',
'timestamp': '$context.requestTime'
}HTTP 代理集成
HTTP 代理集成会将请求直接转发到外部 HTTP 端点(可以是 EC2 实例、ALB、本地服务器或任何公共 URL),不进行转换。API Gateway 直接传递请求,并将后端的响应返回给客户端。这非常适合将现有 REST 后端迁移到 API Gateway 后方,以便在不修改后端代码的情况下添加限流、监控和 API 密钥。该集成支持带证书验证的 HTTPS 后端。
# Create HTTP proxy integration via REST API
aws apigateway put-integration \
--rest-api-id 'abc123' \
--resource-id 'xyz789' \
--http-method GET \
--type HTTP_PROXY \
--integration-http-method GET \
--uri 'https://my-backend.example.com/api/users/{userId}'HTTP 自定义(非代理)集成
HTTP 自定义集成同样会将请求转发到外部 HTTP 端点,但会使用映射模板转换发送到后端的请求以及返回的响应。当 API Gateway 接口与后端 API 使用不同契约时,这种方式非常有用:您可以将 REST API 调用转换为旧版 SOAP 或自定义格式,并将后端响应转换为适合客户端使用的干净 JSON 结构。虽然这会增加复杂性,但能为旧版集成提供最强的控制能力。
AWS 服务集成
AWS 服务集成可将 API Gateway 直接连接到 AWS 服务,无需 Lambda 中间层。例如,您可以配置一个 POST 端点,直接向 SQS 写入消息、发布到 SNS 或启动 Step Functions 执行。这可以降低延迟,并消除简单路由操作所需的 Lambda 函数成本。该集成需要配置 IAM 角色,并使用映射模板正确构造 AWS API 调用。
# Direct API Gateway → SQS integration
# Integration Request URI:
https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue
# Integration Request Body Mapping Template:
Action=SendMessage&MessageBody=$input.body用于开发和测试的 Mock 集成
Mock 集成会配置 API Gateway,使其无需调用任何后端即可返回预定义响应。您可以在集成响应映射模板中定义响应。Mock 集成非常适合用于:后端尚未构建时进行 API 开发(前端团队可以立即开始工作)、对 API 配置进行单元测试、返回标准 CORS 标头,或在开发期间为第三方合作伙伴提供存根。Mock 端点还可以通过返回 410 Gone 来阻止已弃用的 API 版本。
# Integration Response for Mock
# Integration Response Mapping Template:
{
'statusCode': 200,
'message': 'This is a mock response',
'timestamp': '$context.requestTime'
}
# Method Response: map status code 200 to this templateAPI Gateway 中的 CORS 配置
当一个域名上的浏览器客户端调用另一个域名上的 API 时,必须启用 CORS(跨域资源共享)。HTTP API 提供一键式 CORS 配置;REST API 则要求您创建一个带有 Mock 集成的 OPTIONS 方法,以返回所需的 CORS 标头(Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers)。Lambda 代理集成还要求您的 Lambda 在响应中返回 CORS 标头。
# HTTP API CORS config (simple)
aws apigatewayv2 update-api \
--api-id 'abc123' \
--cors-configuration '{
"AllowOrigins": ["https://myapp.example.com"],
"AllowMethods": ["GET", "POST", "OPTIONS"],
"AllowHeaders": ["Content-Type", "Authorization"]
}'REST API 中的请求验证
REST API 支持请求验证:API Gateway 可以在调用后端之前,验证必需的查询字符串参数、标头以及请求正文架构是否存在且格式正确。这可以减少格式错误的请求导致的不必要 Lambda 调用,并自动返回标准化的 400 错误。使用 JSON Schema 定义请求模型,并将其附加到方法,以启用正文验证。HTTP API 不提供请求验证功能。
集成超时
API Gateway 对 REST API 和 HTTP API 的默认集成超时均为 29 秒(REST API 的最大值,HTTP API 代理的固定值)。如果后端耗时超过 29 秒,API Gateway 会返回 504 Gateway Timeout 错误。这意味着通过 API Gateway 同步调用的 Lambda 函数必须在 29 秒内完成,即使 Lambda 本身支持最长 15 分钟的超时。对于长时间运行的操作,请使用异步模式:API Gateway 触发 Lambda,由 Lambda 启动异步任务并立即返回任务 ID。
选择合适的集成类型
集成类型选择指南:Lambda 代理:最常见且最简单,由 Lambda 完全控制请求;Lambda 自定义:需要在网关层进行请求/响应转换时使用;HTTP 代理:适用于现有 HTTP 后端和迁移场景;HTTP 自定义:用于转换旧版 API 格式;AWS 服务:对于路由到 SQS/SNS/DynamoDB 的简单场景,可免去 Lambda;Mock:用于开发存根和 CORS 预检。对于 SAA-C03 考试,Lambda 代理和 HTTP 代理是最常考的模式。
快速检查
测试您对本课 AWS Solutions Architect(SAA-C03)相关概念的理解。
课程回顾
本课介绍了:Lambda 代理集成会将完整请求传递给 Lambda,由 Lambda 控制响应,这是最简单且最常见的集成方式;HTTP 代理会将请求转发到现有 HTTP 后端,在不更改后端的情况下增加 API Gateway 功能;Mock 集成会返回预定义响应,因此无需任何后端基础设施即可支持前端开发和测试。接下来,我们将探讨 API Gateway 如何使用 IAM、Lambda 授权器和 Cognito 进行授权。
常见问题解答
「集成:Lambda、HTTP 与模拟」课时是免费的吗?
是的 — 「集成:Lambda、HTTP 与模拟」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「集成:Lambda、HTTP 与模拟」这节课中我会学到什么?
将 API Gateway 方法连接到 Lambda 代理集成、上游 HTTP 端点和用于测试的模拟集成。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「集成:Lambda、HTTP 与模拟」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- REST API、HTTP API 与 WebSocket API
- 集成:Lambda、HTTP 与模拟
- 授权:IAM、Lambda 授权方与 Cognito
- 节流、缓存与使用计划