【问题标题】:creating python library zip for aws lambda为 aws lambda 创建 python 库 zip
【发布时间】:2021-07-14 03:38:41
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: python amazon-web-services aws-lambda


    【解决方案1】:

    基于https://docs.aws.amazon.com/lambda/latest/dg/python-package-create.html#python-package-create-with-dependency

    您的依赖项必须位于您上传的任何目录的根目录下。

    部署/ ├─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,其中包含dependency1dependency2,以及上面的模板(默认命名为template.yml

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

    【讨论】:

      【解决方案2】:

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

      遵循以下来自 aws 的文档,了解如何为 Python 创建层。 https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

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

      【讨论】:

      • 将依赖项放入 zip 文件的过程是什么。例如,如果我需要使用 requests 库,我可以将 requests 文件夹复制到另一个文件夹然后压缩它,还是我需要使用 pip 安装到该文件夹​​然后压缩它。我发现 aws 文档不清楚。
      • 查看上面的链接是否有助于创建具有相关性的图层。如果不是,将尝试解释该过程。
      • 好的,所以我按照示例进行了操作,并且成功了。如果我需要导入请求库,我是否会做同样的事情 - 只需复制请求库文件夹(和相关文件夹)并将其压缩并上传到 aws?
      • 当我尝试安装 requests tomy 文件夹时,我收到此错误:C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exe: No module named install.__main__; 'install' 是一个包,不能直接执行是什么意思?
      猜你喜欢
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2016-03-05
      • 2022-01-10
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多