【问题标题】:Accessing Lambda Layer within Python subprocess在 Python 子进程中访问 Lambda 层
【发布时间】:2021-09-19 02:56:44
【问题描述】:

我在从 python 子进程中访问位于 lambda 层中的自定义 python 模块时遇到问题。因此,我的用例是:

我有一个大型自定义模块,在 lambda 层中定义了许多依赖项(我将其称为 myCustomModule.py)。我允许将任意代码作为 lambda 函数上传到名为 function.py 的文件中。该脚本在 app.py 的子进程中被调用,其中包含 Lambda 调用的处理程序。

myCustomModule.py

def printFoo():
   print("foo")

函数.py

import myCustomModule

myCustomModule.printFoo()

app.py

import subprocess

def handler(event, context):
    functionFilePath = "function.py"
    return subprocess.check_output("python3 " + functionFilePath, shell=True)
    

当我执行 lambda 函数时,它返回一个 ModuleNotFoundError 说 function.py 找不到 myCustomModule。但是,如果我在 app.py 中导入 myCustomModule 并从那里调用printFoo(),它就可以正常工作。但是,这破坏了我的用例,因为我需要能够从 function.py 而不是 app.py 调用 myCustomModule。

如何让 python 子进程识别我的 lambda 层中的模块?

【问题讨论】:

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


    【解决方案1】:

    我发现了问题所在。我需要做两件事:

    首先我需要将位置从我的 lambda 层添加到我的模块到我的 PYTHONPATH 环境变量:

    接下来,我需要增加函数的内存和超时大小,因为我的模块非常大:

    您可以在 Lambda 控制台、使用 AWS CLI 或使用 AWS 开发工具包(我使用的是 Java 开发工具包)中执行此操作。

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多