我正在尝试使用docker映像运行时部署AWS Lambda函数。
我已经按说明做了。
唯一的区别是我的代码与其他文件和模块一起驻留在src
文件夹中。
所以我把Dockerfile CMD命令改为
CMD [ "src.main.handler" ]
但是AWS环境似乎不喜欢这样。我可以找到很多部署单文件应用程序的例子,但没有一个关于在文件夹中有入口点的应用程序的例子。
以前有人成功过吗?
我应该注意到这个应用程序不是一个api,它的目的是做一些处理并写入s3,所以你可以通过端口在本地调用图像的文档似乎毫无用处。
my dockerfile is
FROM public.ecr.aws/lambda/python:3.8
COPY src ${LAMBDA_TASK_ROOT}
COPY requirements.txt ${LAMBDA_TASK_ROOT}
RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
WORKDIR ${LAMBDA_TASK_ROOT}
CMD [ "src.main.handler" ]
我的文件树如下:
.
├── deploy
│ ├── backtesting
│ │ └── Dockerfile
├── src
│ ├── __init__.py
│ ├── aws
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ └── ssm.cpython-39.pyc
│ │ └── ssm.py
│ ├── db
│ │ ├── __init__.py
│ │ │ └── database_connector.cpython-39.pyc
│ │ └── database_connector.py
│ ├── main.py
│ ├── streams
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── athena_stream.cpython-39.pyc
│ │ │ ├── database_stream.cpython-39.pyc
│ │ │ ├── model_stream.cpython-39.pyc
│ │ │ └── owned_horse_stream.cpython-39.pyc
│ │ ├── athena_stream.py
│ │ ├── database_stream.py
│ │ ├── manual_trigger_stream.py
│ │ └── owned_horse_stream.py
│ ├── utils
│ │ ├── helpers.py
│ │ ├── market_book_filters.py
│ │ └── pricing_helpers.py
这是我在本地测试
时得到的错误{"errorMessage": "Unable to import module 'src.main': No module named 'src'", "errorType": "Runtime.ImportModuleError", "stackTrace": []}```
@thesynde解决了这个问题,因为我实际上是在导入src文件夹中的所有文件,而不是文件夹本身。
通过将复制命令更改为
修复了此问题COPY . ${LAMBDA_TASK_ROOT}
和它工作