【问题标题】:Script works on AWS EC2, but not on AWS Lambda after zipping脚本适用于 AWS EC2,但在压缩后不适用于 AWS Lambda
【发布时间】:2017-12-05 12:34:09
【问题描述】:

我正在使用 M2Crypto 库创建一个简单的 AWS Lambda 函数。我按照从here 创建部署包的步骤进行操作。 lambda 函数在 EC2 Linux 实例 (AMI) 上完美运行。

这是我的函数定义:

CloudOAuth.py

from M2Crypto import BIO, RSA, EVP
def verify(event, context):
  pem = "-----BEGIN PUBLIC KEY-----\n{0}\n-----END PUBLIC KEY-----".format("hello")
  bio = BIO.MemoryBuffer(str.encode(pem))
  print(bio)
  return 

部署包结构:

当我运行 Lambda 时,我遇到了以下问题,我还尝试从 /lib64 目录中包含 libcrypto.so.10,但没有帮助。

运行 Lambda 时出现问题

/var/task/M2Crypto/_m2crypto.so:符号 sk_deep_copy,版本 libcrypto.so.10 未在带有链接时间参考的文件 libcrypto.so.10 中定义`

Python: 2.7
M2Crypto: 0.27.0

【问题讨论】:

  • 能否请您将我的答案标记为已接受,如果是,请?
  • 好的,谢谢!我为像我这样的新手添加了更多细节。
  • 是的,我对EC2一无所知,所以它很有帮助。谢谢。

标签: amazon-web-services aws-lambda m2crypto


【解决方案1】:

我猜 M2Crypto 是用不同版本的 OpenSSL 构建的,而不是 Lambda 上的。见the relevant code。如果没有(上游维护者在此发言),请在https://gitlab.com/m2crypto/m2crypto/issues 提交错误

【讨论】:

    【解决方案2】:

    我只想在@mcepl 的回答中添加更多细节。最重要的是 AWS Lambda 上的 OpenSSL 版本和您构建 M2Crypto 库的环境(在我的情况下为 ec2)应该匹配。

    要检查 Lambda 上的 openssl 版本,请在您的处理程序中使用 print:

    print(ssl.OPENSSL_VERSION)
    

    要检查构建环境中的 openssl 版本,请使用:

    $ openssl version
    

    一旦它们匹配,它就会起作用。

    毫不犹豫地在您的构建环境中降级或升级 OpenSSL 以匹配 Lambda 环境。我不得不在 ec2 上降级我的 openssl 以匹配 lambda 运行时环境。

    sudo yum -y downgrade openssl-devel-1.0.1k openssl-1.0.1k
    

    希望它能帮助任何尝试使用 M2Crypto 的人:)

    【讨论】:

      【解决方案3】:

      在此处复制my answer 的类似问题:

      AWS lambda 在官方文档中提到的旧版本的 amazon linux (amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2) 上运行代码 https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html

      所以要运行依赖于共享库的代码,需要在同一个环境中编译,这样才能正确链接。

      在这种情况下,我通常会使用 docker 容器创建 virtualenv。 virtualenv 可以用 lambda 代码打包。

      请注意,如果您需要使用 yum(在 docker 容器中)安装任何东西,您必须使用与 amazon linux 版本相同的发布服务器:

      yum --releasever=2017.03 install ...
      

      virtualenv 也可以使用 EC2 实例而不是 docker 容器来构建(不过,我发现 docker 方法更容易)。只需确保用于 EC2 的 AMI 与 lambda 使用的 AMI 相同即可。

      【讨论】:

        猜你喜欢
        • 2019-04-03
        • 2019-09-05
        • 1970-01-01
        • 2021-07-27
        • 1970-01-01
        • 2022-01-17
        • 2017-08-08
        • 1970-01-01
        • 2021-01-24
        相关资源
        最近更新 更多