【发布时间】:2019-05-07 17:11:33
【问题描述】:
我正在尝试创建一个运行时层,以便使用 R 作为 lambda 函数的运行时使用它们的 new runtime API。
为此,我创建了一个包含 R 所需的所有依赖项的层,然后创建了包含 R 本身的第二层。我使用运行 lambda 的相同 Amazon AMI 构建了这些层。我通过压缩图层、创建新实例、然后下载图层并将其解压缩到新实例中来测试我的构建(将所有内容放在 /opt 中,这也恰好是我在构建 R 及其依赖项时安装它们的地方) .我使用了资源最少的实例类型(2 cpu,4GB RAM)。据我了解,这应该非常接近 lambda 环境。
我有一个小测试脚本 (test.r),它只是将一条消息打印到标准输出。 这在测试环境中运行良好。这是脚本:
cat("hello from planet lambdar")
这是在我的层的引导脚本中调用它的方式:
SCRIPT=$LAMBDA_TASK_ROOT/$(echo "$_HANDLER" | cut -d. -f1).r
echo "About to run $SCRIPT"
/opt/R/bin/Rscript $SCRIPT
从下面的日志中可以看出,脚本的名称被正确发送和解析。我之前已经确认脚本 test.r 按预期登陆 /var/task 。但是通过 lambda 运行此脚本会导致分段错误:
START RequestId: 2c1b8801-f903-11e8-a32d-796c039278f1 Version: $LATEST
About to run /var/task/test.r
/opt/bootstrap: line 18: 18 Segmentation fault (core dumped) /opt/R/bin/Rscript $SCRIPT
我如何调试此分段错误,因为该进程在运行 lambda 使用的相同 Amazon AMI 的最小 EC2 实例上运行良好,加载了我为添加到我的 lambda 的层创建的相同工具和依赖项集功能?
【问题讨论】:
-
我面临着完全相同的问题。看起来这是 AWS 本身的问题。我们的日志返回错误:
signal: SIGSEGV, stdout: , stderr: -
@KauêGimenes 在下面看到我的答案。希望其中的一些花絮对您的情况有所帮助。
标签: r amazon-web-services aws-lambda