无服务器框架 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
有没有比每个 lambda 有 1 个目录更好的模式?
我希望每个函数中的文件都位于我的 lambda 的根目录中,而不是在它们到达 AWS 后像在图像中那样位于文件夹中。此外,我希望只包含函数文件夹中每个内部函数的文件,而不是整个函数目录。
如果您想单独打包每个功能,您需要做两件事(其中一件您已经完成)
- 配置您的
serverless.yml
文件以单独打包函数:
service: SnowflakePoc
package:
individually: true
provider:
...
- 在每个函数中,指定模式以正确压缩该部分(您已经这样做了)
单独打包可在全局或每个功能级别进行配置,因此您可以选择最适合您的方式。
您可以在 documentation
中找到更多信息
我做了尽可能多的研究,但我似乎无法找到一种方法来按照我想要的方式构建我的文件夹。
我的文件夹结构如下所示:
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
有没有比每个 lambda 有 1 个目录更好的模式?
我希望每个函数中的文件都位于我的 lambda 的根目录中,而不是在它们到达 AWS 后像在图像中那样位于文件夹中。此外,我希望只包含函数文件夹中每个内部函数的文件,而不是整个函数目录。
如果您想单独打包每个功能,您需要做两件事(其中一件您已经完成)
- 配置您的
serverless.yml
文件以单独打包函数:
service: SnowflakePoc
package:
individually: true
provider:
...
- 在每个函数中,指定模式以正确压缩该部分(您已经这样做了)
单独打包可在全局或每个功能级别进行配置,因此您可以选择最适合您的方式。
您可以在 documentation
中找到更多信息