无服务器框架 Python 每个 lambda 函数 1 个 yml 和多个目录

Serverless Framework Python 1 yml and multiple directories per each lambda function

我做了尽可能多的研究,但我似乎无法找到一种方法来按照我想要的方式构建我的文件夹。

我的文件夹结构如下所示:

aws-lambdas
    database_credentials.yml (just a file to read the creds from in a var)
    serverless.yml
    functions
        ETLTool
            somefile1.py
            somefile2.py
            lambda_function.py
            ETLToolFullLoadSLS.yml
            ETLToolSLS.yml
        TriggerSnowflakeETL
            somefile1.py
            somefile2.py
            lambda_function.py
            TriggerSnowflakeETLSLS.yml

我想要做的是将函数文件夹内的所有 .yml 拉入根文件夹的 serverless.yml 中。我的主 serverless.yml 文件如下所示:

service: SnowflakePoc
frameworkVersion: '2'

custom:
    database_credentials: ${file(./database_credentials.yml):database_credentials}

provider:
    name: aws
    runtime: python3.8
    lambdaHashingVersion: 20201221
    timeout: 90
    memorySize: 2048

    stage: dev
    region: eu-west-2

    vpc:
        securityGroupIds:
            - sg-013059b0cbf4054b5
            - sg-02c6fcaa9f2bfac7f
        subnetIds:
            - subnet-04aa5cacdb8d9d077
            - subnet-0ea7eb629fbc6f6a8

    iam:
        role: arn:aws:iam::309161096106:role/LamdaRDSAccess

functions:
    - ${file(./functions/ETLTool/ETLToolSLS.yml)}
    - ${file(./functions/ETLTool/ETLToolFullLoadSLS.yml)}
    - ${file(./functions/TriggerSnowflakeETL/TriggerSnowflakeETLSLS.yml)}

plugins:
  - serverless-python-requirements

问题是整个 functions/* 文件夹会被每个 lambda 表达式选中,即使我在每个内部函数 yml 文件中都有类似的内容。

TriggerETLTool:
    timeout: 600
    memorySize: 5000
    reservedConcurrency: 3
    handler: functions/TriggerSnowflakeETL/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/**'
            - functions/TriggerSnowflakeETL/lambda_function.py

在 AWS 内部,它看起来像这样: Pic from AWS Lambda Source Code

  1. 有没有比每个 lambda 有 1 个目录更好的模式?

  2. 我希望每个函数中的文件都位于我的 lambda 的根目录中,而不是在它们到达 AWS 后像在图像中那样位于文件夹中。此外,我希望只包含函数文件夹中每个内部函数的文件,而不是整个函数目录。

如果您想单独打包每个功能,您需要做两件事(其中一件您已经完成)

  1. 配置您的 serverless.yml 文件以单独打包函数:
   service: SnowflakePoc
   package:
     individually: true
   provider:
     ...

  1. 在每个函数中,指定模式以正确压缩该部分(您已经这样做了)

单独打包可在全局或每个功能级别进行配置,因此您可以选择最适合您的方式。

您可以在 documentation

中找到更多信息