AWS Lambda Docker Image



我正在尝试使用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}

和它工作

最新更新