You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:21:04