【发布时间】:2022-02-24 17:51:14
【问题描述】:
我正在使用 AWS Lambda 中的加密库。我在 Amazon Linux VM 中使用 pip 编译了该软件包。我已将包作为图层上传。无论哪种方式,每次调用该库时,都会出现一个根本无法描述的错误:
Unable to import module 'lambda_function': libffi-ae16d830.so.6.0.4: cannot open shared object file: No such file or directory
如您所见,错误不是找不到库,而是另一个我无法找到的共享模块。
这是我尝试在 Lambda 上执行的代码示例:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.fernet import Fernet
password_provided = "test123"
password = password_provided.encode()
salt = b'test_'
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
backend=default_backend()
)
key = base64.urlsafe_b64encode(kdf.derive(password))
message = "message from db".encode()
f = Fernet(key)
encrypted = f.encrypt(message)
print(encrypted)
f = Fernet(key)
decrypted = f.decrypt(encrypted)
print(decrypted.decode("utf-8"))
这不是我第一次编译一个库以在 AWS Lambda 上工作,但在这种情况下,我什至编译了密码学库。我应该添加或更改什么?
编辑: 我发现我创建的 zip 文件中缺少该库,就像在隐藏文件夹中一样。我使用“。”进行压缩。而不是 '*' 但现在我遇到了一个新问题:当我运行 lambda 时,我得到了这个:
Unable to import module 'lambda_function': /opt/cryptography/hazmat/bindings/_constant_time.so: undefined symbol: PyInt_FromLong
有什么想法吗?
【问题讨论】:
-
我不完全确定,但看起来你编译的库包含一个依赖于 libffi-ae16d830.so 的 SO 文件 - 也许检查你是否可以以某种方式将它包含在你的包中。
标签: python aws-lambda