为在AWS Lambda中使用的python包指定C(++)依赖项

时间:2017-07-11 20:58:46

标签: python gcc linker pip aws-lambda

我有一个无服务器服务,我希望能够使用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可以吗?围绕这个地方有最好的做法吗?

3 个答案:

答案 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)

Here's your problem

  

AWS Lambda是适用于许多应用场景的理想计算平台,前提是您可以使用AWS Lambda支持的语言编写应用程序代码(即Node.js,Java,C#和Python)

你正在做一些你不应该做的事。

你可能能够破解它(过去我已经成功地从我的构建机器重新分发了 libstdc ++ libgcc_s ,并将它们与我的可执行文件一起存储在某处并确保在运行时使用-Wl,-rpath,'$ORIGIN'首选它们,但您基本上可以自己使用。

C ++实际上并不是设计用于除了构建它之外的平台,因此除非亚马逊提供“AWS Lambda”环境来构建内容,否则你将陷入这样的黑客行为。 / p>