【问题标题】:Deploy AWS Lambda package with Python 3.6 and Cryptography module使用 Python 3.6 和 Cryptography 模块部署 AWS Lambda 包
【发布时间】:2018-07-03 06:12:50
【问题描述】:

我正在尝试部署 AWS Lambda 程序包。该语言是 Python 3.6,它包括外部模块(flask-ask 和间接cryptography)。当我这样做并测试功能时,AWS 报告错误:

No module named 'cryptography.hazmat.bindings._openssl'

我的开发环境是 Windows 10。我的功能在我的开发环境中运行良好。我用 Powershell 脚本打包了这个函数...

& $pip install flask-ask -t $projectDir

...然后将结果和函数压缩成压缩包。我的 Python 3.6 开发版本是 64 位的。

问题

为什么该功能在本地工作,但打包并发送到 AWS 时却不行? 缺什么?以及如何解决。

类似问题

我在这里发现其他人也有类似的问题:

我讨厌切换到 Python 2.7。第二个只有linux开发环境的解决方案。

【问题讨论】:

  • 您解决过这个问题吗?在测试我的 lambda 时,我无法加载 Crypto 本机库。
  • 克里斯,解决方案是使用 Python
  • 你能澄清一下吗?你的意思是你恢复到 Python 2.7?如果是这样,您是如何解决 pyOpenSSL 库和 2.7 中的其他不兼容问题的?

标签: python-3.x amazon-web-services lambda


【解决方案1】:

答案较晚,但在 AWS Lambda 开发中需要理解的关键是运行时环境,独立于语言,是一个精简的 Amazon Linux 容器。具有本机依赖项(如 cryptography)的 Python 代码使用特定于操作系统和架构的二进制文件。

当您运行 pip install cryptography 时,它会在您的本地计算机的上下文中运行,这意味着任何依赖的二进制文件都将根据操作系统风格和 CPU 架构进行安装。您无法将它们打包并在 AWS Lambda 环境中运行。

解决方案是使用工具从预打包的发行版中组装您的依赖项(Zappa 会这样做),或者执行在兼容环境中安装/编译依赖项的构建步骤(AWS SAM CLI 会这样做)。

我个人更喜欢 AWS SAM CLI,但 YMMV。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多