使用Serverless框架部署Python版AWS Lambda时,获取路径参数{foo}失败的问题咨询
解决AWS Lambda路径参数获取问题
嘿,我正好碰到过这个问题!你的serverless.yml配置其实是对的,问题出在Lambda handler里获取参数的方式上——AWS API Gateway并不会把路径参数直接放到event的顶级键里,而是存在pathParameters这个嵌套对象里。
问题根源
当你通过API Gateway发起GET /my_function/bar请求时,Lambda收到的event结构大概是这样的:
{ "pathParameters": { "foo": "bar" }, // 其他API Gateway自带的字段... }
而你当前的代码直接取event['foo'],自然会找不到这个键啦。
修改handler代码
把你的handler改成这样就能正确获取参数了,还能加个容错处理避免参数缺失的报错:
def sitemap_entries(event, context): # 先获取路径参数对象,默认空字典防止KeyError path_params = event.get('pathParameters', {}) # 取出foo参数 foo_value = path_params.get('foo') # 如果参数缺失,返回400错误 if not foo_value: return { 'statusCode': 400, 'body': '请求路径中缺少foo参数' } s = MyNiceClass(foo_value) # 你的后续业务逻辑...
本地模拟API Gateway请求
之前你本地调用用--data '{"foo": "bar"}'能成功,是因为手动把参数放到了event根节点,和API Gateway的实际传递结构不一样。如果要在本地模拟真实的请求结构,可以用这个命令:
serverless invoke local --function my_function --data '{ "pathParameters": { "foo": "bar" } }'
这样修改后,部署到AWS上就能正常获取路径参数啦!
内容的提问来源于stack exchange,提问作者Marcelo Ribeiro
相关产品推荐
相关产品推荐

