求Python编写的接收路径参数的AWS API Gateway Lambda函数示例
Python版AWS Lambda获取API Gateway路径参数示例
你提供的SAM模板配置是正确的,路径参数{id}已经在API Gateway中定义。之所以在Lambda的event对象中找不到id,是因为不同类型的API Gateway(REST API/HTTP API)对应的event结构不同,以下是两种场景下的正确取值方式:
1. 针对REST API(传统API Gateway)
REST API的路径参数会被封装在event['pathParameters']对象中,直接通过键名即可获取:
def lambda_handler(event, context): # 安全获取路径参数id,避免KeyError job_id = event.get('pathParameters', {}).get('id') if not job_id: return { 'statusCode': 400, 'body': '请求缺少必要的路径参数id' } # 这里写你的业务逻辑,比如根据id查询任务详情 return { 'statusCode': 200, 'body': f'成功获取任务ID:{job_id}' }
2. 针对HTTP API(新型API Gateway)
如果使用的是HTTP API(Payload Format Version 2.0),路径参数同样在event['pathParameters']中,但部分旧版本或特殊配置下可能需要从requestContext中读取,保险写法如下:
def lambda_handler(event, context): # 兼容HTTP API的两种参数位置 path_params = event.get('pathParameters', {}) or event.get('requestContext', {}).get('http', {}).get('pathParameters', {}) job_id = path_params.get('id') if not job_id: return { 'statusCode': 400, 'body': '请求缺少必要的路径参数id' } return { 'statusCode': 200, 'body': f'HTTP API下成功获取任务ID:{job_id}' }
验证小技巧
可以在Lambda函数中先打印整个event对象,查看实际的参数结构:
def lambda_handler(event, context): print("完整event对象:", event) # 后续逻辑...
通过CloudWatch日志查看打印结果,就能明确参数的具体位置。
内容的提问来源于stack exchange,提问作者Joymaker
相关产品推荐
相关产品推荐

