Serverless Framework Python项目Lambda分目录配置与打包问题咨询
解决方案
1. 更优的项目结构模式
现有结构已经满足多函数管理的基本需求,无需强制每个Lambda单独拆分为顶级目录,更优的mono-repo模式可以参考如下调整:
- 公共依赖抽离:将所有Lambda共享的工具代码、配置常量放到根目录的
/common或/layers目录下,通过Lambda层的方式引入,不要放在/functions目录中,避免被重复打包到各个函数镜像里。 - 配置自动引入:根目录
serverless.yml的functions字段可以用通配符匹配所有子目录的配置文件,无需手动逐个添加,写法为:functions: - ${file(./functions/**/*.yml)} - 同业务域聚合:同类业务的Lambda可以放在同一个子目录下管理,比如所有ETL相关的函数都放到
/functions/etl目录,不需要每个函数单独建二级目录。
2. 打包配置调整方案
你当前的配置不生效核心是缺少单函数独立打包的开关,同时handler路径写法导致目录结构被保留,按以下步骤修改即可:
第一步:根目录新增全局打包配置
在根serverless.yml中添加package配置,开启单函数独立打包,全局先排除所有不需要的文件:
service: SnowflakePoc frameworkVersion: '2' # 新增以下配置 package: individually: true # 核心开关:每个函数单独执行打包逻辑 patterns: - '!**/*' # 全局排除所有文件,由每个函数自行声明需要打包的内容 custom: database_credentials: ${file(./database_credentials.yml):database_credentials} # 其余原有配置保持不变
第二步:修改子函数的配置
以TriggerSnowflakeETL的配置为例,调整handler路径和打包规则:
TriggerETLTool: timeout: 600 memorySize: 5000 reservedConcurrency: 3 # handler去掉前缀路径,直接写入口文件名+方法名 handler: lambda_function.lambda_handler layers: - arn:aws:lambda:eu-west-2:309161096106:layer:Snowflake:3 - arn:aws:lambda:eu-west-2:309161096106:layer:DatabaseUtilities:5 package: patterns: # 直接引入对应目录下的文件,打包时会自动放到代码根目录 - ./functions/TriggerSnowflakeETL/lambda_function.py # 如果需要同目录的其他依赖文件,按相同规则添加即可 - ./functions/TriggerSnowflakeETL/somefile1.py - ./functions/TriggerSnowflakeETL/somefile2.py
调整后部署时,每个函数只会打包自己声明的文件,且所有文件会直接放在Lambda运行环境的代码根目录,不会保留原有的嵌套目录结构。
内容的提问来源于stack exchange,提问作者Alecu Bernard Louis
相关产品推荐
相关产品推荐

