sdu*_*gan 5 python amazon-web-services aws-lambda serverless-framework python-cryptography
我正在开发一个部署到 AWS Lambda 的无服务器 Flask 应用程序。该程序使用密码学库(使用版本3.4.7)。在本地,程序运行良好,没有任何问题。但是,每当部署在 Lambda 上时,都会出现以下错误:
from cryptography.fernet import Fernet
File "/var/task/cryptography/fernet.py", line 16, in <module>
from cryptography.hazmat.primitives import hashes, padding
File "/var/task/cryptography/hazmat/primitives/padding.py", line 11, in <module>
from cryptography.hazmat.bindings._padding import lib
ImportError: /var/task/cryptography/hazmat/bindings/_padding.abi3.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
当使用“危险材料”模块中的一些必需功能时,会出现非常相似的错误:
File "/var/task/cryptography/hazmat/primitives/kdf/pbkdf2.py", line 28, in __init__
backend = _get_backend(backend)
File "/var/task/cryptography/hazmat/backends/__init__.py", line 23, in _get_backend
return default_backend()
File "/var/task/cryptography/hazmat/backends/__init__.py", line 14, in default_backend
from cryptography.hazmat.backends.openssl.backend import backend
File "/var/task/cryptography/hazmat/backends/openssl/__init__.py", line 6, in <module>
from cryptography.hazmat.backends.openssl.backend import backend
File "/var/task/cryptography/hazmat/backends/openssl/backend.py", line 113, in <module>
from cryptography.hazmat.bindings.openssl import binding
File "/var/task/cryptography/hazmat/bindings/openssl/binding.py", line 14, in <module>
from cryptography.hazmat.bindings._openssl import ffi, lib
ImportError: /var/task/cryptography/hazmat/bindings/_openssl.abi3.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是,引用的库文件确实存在,并且它们位于指示的确切路径中。
该应用程序cryptography==3.4.7作为依赖项包含在requirements.txt中。然后,无服务器安装软件包,同时使用sls deploy. 无服务器将所有内容放在一个 zip 中并将其上传到 AWS。我可以按预期看到此 zip 文件夹中的所有文件。
我认为这可能是无服务器在部署时错误上传或安装软件包的问题,所以我什至尝试将加密文件夹直接包含在我的项目中。然而,尽管对无服务器配置或加密包本身进行了任何更改,但我在部署的 Lambda 上使用此包并未成功。有谁知道我可以做些什么来使这项工作成功?
之前我也遇到过类似的问题,通过在 Linux 机器上运行部署命令解决了这个问题。我使用 mac 进行开发,并且尝试从 mac 部署我的 lambda 函数。然而,当部署它时,一些依赖项引发了导入错误。
根据我的经验,这是由于操作系统在 mac 或 linux 环境中运行时对依赖项的打包方式不同。因此,请尝试从 Linux 计算机内部运行无服务器部署命令,看看是否有效。
就我而言,我设置了一个 gitlab CI/CD 管道来在 gitlab 管道环境中运行命令,这解决了问题。
| 归档时间: |
|
| 查看次数: |
12859 次 |
| 最近记录: |