gpt4 book ai didi

python - 如何在 AWS SAM 中集中重复使用的自定义 Python 函数?

转载 作者:行者123 更新时间:2023-12-03 07:30:49 25 4
gpt4 key购买 nike

我创建了一个 AWS Cloudformation 堆栈,其中包含 template.yaml实现多个 lambda 函数的文件。部分/全部 lambda 函数使用了多个 Python 函数。有没有可以存放常用功能的地方?如果您认为答案涉及层,请解决如何包含和使用自定义函数(因为 main workflow for layers 支持通常的 pip python 站点包 - 我很好奇重用我自己的函数)。

我的项目目录:

/lambda_functions
/statemachine
samconfig.toml
template.yaml

图层 zip 看起来像这样

python/lib/python3.8/site-packages

site-packages是我其他模块的地方 - 例如 /requests - 可由 lambda 函数访问(即 import requests )。但是如果我把自己的目录放在那里 /custom_functions__init__.py文件 - lambda 函数找不到它。

最佳答案

您可以在内部将 python 库发布到 pypi repository并将它们添加到函数的 requirements.txt 中。另请确保您的 pypi 存储库 代理您在 requirements.txt 中定义的任何其他外部库。如果您还没有内部 pypi 存储库,这可能会有点复杂。

或者您可以使用 Lambda 层。让我们看一个使用 Python 层的简单示例。

假设您要创建的图层的文件夹结构是 mylib1 和 mylib2 两个目录,其中包含一些 python 代码。此外,您还对 mylib1/mylib2 中的代码或在requirements.txt 文件中定义的 Lambda 函数中的代码有一些第三方依赖项。

my-layer-1
├── mylib1
│ ├── __init__.py
│ └── response.py
├── mylib2
│ ├── __init__.py
│ └── response.py
└── requirements.txt

这样您就可以将以下内容添加到 SAM 模板中

 MyDependencyLayer1:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: my-dependency-layer
Description: Dependencies required for my Python lambdas
ContentUri: my-layer-1/
CompatibleRuntimes:
- python3.8
LicenseInfo: 'Apache License 2.0'
RetentionPolicy: Retain
Metadata:
BuildMethod: python3.8

添加更新您的函数以引用图层

HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.8
Layers:
- !Ref MyDependencyLayer1

现在,当您执行 sam build 时,它也会构建函数和 Lambda 层。

现在您可以导入 mylib1 文件夹中 response.py 中定义的函数 my_response1,例如

from mylib1 import my_response1

假设mylib1文件夹中的__init__.py具有以下行

from .response import my_response1

Here是一个显示此操作的存储库。

上面的示例将层和功能定义保留在同一 SAM 模板中。您可以使用 SAM 模板将 Lambda 层代码保存在不同的存储库中,并仅在 CI/CD 管道中构建该层。为此,如果您有任何自定义要求(例如从内部工件中提取依赖项),您还可以使用 makefile 来构建 Lambda 层。有关使用 makefile 的更多信息 here并根据不同的运行时将代码打包为一个层 here .

关于python - 如何在 AWS SAM 中集中重复使用的自定义 Python 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67275554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com