首页 > 解决方案 > 使用 Docker 容器在 SAM 应用程序中的多个 AWS Lambda 之间共享代码

问题描述

我有一个带有多个 Lambda 的 SAM 应用程序和一些我想在它们之间共享的实用程序代码。使用 zip 文件打包 Lambda 时,可以使用 Lambda 层进行代码共享。但是,根据 AWS 文档,使用容器时不支持 Lambda 层。

定义为容器镜像的函数不支持层。构建容器镜像时,可以将首选运行时和依赖项打包为镜像的一部分

我尝试将我的依赖项复制到一个单独的 docker 映像中,然后从我的 lambda dockerfile 中的该映像中提取,这在 AWS 博客文章Working with Lambda layers and extensions in container images中提出了建议。但是,我只是Unable to import module 'app': No module named '<my_dependency>'在尝试调试或运行时收到错误消息sam local invoke。我在最终图像中验证了依赖项位于/opt/python/我的 python lambda 的目录中,并尝试了其他文件夹结构,但没有运气。

有没有人能让这个工作?

标签: amazon-web-servicesdockeraws-lambdacontainerssam

解决方案


我已经想通了。依赖项(例如,utils.py)确实需要在/opt/python/文件夹中,但是当我尝试对此进行测试时,我是使用 docker cli 手动构建我的 docker 映像而不是使用sam build,并且我有错误的映像标记。因此,调试器使用了我之前版本的 docker 镜像,该镜像不工作。为了解决这个问题,我只需要sam build在尝试本地调试我的 lambda 之前运行。


推荐阅读