Waq*_*hah 10 python python-3.x aws-lambda aws-sam-cli aws-sam
我在我的无服务器应用程序(避免混乱的最简单应用程序)中有一个类似于以下的目录结构,我使用 AWS SAM 和 Python 3.8 作为运行时创建了它:
??? common
? ??? a.py
??? hello_world
? ??? __init__.py
? ??? app.py
? ??? requirements.txt
??? template.yaml
Run Code Online (Sandbox Code Playgroud)
我想common/a.py在 Lambda 处理程序中导入模块 - hello_world/app.py。现在我知道我可以通过将路径添加到or来在 Python 中正常导入它,但是当代码在 Docker 容器内的 Lambda 中运行时它不起作用。调用时,Lambda 处理函数在目录内运行,不考虑文件夹结构。PYTHONPATHsys.path/var/task
我尝试插入/var/task/common, /var/common,/var甚至像这样/common以sys.path编程方式插入:
import sys
sys.path.insert(0, '/var/task/common')
from common.a import Alpha
Run Code Online (Sandbox Code Playgroud)
但我仍然收到错误:
ModuleNotFoundError: No module named 'common'
我知道Lambda 层,但鉴于我的场景,我想直接引用多个 Lambda 函数中的公共代码,而无需上传到层。我想serverless-python-requirements在无服务器框架中但在 AWS SAM 中拥有类似插件的东西。
所以我的问题是,我应该如何将此路径添加common到PYTHONPATH或sys.path?或者是否有其他解决方法,例如[serverless-python-requirements][3]在不使用 Lambda 层的情况下直接在父文件夹中导入模块?
我没有找到我想要的东西,但我最终得到了一个解决方案,在根目录中创建一个 Lambda 函数,该函数处理函数内的所有不同的 API 调用。是的,我的 Lambda 函数与 API Gateway 集成,我可以分别使用event["httpMethod"]和获取 API 方法和 API 路径event ["httpPath"]。然后我可以将所有包放在根目录下并在彼此之间导入它们。
例如,假设我有 2 个 API 路径/items,/employees需要处理它们,并且它们都需要处理 GET 和 POST 方法,以下代码就足够了:
if event["path"] == '/items':\n if event["httpMethod"] == 'GET':\n ...\n elif event["httpMethod"] == 'POST':\n ...\nelif event["path"] == '/employees':\n if event["httpMethod"] == 'GET':\n ...\n if event["httpMethod"] == 'POST':\n ...\nRun Code Online (Sandbox Code Playgroud)\n所以现在我可以在这个 Lambda 函数下拥有尽可能多的包。例如,以下是存储库现在的样子:
\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 application\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 *.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 persistence\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 *.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 *.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 rootLambdaFunction.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 requirements.txt\nRun Code Online (Sandbox Code Playgroud)\n这样,我可以在给定结构中随意导入包。
\n| 归档时间: |
|
| 查看次数: |
6397 次 |
| 最近记录: |