【问题标题】:Serverless Framework Python 1 yml and multiple directories per each lambda function无服务器框架 Python 1 yml 和每个 lambda 函数的多个目录
【发布时间】:2021-12-01 03:34:44
【问题描述】:

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

我的文件夹结构如下:

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

问题是每个 lambdas 都会拾取整个 functions/* 文件夹,即使我在每个内部函数 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. 我希望每个函数中的文件都位于我的 lambdas 的根目录中,而一旦它们到达 AWS,它们就不会像在图像中那样位于文件夹中。另外,我想只将每个内部函数的文件放在函数文件夹中,而不是整个函数目录。

【问题讨论】:

    标签: python-3.x aws-lambda serverless-framework serverless


    【解决方案1】:

    如果你想单独打包每个函数,你需要两件事(其中一件你已经完成了)

    1. 配置您的 serverless.yml 文件以单独打包函数:
       service: SnowflakePoc
       package:
         individually: true
       provider:
         ...
    
    
    1. 在每个函数中,指定模式以正确压缩该部分(您已经这样做了)

    单独打包可全局配置或按功能级别配置,因此您可以选择最适合您的。

    您可以在documentation找到更多信息

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 2021-03-10
      • 2019-07-23
      • 1970-01-01
      • 2021-10-07
      • 2020-07-25
      • 1970-01-01
      • 2019-09-06
      相关资源
      最近更新 更多