AWS lambda只读文件系统错误,使用docker镜像存储ML模型

Vip*_*ove 6 amazon-web-services docker aws-lambda

我在 lambda 上使用 docker 容器映像来运行我的 ML 模型。我的 lambda 函数有一个 S3 触发器来获取图像。我正在尝试运行 lambda 函数,但收到此错误。有人可以帮帮我吗?

错误截图

PS - 现在我知道 /tmp 是 lambda 中唯一可写的目录,但如何解决这个问题?

Rap*_*tin 12

正如其他人提到的,/tmp无论是否使用容器,它都是任何 AWS Lambda 环境中唯一可写的目录。

话虽如此,您应该将整个库(在 lambda 运行时期间 -在容器映像构建期间不起作用)移动到该目录 - 这样库内的所有内容都保持连接 - 然后在中引用您的新库目录Lambda 的库路径环境:LD_LIBRARY_PATH

应在 Lambda 的库路径环境中引用新的库目录,因为 Lambda/opt/默认情况下会查看该目录;由于您刚刚将库移至/tmp,因此您还应该更新LD_LIBRARY_PATH以包含该位置。这可以在 Dockerfile 中完成:

# Set the LD_LIBRARY_PATH
ENV LD_LIBRARY_PATH="/opt/my-lib-folder/:$LD_LIBRARY_PATH"
Run Code Online (Sandbox Code Playgroud)

或者在 Lambda 运行时:

os.environ['LD_LIBRARY_PATH'] = '/tmp/my-lib-folder:' + os.environ['LD_LIBRARY_PATH']

def lambda_handler(event, context):
   # your code ...
Run Code Online (Sandbox Code Playgroud)

如果仍然存在问题,可能与您的库的链接问题有关,或者您没有LD_LIBRARY_PATH正确更新库。

编辑:正如 @rok 所指出的,您无法在容器映像构建期间移动库,因为该/tmp文件夹将被 AWS 自动删除。

  • 我想补充一点,我刚刚遇到了同样的问题,并且在映像构建期间将库移动到 /tmp 不是一个有效的选项,因为 AWS 在启动实例时会清除该文件夹,最终会出现一个空文件夹和一个文件未找到错误。我在文档中没有找到任何对此的引用,但我经历过这一点,我的解决方案是仅在 lambda 执行期间使用 tmp 文件夹。 (2认同)