Python Flask部署AWS Lambda后static静态文件访问返回403 FORBIDDEN
问题根因
本次403错误和IAM权限配置无关,核心是Flask静态资源路径配置不匹配Lambda执行环境的路径规则导致的。
修复步骤
1. 修正Flask静态文件夹路径配置
Lambda函数执行时的工作目录为部署包解压后的根目录(对应你本地项目根目录,和run.py同级),而你的static文件夹实际存放在my_app子目录下,你当前配置的相对路径static_folder="static"会让Flask从工作目录下直接寻找static文件夹,找不到就会返回访问错误。
修改my_app/__init__.py中的Flask实例初始化代码,用绝对路径定位静态文件夹:
from flask import Flask, render_template import os def create_app(): # 获取当前文件所在目录(即my_app文件夹的绝对路径) app_root_path = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__, static_folder=os.path.join(app_root_path, "static"), static_url_path="/static") @app.route("/", methods=["GET"]) def index(): sample_data = { 'data': 'sample data' } return render_template("index.html", data=sample_data) return app
2. 确认静态文件纳入部署包
你当前serverless.yml的package配置仅排除了根目录下的node_modules和venv,不会影响my_app下的静态文件,如果之前添加过其他排除规则,可以主动添加include规则保证静态资源被打包:
package: exclude: - node_modules/** - venv/** include: - my_app/static/** - my_app/templates/**
3. 权限优化建议
你当前配置的AdministratorAccess等权限属于过高权限,存在严重安全风险,问题修复后建议及时调整为Lambda运行所需的最小必要权限。
内容的提问来源于stack exchange,提问作者WiktorKS
相关产品推荐
相关产品推荐

