提问人:WindSwept 提问时间:7/14/2021 更新时间:7/12/2023 访问量:2171
为 AWS Lambda 创建 Python 库 ZIP
creating python library zip for aws lambda
问:
我有一些使用 Visual Studio 开发的 python 代码。我想在 aws 中将此 python 代码作为 lambda 函数运行。为此,我需要创建一个包含代码及其使用的库的 zip 包。
我是否可以简单地将软件包依赖项从其安装目录复制到另一个目录,然后将其压缩以上传到 aws?
谢谢。
答:
您的依赖项需要位于要上传的任何目录的根目录下。
deployment/ ├─ handler.py ├─ dependency1/ │ ├─ ...files ├─ dependency2/ │ ├─ ...files
因此,亚马逊本质上得到的是一个平面目录中的所有代码。
一种更简单的开发方法是使用 AWS Sam 为您构建和部署这些软件包。然后,您只需要一个 requirements.txt,它将使用以下命令自动为您打包和部署它。
您确实需要学习模板格式 (https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html),但它在轻松重新创建函数方面极大地加快了您的开发速度。
下面是上述函数的示例:
Transform: AWS::Serverless-2016-10-31
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: handler.main
Runtime: python3.8
CodeUri: .
然后我在我的目录中只需要 ,a with 和 in it,以及上面的模板(默认命名)handler.py
requirements.txt
dependency1
dependency2
template.yml
然后,您可以使用它来构建、测试和部署到 AWS。sam build
sam local invoke
sam deploy
在这种情况下,如果要将依赖项与实际代码分开,则可以将它们作为层。AWS Lambda 提供了此可共享层,可以保存 dePandancis。如果需要,还可以在不同的 Lambda 函数中使用 depandancis。
请遵循以下来自 aws 的文档,了解如何为 Python 创建层。https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
为了提高可维护性,您还可以使用 SAM 或 CDK 自动将更改推送到 Lambda,而无需手动上传压缩版本。谢谢!
评论
在此示例中,我将使用“requests”模块。
- 导航到包含lambda_function.py的项目目录 源代码文件,然后运行以下命令。
pip install --target ./ 请求
所有依赖项都将在项目目录中创建。
像下面的结构一样将它们全部压缩。
├my_deployment_package.zip ├──bin/ ├──requests/
├──...AllOtherFolders/
├──lambda_function.py
- 在您的 lambda 函数中上传 zip 文件。
- 从那时起,您可以在 AWS 控制台中编辑 lambda_function.py 文件。
评论