- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 lambda 函数在 Python 3.7 上运行,之前的架构是 x86_64。现在我想将它迁移到 arm64 以使用 Graviton 处理器并升级到 Python 3.9。
虽然我成功创建了具有所需依赖项的 Python 3.9 虚拟环境层,即 aws-encryption-sdk
,但当我将 lambda 函数的架构更改为 arm64 并将运行时更改为Python 3.9,在我测试我的代码后显示以下错误:
Unable to import module 'encryptor-lambda': /opt/python/cryptography/hazmat/bindings/_rust.abi3.so: cannot open shared object file: No such file or directory",
我去检查了我的虚拟环境层,并且非常确定文件 /opt/python/cryptography/hazmat/bindings/_rust.abi3.so
存在于那里。
然后我尝试将我的运行时保持在 Python 3.9 并将体系结构切换回 x86,它起作用了!只有当我尝试将其更改为 arm64 时,它才会出现上述错误。
我在网上查找但似乎没有解决方案或为什么会这样。需要依赖的 lambda 函数不能迁移吗?还是我遗漏了什么?
最佳答案
类似 aws-encryption-sdk-python 的库有时包含不是纯 Python 的代码/依赖项,需要编译。当代码需要“编译”时,通常会针对目标架构(如 ARM 或 x86)进行编译,以便正常运行。
您不能在不同的架构上运行为一种架构编译的代码。所以我怀疑这是你出错的原因。
查看错误信息我怀疑是cryptography library导致这个问题。
该库使用 Rust。如果检查您的错误,您将看到 Rust 绑定(bind)的共享库是导致错误的原因 (_rust.abi3.so
)。根据库的文档,支持 ARM 架构。
因此,我怀疑您打包 Lambda 部署程序包的方式及其依赖项是问题所在。您可能在具有 x86 体系结构的计算机上执行此操作。像 pip
这样的包管理器通常会检测它们运行的操作系统和架构,并下载这些操作系统和架构的依赖项。
所以我猜你有两个选择:
这两个选项都不是很好。
不幸的是,这是 Python Lambda 的开发/部署变得非常麻烦的领域之一。每次依赖项使用非 Python 扩展(如 C 扩展)时,打包/部署都会成为问题。
也许其他人可以推荐一个很棒的工具。
关于python - 在 AWS Lambda 上迁移到 arm64 显示错误 : Unable to import module 'encryptor-lambda' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70649979/
我和一个同事决定尝试制作一个基本的 Python 程序,该程序将 1) 打乱字符串并 2) 取消打乱字符串。我们的想法是我们可以互相发送绝对垃圾。 我的第一次尝试(我对此很糟糕): x = ("Thi
我正在开发一个商业软件项目,其中包含一些敏感的 JavaScript 代码。 我知道不可能阻止任何人看到我的代码,所以我研究了一些方法来使其更难做到这一点,我发现 this page女巫看起来很有前途
使用正确的凭据登录后,我无法登录管理面板。这是我收到的错误消息: 1 exception(s): Exception #0 (Exception): Notice: Undefined offset:
我正在使用 Jasypt 加密并在属性文件的 ENC() 中指定属性值。解密密码通过命令行参数发送,如下所示 java -Djasypt.encryptor.password=somepassword
我正在使用 jasypt-1.9.0 进行加密。 Jdbc.properties jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.u
我有一个 lambda 函数在 Python 3.7 上运行,之前的架构是 x86_64。现在我想将它迁移到 arm64 以使用 Graviton 处理器并升级到 Python 3.9。 虽然我成功创
我是一名优秀的程序员,十分优秀!