Java AWS Lambda在层中找不到共享对象文件
我正在尝试创建一个Lambda函数,该函数在Java中运行Selenium测试,作为AWS中CI/CD管道的一部分。但是,该函数安装Chromedriver后失败,因为Chromedriver所需的.so文件丢失:Java AWS Lambda在层中找不到共享对象文件,java,amazon-web-services,aws-lambda,selenium-chromedriver,shared-libraries,Java,Amazon Web Services,Aws Lambda,Selenium Chromedriver,Shared Libraries,我正在尝试创建一个Lambda函数,该函数在Java中运行Selenium测试,作为AWS中CI/CD管道的一部分。但是,该函数安装Chromedriver后失败,因为Chromedriver所需的.so文件丢失: /tmp/chrome_driver7811961600494562711/chromedriver: error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file: No
/tmp/chrome_driver7811961600494562711/chromedriver: error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file: No such file or directory
我已经读到,您可以通过Lambda中的软件层包含本机库,并且我知道您必须在amazonlinux环境中编译它,如前所述
但是,在压缩文件并创建“我的图层”之后,它仍然没有拾取库,并给出相同的错误。我还尝试将它放在zip文件的不同目录中,如
/opt
,/opt/lib
,并在函数中设置LD\u LIBRARY\u PATH
变量,但仍然没有成功。谢谢你的帮助。好的,我终于明白了。在阅读了更多文档后,我发现了两个关键点:
首先,从,默认情况下,LD_LIBRARY_路径
设置为:
/lib64:/usr/lib64:$LAMBDA\u RUNTIME\u DIR:$LAMBDA\u RUNTIME\u DIR/lib:$LAMBDA\u TASK\u ROOT:$LAMBDA\u TASK\u ROOT/lib:/opt/lib
第二,来自:
层被提取到函数执行环境中的/opt
目录中
因此,将这两个事实放在一起,我推断如果我将依赖项放在层内的
/lib
中,它们将最终放在/opt/lib
,它位于LD\u LIBRARY\u PATH
中,瞧,它起作用了。我认为您应该将共享库放在/lib64/
中。另外,还不确定如何部署lambda,您只需创建一个docker映像,就可以使用它在本地进行测试。必须更快且完全可在本地测试。/lib64
也不能工作。我正在通过AWS控制台部署它。我只是不明白为什么这个问题有这么多不同的答案,但没有一个是有效的……我只是想澄清一下,因为我已经在这个问题上绞尽脑汁了一段时间:你真的将.so文件移动到一个名为lib的文件夹中,然后将其压缩,它就可以工作了?我发誓我试过了,但没用。需要检查的几件事:确保没有覆盖环境变量中的LD_LIBRARY_路径。缺少的依赖项可能不止1个,因此请确保错误没有抱怨其他依赖项。请确保您使用的是64位版本而不是32位版本,否则会出现类似的错误-请确保将其展开以读取错误的全文。