[AWS Lambda]:如何修复“找不到GLIBC版本2.27”

时间:2019-11-11 12:39:59

标签: amazon-web-services amazon-ec2 aws-lambda amazon-ami

我想部署和测试我的Lambda函数,但是,每次尝试这样做时,我都会收到以下错误消息:

2019-11-11 13:25:33 Mounting /tmp/tmphebm3s_4 as /var/task:ro,delegated inside runtime container
/var/task/bin/inference: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /opt/lib/libopencv_dnn.so.4.1)
/var/task/bin/inference: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /opt/lib/libopencv_video.so.4.1)
/var/task/bin/inference: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /opt/lib/libopencv_objdetect.so.4.1)
/var/task/bin/inference: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /opt/lib/libopencv_features2d.so.4.1)
/var/task/bin/inference: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /opt/lib/libopencv_imgproc.so.4.1)
/var/task/bin/inference: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /opt/lib/libopencv_core.so.4.1)
/var/task/bin/inference: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /opt/lib/libinference_engine.so)
/var/task/bin/inference: /lib64/libdbus-1.so.3: no version information available (required by /opt/lib/libatk-bridge-2.0.so.0)
^C/var/task/bin/inference: /lib64/libdbus-1.so.3: no version information available (required by /opt/lib/libatspi.so.0)
Makefile:85: recipe for target 'run-inference' failed

请注意,inference是我的Lambda函数二进制文件的名称。

我发现了以下链接:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-linux-binary-package/,该链接使我可以使用Amazon Linux盒来创建适合Lambda函数执行环境的部署包。

我的计划是将代码复制到 EC2 实例,并在其上安装 GLIBC 版本进行构建。我认为这将解决上述问题。

问题在于,一旦我通过SSH到 EC2 实例,如何将代码复制到该实例并进行构建?我不是Linux方面的专家,所以这让我有些困惑。

谢谢!

2 个答案:

答案 0 :(得分:0)

我刚刚回答了一个类似的问题,该问题解决了您所遇到的问题,其中与我今天早些时候遇到的问题相同。请看:

How can I use environmental variables on AWS Lambda?

除了查看该位置以外,请注意,您还必须在AWS Lambda函数中打包一层,其中需要具有正确的LIB文件-例如,“ libm.so.6”就是其中之一。您图层的lib文件夹。之后,您将需要设置环境变量,如上面的链接中所述,以便在运行时使用层的正确lib文件,从而使代码成功运行。

为了获得正确的LIB文件,我建议更多地使用Google搜索,并尝试在conda中运行您的代码。我的项目是在conda环境中开发的,当我翻译成virtualenv以便打包成一个Layer然后上传到AWS Lambda时,我注意到我也遇到了这个错误。然后,我从(现在不记得了)我的conda环境的lib文件夹或conda安装目录的lib文件夹中获取了正确的lib文件,然后将其放在了layer包的lib文件夹中。 之后,我必须设置环境变量,以便加载那些特定的lib文件并将其链接到python运行时。

答案 1 :(得分:0)

这里的问题在于您尝试使用的 OpenCV 版本与运行它的操作系统 Amazon Linux 之间不兼容。基本上,您尝试使用为不同系统编译的 OpenCV,但它无法运行。

要解决此问题,您需要为 Amazon Linux 和您使用的当前版本的编程语言构建 OpenCV。这是我使用的 Python 3.7 的 a repository。请注意,除非您注释掉所有 3.8 安装并在 RUN pip3.7 install --upgrade pip 之前在 Dockerfile 中添加一行 RUN pip3.7 install -r requirements.txt <...>,否则它不会正确运行。