如何从Lambda获取REST API Gateway的路径参数
解决API Gateway GET路径参数无法传递到Lambda的问题
核心原因
你遇到的event为空的问题,本质是API Gateway没有正确配置参数映射,或者集成类型选择错误,导致路径参数没有传递到Lambda函数。
推荐方案:Lambda代理集成(无需手动写映射)
这是当前AWS控制台最简便的配置方式,步骤如下:
创建带路径参数的资源
- 进入API Gateway控制台,选择你的API,切换到「资源」页面。
- 在根资源(
/)上点击「创建资源」,填写:- 资源名称:比如
item - 资源路径:
{id}(这里的id就是你要接收的路径参数名) - 可选:勾选「启用API Gateway CORS」
- 点击「创建资源」
- 资源名称:比如
创建GET方法并配置Lambda代理集成
- 选中刚创建的
/{id}资源,点击「创建方法」,选择GET后点击确认。 - 集成类型选择「Lambda函数」,勾选「使用Lambda代理集成」,选择函数所在区域,输入你的Lambda函数名称,点击「保存」,确认自动添加API Gateway调用Lambda的权限。
- 选中刚创建的
部署API
- 点击控制台顶部的「部署API」,选择一个部署阶段(比如
prod),完成部署。
- 点击控制台顶部的「部署API」,选择一个部署阶段(比如
Lambda中获取参数的代码示例
代理集成模式下,路径参数会被自动封装到event['pathParameters']中:import json from datetime import datetime def lambda_handler(event, context): # 获取路径参数id item_id = event['pathParameters'].get('id') current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 示例:将参数存入DynamoDB(需提前配置Lambda的DynamoDB权限) # table.put_item( # Item={ # "timevalue": current_time, # "eventvalue": json.dumps(event), # "item_id": item_id # } # ) return { 'statusCode': 200, 'body': json.dumps({ 'success': True, 'received_id': item_id, 'timestamp': current_time }) }
备选方案:自定义集成(手动配置映射模板)
如果需要更灵活的参数控制,可使用非代理集成,手动配置映射模板:
创建GET方法(不启用代理)
- 按照上述步骤创建
/{id}资源和GET方法,集成类型选「Lambda函数」,不勾选「使用Lambda代理集成」,关联你的Lambda函数并保存权限。
- 按照上述步骤创建
配置映射模板
- 进入该GET方法的「集成请求」设置,找到「映射模板」模块。
- 点击「添加映射模板」,输入
application/json,勾选「当没有模板匹配请求的内容类型时,通过传递请求体绕过模板处理」,点击「保存」。 - 在模板编辑器中输入以下内容,将路径参数
id映射到Lambda的event中:{ "id": "$input.params('id')" }
部署API后,Lambda中获取参数
此时可直接通过event['id']获取路径参数:import json from datetime import datetime def lambda_handler(event, context): item_id = event.get('id') # 后续业务逻辑...
关键注意事项
- 每次修改集成配置后,必须重新部署API才能生效。
- 确认Lambda的执行角色权限:需允许API Gateway调用该Lambda函数(创建方法时控制台会自动添加权限,若手动配置需检查IAM策略)。
- 测试时使用部署后的完整URL,格式为:
https://[API_ID].execute-api.[区域].amazonaws.com/[阶段]/[资源路径]/[参数值],例如https://abc123.execute-api.us-east-1.amazonaws.com/prod/item/456。
内容的提问来源于stack exchange,提问作者Jeeves
相关产品推荐
相关产品推荐

