【问题标题】:AWS Amplify and importing Lambda Layers in Python gives module not found errorAWS Amplify 和在 Python 中导入 Lambda 层会导致找不到模块错误
【发布时间】:2021-03-19 08:00:03
【问题描述】:

如何导入共享 lambda 层的资产?在this 之后,我创建了 lambda 层,向该层添加了共享代码。将图层添加到函数中。现在在使用图层的 lambda 函数中,您如何使用创建的图层的 opt 文件夹中放置的文件?文档说您可以在 lambda 层的 opt 路径中查找文件。但是如果有多个 lambda 层呢?如何将选择路径缩小到特定层?

编辑

我的新文件夹结构如下。我正在尝试从 Index.py 中的 myClass.py 文件中调用名为 my_utils 的通用共享实用程序类,并将层函数文件放在 site-packages 文件夹和 opt 文件夹中

app-root
  -amplify
     -backend
        -function
          -myLayer
            -lib\python\lib\python3.8\site-packages\myClass.py
            -opt\myClass.py
  -amplify
     -backend
        -function
          -myFunction
            -Index.py

以下是我尝试在调用处理程序 Index.py 中导入的各种组合

from myClass import my_utils
import myClass
import my_utils

有了上面的安排和import语句,我还是得到了ModuleNotFoundError

【问题讨论】:

    标签: python aws-lambda aws-amplify aws-lambda-layers


    【解决方案1】:

    来自有关 lambda 层的文档。

    “图层按照指定的顺序应用,合并所有同名文件夹。”

    https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

    此处显示的导入 python 层:https://adhorn.medium.com/getting-started-with-aws-lambda-layers-for-python-6e10b1f9a5d

    layer 1

    def foo():
      print('I am from layer 1')
      return 1
    

    layer 2

    def bar():
      print('I am from layer 2')
      return 1
    

    然后像这样从图层中导入函数。他们在哪里并不重要。

    actual function

    import foo
    import bar
    

    为了使导入正常工作,请确保将图层放在opt/python 目录中并压缩内容。我从以下位置获得此信息:https://stackoverflow.com/a/54796202/5647552

    注意: 不同层的顺序并不重要,除非您的层中有相同的函数名称。就像两个层导出相同的函数:foo(),那么顺序将决定您在实际函数中导入哪一个。

    【讨论】:

    • 嗨。感谢您的回复。这似乎是在纯 lambda 上下文中创建的,而不是在 AWS Amplify 创建函数时创建的。使用 Amplify,层函数会在与调用函数所在文件夹处于同一级别的不同文件夹中创建。
    • 我更新了问题,提供了更多详细信息以显示相关文件夹结构。
    • 您上面的链接有一个关于通过放大 cli 更改顺序的部分,因此它应该适用
    • 再次感谢。为简单起见,我现在只保留一层功能,在检查您发送的链接后,我稍微调整了设置,但仍然出现相同的错误。
    • 我遇到了同样的问题,并让我使用“amplify/backend/function/layerfc/opt/python/lib/python3.8/site-packages/testii”中的 layer-python-file .py",导入如下:import testii as tf,执行函数:tf.foo()
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 2021-11-07
    • 2016-05-22
    • 2021-03-28
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多