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

tma*_*ath 6 java shared-libraries amazon-web-services selenium-chromedriver aws-lambda

我正在尝试创建一个 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
Run Code Online (Sandbox Code Playgroud)

我已了解到您可以通过 Lambda 中的软件层包含本机库,并且我了解您必须在 Amazon Linux 环境中对其进行编译,如此处所述

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

tma*_*ath 11

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

首先,从https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.htmlLD_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,瞧 - 它起作用了。