AWS Lambda 在图层中找不到共享对象文件

AWS Lambda not finding Shared Object File in Layer

我正在尝试创建一个 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 变量,但仍然没有成功。任何帮助表示赞赏。

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

首先,从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 :

Layers are extracted to the /opt directory in the function execution environment.

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