我有一个无服务器服务,我希望能够使用AWS Lambda中的sasl
pypi包。不幸的是,AWS Lambda环境似乎没有最新版本的libstdc ++。所以,这意味着当我们的构建服务器拉出pip install
' sasl包时我们调用lambda,有预期的错误:
Unable to import module 'handler': /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /var/task/sasl/saslwrapper.so)
我的问题是:如何解决这个问题?
有没有办法在更新的libstdc ++。so.6上在Amazon Linux实例上构建这些,以便它可以与lib捆绑在一起?将LD_LIBRARY_PATH
env变量设置为.
并包含最新版本的libstdc ++。so.6可以吗?围绕这个地方有最好的做法吗?
答案 0 :(得分:2)
您可以使用带有amazonlinux
的docker作为基本映像来构建所有依赖项,然后将这些依赖项复制到您的压缩包中,以便上传到您的实际lambda:https://medium.com/@johnnyopao/python-dependencies-and-aws-lambda-18acbdebca20
或者您可以在远程EC2(构建)实例上执行等效操作:http://www.perrygeo.com/running-python-with-compiled-code-on-aws-lambda.html
最后一个选项,使用AWS Cloud 9作为您的IDE,如下所示:https://markn.ca/2018/02/python-extension-modules-in-aws-lambda/
答案 1 :(得分:1)
您可以简单地为 lambda 添加此自定义 gcc 版本所需的 gcc-c++ 二进制文件: https://github.com/lambci/gcc-lambda-layer
或者像 Bluu 的回答一样编译您自己的图像。
答案 2 :(得分:-1)
AWS Lambda是适用于许多应用场景的理想计算平台,前提是您可以使用AWS Lambda支持的语言编写应用程序代码(即Node.js,Java,C#和Python)
你正在做一些你不应该做的事。
你可能能够破解它(过去我已经成功地从我的构建机器重新分发了 libstdc ++ 和 libgcc_s ,并将它们与我的可执行文件一起存储在某处并确保在运行时使用-Wl,-rpath,'$ORIGIN'
首选它们,但您基本上可以自己使用。
C ++实际上并不是设计用于除了构建它之外的平台,因此除非亚马逊提供“AWS Lambda”环境来构建内容,否则你将陷入这样的黑客行为。 / p>