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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:39:04