【问题标题】:How are AWS Lambda layers able to work with private Conda repos?AWS Lambda 层如何与私有 conda 存储库一起使用?
【发布时间】:2020-03-13 10:12:36
【问题描述】:

我使用 conda 并且有一个私人 conda 存储库

一个函数可以使用的最大层数是五层。所以我不能把我的每一个私有 conda 包都上传为一个单独的层——因为函数可能需要使用超过 5 个

我不清楚层应该如何解决这个问题,或者它们是否不是为这类事情设计的

我是不是只有一个 lambda 层用于基本 conda 环境,然后让 lambda 使用该层来导入我的私有 conda 包?或者我应该将我的整个函数作为一个新层本身上传,在那里我将使用我所有的私有 conda deps 在本地构建我的 conda python 应用程序,将它作为一个新层上传,然后有一个 不同的 函数调用是吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda anaconda conda aws-lambda-layers


    【解决方案1】:

    您可以尝试将所有私有包构建到一个单独的 - single - 层中,然后将您自己的(单一)层与您的函数一起使用。 ……这对你有用吗? (层中没有限制,它们只需要包含单个包/模块)

    如果您的基础 conda env 也有公共包,您还可以为该环境构建一个单独的层 - 因此,在您的函数中,您将包含两层 - 一层用于您的基础 conda env,一层用于您的所有私人包。

    在我的代码中,我将 conda 用于开发,但不用于部署。目前我已经构建并使用了一个包含 skimage 的私有层,但是我用 lambda 本身构建了我所有的私有包,而不是将它们捆绑为一个层。但我已经考虑过以后要走这条路。

    我还使用 AWS 的 SAM 进行构建和打包,这让事情变得容易多了。但我不确定使用 conda 而不是 pip 是否容易。

    Here's a post I did on using SAM to make layers - 如果你走那条路可能会有所帮助(......你现在可以使用 SAM 来构建/安装层,但它需要一点力气)

    【讨论】:

    • 这就是我想我必须做的,将特定的应用程序部署为一个层——这有点违背层的用例,因为我相信它们应该是为了共享依赖关系职能?我可以在同一个 SAM 模板中部署一个层以及一个使用该层的函数吗? SAM 模板会压缩并为我上传我的图层并将函数指向它吗?
    • 在本例中:bryson3gps.wordpress.com/2018/12/06/…。 Hes 使用 hack 让 SAM 构建一个层。我想你需要为 SAM 定义一个函数来构建任何东西,他说This does result in an orphan Lambda function that will never be used- 对于我的用例,那个“孤儿”函数实际上是我想要使用我的层的 lambda 吗?听起来它会做我想要的。我没有上传我打算与任何其他功能共享的图层
    • 在我看来,有两种方法可以做到这一点:在“动态链接”模型中,您对所有相关模块(私有或公共)使用层。在“静态链接”模型中,您不使用层,而是在构建时将这些模块包含在功能包中。我认为在您上面所描述的“对于我的用例中,“孤儿”函数实际上是我想要使用我的层的 lambda”,您在某种程度上将其作为一个静态库来执行,因为您的层和函数是一个并且相同(包装明智)。
    • 对于您的第一条评论的答案:是的 - SAM 可以构建/部署一个层(使用 bryson 的黑客)并同时运行。是的,在同一个模板中,您还可以(实际上您需要)部署使用该层的功能。是的,SAM 将压缩、上传(即 SAM 中的“打包”)层,以及“部署”它(向 AWS lambda 注册等)。请注意,一旦构建了该层,您就可以稍后在您构建/部署的任何其他功能中使用它 - 这是一个真正的层,因此以后不会限制谁使用它。
    • 这也可以通过自定义运行时来实现吗? docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html
    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2020-08-11
    相关资源
    最近更新 更多