为aws-lambda创建python库zip



我有一些使用visualstudio开发的python代码。我想在aws中将此python代码作为lambda函数运行。要做到这一点,我需要创建一个包含代码和它使用的库的zip包。

我可以简单地将软件包依赖项从安装目录复制到另一个目录中,然后将其压缩上传到aws吗?

谢谢。

基于https://docs.aws.amazon.com/lambda/latest/dg/python-package-create.html#python-使用依赖创建包

您的依赖项需要位于您正在上传的任何目录的根目录。

部署/├─手柄.py├─依赖性1/│  ├─ ...文件├─依赖性2/│  ├─ ...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: .

然后,我的目录中所有需要的都是handler.py,一个包含dependency1dependency2requirements.txt,以及上面的模板(默认命名为template.yml(

然后可以使用sam build进行构建,sam local invoke进行测试,sam deploy部署到AWS。

我将使用;请求";模块。

  1. 导航到包含lambda_function.py的项目目录源代码文件,然后运行以下命令

pip-install--target。/请求

  1. 所有依赖项都将在您的项目目录中创建。

  2. 把它们都像下面的结构一样压缩。

├my_deployment_package.zip
├──bin/
├──请求/
├──...所有其他文件夹/
├──lambda_function.py

  1. 在lambda函数中上传zip文件
  2. 从那时起,您可以在AWS控制台中编辑lambda_function.py文件

在这种情况下,如果您想将依赖关系与实际代码分离,可以将它们作为层。AWS Lambda提供了这种可共享的层,可以满足需求。如果需要,也可以在不同的Lambda函数中使用这些depandations。

按照aws下面关于为Python创建层的文档进行操作。https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

为了更好地维护,您还可以SAM或CDK自动将更改推送到Lambda,而无需手动上传压缩版本。谢谢

最新更新