如何在AWS API Gateway中使用统一Python文件管理Lambda处理器?
单个Python文件实现多Lambda处理器的两种方案
完全可以用单个Python文件管理所有API Gateway对应的Lambda业务逻辑,有两种常见实现方式,根据需求选择即可:
方案一:多个Lambda函数共享同一代码包,指定不同处理函数
- 编写单个Python文件(比如命名为
api_handlers.py),在里面定义所有需要的处理函数:
def handle_get_users(event, context): # 处理GET /users的业务逻辑 return { "statusCode": 200, "body": "返回用户列表数据" } def handle_create_user(event, context): # 处理POST /users的业务逻辑 return { "statusCode": 201, "body": "用户创建成功" } def handle_delete_user(event, context): # 处理DELETE /users/{id}的业务逻辑 user_id = event["pathParameters"]["id"] return { "statusCode": 200, "body": f"ID为{user_id}的用户已删除" }
- 将这个文件打包成ZIP包(如果有第三方依赖,要把依赖一起打包到根目录)。
- 创建多个Lambda函数,每个函数上传同一个ZIP包,然后在**Lambda控制台的“配置”→“常规配置”→“处理程序”**里指定不同的函数名:
- 对应GET /users的Lambda:设置处理程序为
api_handlers.handle_get_users - 对应POST /users的Lambda:设置处理程序为
api_handlers.handle_create_user
- 对应GET /users的Lambda:设置处理程序为
- 在API Gateway里,把每个端点分别集成到对应的Lambda函数即可。
这种方式的好处是每个Lambda可以独立配置内存、超时时间和权限,适合不同端点资源需求差异较大的场景。
方案二:单个Lambda函数内部路由,统一处理所有请求
如果不想维护多个Lambda函数,可以用一个主入口函数,根据API Gateway的请求信息(比如HTTP方法、路径)路由到对应的处理函数:
- 编写Python文件(比如
api_router.py):
def main_handler(event, context): # 从API Gateway的事件中获取请求方法和路径 http_method = event["requestContext"]["http"]["method"] path = event["requestContext"]["http"]["path"] # 根据方法和路径路由到对应处理函数 if http_method == "GET" and path == "/users": return handle_get_users(event, context) elif http_method == "POST" and path == "/users": return handle_create_user(event, context) elif http_method == "DELETE" and path.startswith("/users/"): return handle_delete_user(event, context) else: return { "statusCode": 404, "body": "请求路径或方法不支持" } # 下面是各个业务处理函数 def handle_get_users(event, context): return {"statusCode": 200, "body": "用户列表"} def handle_create_user(event, context): return {"statusCode": 201, "body": "用户创建成功"} def handle_delete_user(event, context): user_id = event["pathParameters"]["id"] return {"statusCode": 200, "body": f"用户{user_id}已删除"}
- 打包ZIP后上传到单个Lambda函数,把处理程序设置为
api_router.main_handler。 - 在API Gateway里,把所有需要的端点都集成到这个Lambda函数即可。
这种方式的优势是只需要维护一个Lambda函数,部署一次就能覆盖所有端点,适合业务逻辑相对简单、资源需求统一的场景。
打包注意事项
如果你的代码用到第三方库(比如requests、boto3以外的包),需要先把依赖安装到当前目录再打包:
# 安装依赖到当前目录 pip install 依赖包名 -t . # 打包所有文件 zip -r api_handlers.zip .
内容的提问来源于stack exchange,提问作者Joymaker
相关产品推荐
相关产品推荐

