无法在 AWS Lambda 中使用 python 库 -“smbprotocol”(1.9.0)

问题描述 投票:0回答:1

我想在我的 Lambda 函数中使用 smbprotocol python 库。

我尝试将其添加为部署包:

mypackage.zip
|
|--> packages
|    |
|    |-->pip
|    |-->smbprotocol
|    |-->..
|--> myscript.py

给我以下错误:

[错误] Runtime.ImportModuleError:无法导入模块 “generate_sequenceFile_submit_request”:无法导入名称“x509” 'cryptography.hazmat.bindings._rust'

我尝试创建一个图层并通过图层使用它。同样的错误。

我用来创建我的包文件夹或我的图层的requirements.txt包含:

  • smb协议
  • 我使用的Python版本是3.9

我的图层是使用具有路径的 zip 文件创建的 \python\lib\python3.9\site-packages\

(我通过运行以下命令创建了图层: 点安装。 -t \python\lib\python3.9\site-packages)

奇怪的是,当我在本地运行它时,它在我的虚拟环境中运行良好。

我正在 Windows 中开发。

python python-3.x aws-lambda
1个回答
0
投票

我可能错过了尝试这一点,但很多人可能不知道这可能是一个问题。所以我自己来回答这个问题。

选项 1:

通常,如果我们要部署外部库(AWS 在 Lambda 实例中默认不提供的库),我们会使用 Lambda 部署包。

Lambda 部署包是一个 zip 文件,其中包含位于其根目录的 Lambda 代码以及位于名为 packages 的文件夹中的代码所需的 Python 库。

mypackage.zip
|
|--> packages
|    |
|    |-->pip
|    |-->smbprotocol
|    |-->..
|--> myscript.py

选项2:

或者有些人还想使用他们使用依赖项创建的 Lambda 层,然后将该层添加到 lambda 函数中。 (大多数情况下如果多个 lambda 函数使用相同的库)

以下是该层所需 zip 所需的结构。

mylayer.zip
|
|--> python
     |
     |-->lib
         |
         |-->python3.9 <your version of python>
             |
             |-->site-packages
                 |
                 |--> <pip should download all required libraries here>

通常,Python 库是平台无关的。但在某些情况下,事实并非如此。在这种情况下,需要在 AmazonLinux 容器中完成 pip 安装,然后再添加到 zip 中。

如果库不是平台无关的,那么在这两个选项中,您必须在 AmazonLinux 容器中运行 pip install 并使用这些库创建包。为什么选择 AmazonLinux?因为 Lambda 实例在这些容器中运行。

希望有一天这会对某人有所帮助。 :)

© www.soinside.com 2019 - 2024. All rights reserved.