如何将Flask应用部署到AWS Lambda?AWS CLI部署失败求助
嘿,我之前也踩过类似的坑——直接用AWS CLI上传Flask代码到Lambda肯定不行,因为Lambda没法直接识别Flask的WSGI结构,得做些适配工作。下面给你一步步来,亲测能跑通:
部署Flask应用到AWS Lambda的完整步骤
1. 准备本地环境和依赖
- 先确保你本地Python环境正常,AWS CLI也已经通过
aws configure完成了密钥和区域的配置。 - 安装两个核心依赖:你的Flask应用本身需要的
flask,以及用来对接Lambda和Flask的WSGI运行时awslambdaric。安装时记得把依赖放到当前目录,方便后续打包:pip install flask awslambdaric -t .
2. 修改Flask代码,添加Lambda入口
Lambda不会直接识别Flask的app.run(),得加一个专门的Lambda处理函数来做桥接。把你的测试代码改成这样:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/status', methods=['GET','POST']) def service_run(): return "service is running" # 新增Lambda处理函数,让Lambda能调用Flask应用 def lambda_handler(event, context): from awslambdaric import bootstrap bootstrap.run(app)
3. 打包代码成ZIP部署包
Lambda要求用ZIP格式上传代码,打包时要把所有依赖和你的代码都包含进去:
- 执行下面的命令把当前目录下的所有文件(包括依赖包和修改后的app.py)打包:
注意:别把本地的虚拟环境目录(比如zip -r flask-lambda-deploy.zip .venv)打包进去,不然包会超大还没用。
4. 创建Lambda函数并上传ZIP包
方式一:用AWS CLI(这次能成功)
- 先确保你有一个具备Lambda执行权限的IAM角色(可以在IAM控制台创建,给它附加
AWSLambdaBasicExecutionRole策略),然后执行命令创建函数:aws lambda create-function \ --function-name FlaskStatusService \ --runtime python3.9 \ # 这里选和你本地一致的Python版本,比如3.9/3.10 --handler app.lambda_handler \ # 格式是「文件名.处理函数名」 --zip-file fileb://flask-lambda-deploy.zip \ --role arn:aws:iam::你的AWS账号ID:role/lambda-execution-role
方式二:用AWS控制台更直观
如果之前CLI踩坑,用控制台操作更稳妥:
- 登录AWS Lambda控制台,点击「创建函数」→「从头开始创作」
- 输入函数名,选择对应的Python运行时,选择或创建刚才的执行角色
- 进入函数页面后,在「代码」标签页选择「上传从」→「.zip文件」,上传你打包好的ZIP
- 到「配置」→「运行时设置」里,把处理程序改成
app.lambda_handler
5. 配置API Gateway(关键!不然没法HTTP访问)
Lambda本身没有HTTP端点,得用API Gateway做转发:
- 登录API Gateway控制台,创建一个REST API
- 点击「创建资源」,命名为
status,然后给这个资源添加GET和POST方法 - 方法的集成类型选「Lambda函数」,勾选「使用Lambda代理集成」,然后选择你刚创建的Lambda函数
- 点击「动作」→「部署API」,选择一个新的阶段(比如
prod),部署后就能拿到一个可访问的API URL了
6. 测试访问
现在用curl或者浏览器访问这个API URL,就能看到返回的service is running啦:
curl https://xxxxxx.execute-api.你的区域.amazonaws.com/prod/status
常见坑点提醒
- 依赖版本要和Lambda的Python版本兼容,别用Python3.11的依赖部署到Python3.9的Lambda上
- 打包时一定要把所有依赖都包含进去,不然Lambda会报「找不到模块」的错误
- IAM角色权限要够,至少要有Lambda执行权限和CloudWatch日志权限,不然函数运行会报错
内容的提问来源于stack exchange,提问作者Pyd
相关产品推荐
相关产品推荐

