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
中,瞧 - 它起作用了。
我正在尝试创建一个 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
中,瞧 - 它起作用了。