【问题标题】:AWS Lambda not finding Shared Object File in LayerAWS Lambda 未在层中找到共享对象文件
【发布时间】:2021-05-27 22:34:46
【问题描述】:

我正在尝试创建一个 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 such file or directory

我了解到您可以通过 Lambda 中的软件层包含本机库,并且我知道您必须在 Amazon Linux 环境中编译它,如 here 所述。

但是,在压缩文件并创建我的图层后,它仍然没有拾取库,并给出同样的错误。我还尝试将它放在 zip 文件中的各个目录中,例如 /opt/opt/lib,并在函数中设置 LD_LIBRARY_PATH 变量,但仍然没有运气。任何帮助表示赞赏。

【问题讨论】:

  • 我认为您应该将共享库放在/lib64/ 中。另外不确定如何部署您的lambda,您可以简单地创建一个可以使用java lambda docker image 在本地测试的docker 映像。必须更快且可在本地进行全面测试。
  • /lib64 也不起作用。我正在通过 AWS 控制台部署它。我只是不明白为什么这个问题有这么多不同的答案,而且似乎没有一个有效......

标签: java amazon-web-services aws-lambda selenium-chromedriver shared-libraries


【解决方案1】:

好吧,我终于想通了。在阅读了更多文档后,我发现了两个关键点:

首先,从https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html开始,LD_LIBRARY_PATH默认设置为:

/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib

其次,来自https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path

层被提取到函数执行环境中的/opt目录。

因此,将这两个事实放在一起,我推断如果我将依赖项放在层内的 /lib 中,它们最终会出现在 /opt/lib 中,也就是 LD_LIBRARY_PATH 中,瞧——它起作用了。

【讨论】:

  • 我只是想澄清一下,因为我一直在努力解决这个问题:您确实将 .so 文件移动到名为 lib 的文件夹中并将其压缩,它可以工作吗?我发誓我试过了,但没用。
  • 是的。需要检查的几件事:确保您没有在环境变量中覆盖 LD_LIBRARY_PATH。可能有超过 1 个依赖项丢失,因此请确保错误不是在抱怨另一个依赖项。确保您使用的是 64 位版本而不是 32 位版本,否则您会收到类似的错误 - 请务必将其展开以阅读错误的全文。
  • 您认为 Amazon Linux 使用什么基本操作系统? CentOS?
  • @Axl Amazon Linux 是它自己的操作系统。但是当你输入cat /etc/*release 时,它会显示ID_LIKE="centos rhel fedora",所以我猜它是基于它的。但是,如果您问我如何获得所需的库,我会在本地运行 Amazon Linux 2 的 docker 映像,并在使用 yum 安装它们后从那里获取它们。
  • 我遇到了同样的问题,需要将 lambda 函数运行时从“Runtime.DOTNET_CORE_3_1”更改为“Runtime.PROVIDED”。我找不到有关在不同运行时中提供哪些库的官方文档。但是发现,根据以下reddit线程libglib.so.1在运行时reddit.com/r/aws/comments/bxzzov/…中丢失
猜你喜欢
  • 2021-08-11
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多