【发布时间】:2021-07-14 03:38:41
【问题描述】:
我有一些使用 Visual Studio 开发的 Python 代码。我想在 aws 中将此 python 代码作为 lambda 函数运行。为此,我需要创建一个包含代码和它使用的库的 zip 包。
我可以简单地将软件包依赖项从其安装目录复制到另一个目录,然后将其压缩以上传到 aws 吗?
谢谢。
【问题讨论】:
标签: python amazon-web-services aws-lambda
我有一些使用 Visual Studio 开发的 Python 代码。我想在 aws 中将此 python 代码作为 lambda 函数运行。为此,我需要创建一个包含代码和它使用的库的 zip 包。
我可以简单地将软件包依赖项从其安装目录复制到另一个目录,然后将其压缩以上传到 aws 吗?
谢谢。
【问题讨论】:
标签: python amazon-web-services aws-lambda
您的依赖项必须位于您上传的任何目录的根目录下。
部署/ ├─handler.py ├─依赖1/ │ ├─ ...文件 ├─ 依赖2/ │ ├─ ...文件所以亚马逊本质上得到的是一个平面目录中的所有代码。
一种更简单的开发方法是使用 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: .
那么我需要在我的目录中只有handler.py,一个requirements.txt,其中包含dependency1和dependency2,以及上面的模板(默认命名为template.yml)
然后您可以使用sam build 进行构建,使用sam local invoke 进行测试,并使用sam deploy 部署到AWS。
【讨论】:
在这种情况下,如果您想将依赖项与实际代码分开,您可以将它们作为层。 AWS Lambda 提供了这个可共享的层,可以容纳这些需求。如果需要,也可以在不同的 Lambda 函数中使用 depandancies。
遵循以下来自 aws 的文档,了解如何为 Python 创建层。 https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
为了更好的可维护性,您还可以使用 SAM 或 CDK 自动将更改推送到 Lambda,而无需手动上传压缩版本。谢谢!
【讨论】: