【发布时间】:2020-02-10 15:06:15
【问题描述】:
大纲:我需要在一些 AWS lambda 函数中使用 scikit-image,所以我希望构建一个包含 scikit-image 的自定义 AWS lambda 层。
我的问题通常适用于任何 python 模块,尤其是 scikit-learn,或者我认为的任何自定义层。
背景:经过大量谷歌搜索和阅读,似乎最好的方法是使用 docker 在本地运行 AWS lambda 运行时,然后在其中安装/编译 scikit-image(或任何其他您正在寻找的模块)。完成后,您可以将其作为自定义层上传/安装到 AWS。
这在概念上非常简单,但我正在努力寻找最佳实践方法来做到这一点。我已经完成了这项工作,但不确定我是否以最好/正确/最佳/安全的方式进行... 关于这方面的博客文章数以百万计略有不同,AWS 文档本身(恕我直言)过于详细,但跳过了一些基本问题。
我一直在努力关注两个不错的中型帖子,here 和 here ...向这些人致敬。
我的主要问题是:
- 在哪里可以找到最新的 AWS AMI docker 映像?
对于所谓的最新图像,有多个(甚至在亚马逊本身)多个位置/版本等。例如https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html,或https://cdn.amazonlinux.com/os-images/2.0.20190823.1/。
..这忽略了许多非亚马逊 github 托管的可能性,例如来自中等帖子 here 的lambci/lambda:build-python3.6,或来自here 的onema/amazonlinux4lambda。
为了安全性和最新性,我更喜欢使用亚马逊提供的 docker 映像。
- 链接到this AMI 的 AWS lambda 运行时 here 是 docker 映像吗?如果是(或不是)如何下载它以在本地运行?
- 您如何确保知道何时可能需要重建层,因为亚马逊更改了 AWS lambda 运行时,这会破坏您使用旧运行时的层?
- 最好构建(在 scikit-image 的情况下编译)docker AIM 容器内的 pip 安装模块,或者只是告诉 pip 下载预构建版本 并希望/相信它会获得最适合您正在运行的 AMI 的编译库?
基本上在这里我关心的是稳定性和性能。我想确保在这种情况下为 scikit-image 编译的库尽可能针对 AMI 容器进行优化。
- 下载并使用AWS's SAM 来完成所有这些工作会更好吗?(看起来有点矫枉过正而且很复杂,但它确实可以确保您使用的是“正确的”AMI docker 容器)
- 是否有任何(好的、可信赖的)预先构建的 lambda 层的回购(这可能使这一切成为一个有争议的问题)?我看了但找不到。
...感谢您的任何建议、想法和 cmets!
【问题讨论】:
标签: python-3.x scikit-learn aws-lambda scikit-image