python - 容器中的 AWS Lambda (python) 在本地工作但未部署
问题描述
我尝试包装部署到 docker 容器的基于 R 的应用程序。我将基础映像更改为 lambda/python3.9,并添加了另一个具有自己 Dockerfile 的应用程序。这包含一个简单的 python 脚本作为函数的处理程序。在这个处理程序中,我调用代码来运行 R 脚本并将结果上传到 S3。现在,当我在本地进行测试时,一切正常。但是当我将图像推送到 ECR 并将容器部署为 Lambda 函数时,我收到以下错误:
{
"errorMessage": "Unable to import module 'app': No module named 'app'",
"errorType": "Runtime.ImportModuleError",
"requestId": "1a7fa818-62e4-4374-8318-625b15e2ae8a",
"stackTrace": []
}
AWS 调用的更多日志:
2021-09-25T17:11:32.570+02:00 START RequestId: 1a7fa818-62e4-4374-8318-625b15e2ae8a Version: $LATEST
2021-09-25T17:11:32.571+02:00 [ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'app' Traceback (most recent call last):
2021-09-25T17:11:32.574+02:00 END RequestId: 1a7fa818-62e4-4374-8318-625b15e2ae8a
2021-09-25T17:11:32.574+02:00 REPORT RequestId: 1a7fa818-62e4-4374-8318-625b15e2ae8a Duration: 1.40 ms Billed Duration: 2395 ms Memory Size: 3200 MB Max Memory Used: 48 MB Init Duration: 2393.47 ms
在本地运行容器的命令:
docker run -e AWS_SECRET_ACCESS_KEY=XXX -e AWS_ACCESS_KEY_ID=YYY -p 9000:8080 palmid-lambda:latest
本地运行的输出:
EY=XXXX -e AWS_ACCESS_KEY_ID=YYYY -p 9000:8080 palmid-lambda:latest
time="2021-09-25T14:29:42.318" level=info msg="exec '/var/runtime/bootstrap' (cwd=/home/palmid, handler=)"
time="2021-09-25T14:29:47.899" level=info msg="extensionsDisabledByLayer(/opt/disable-extensions-jwigqn8j) -> stat /opt/disable-extensions-jwigqn8j: no such file or directory"
time="2021-09-25T14:29:47.899" level=warning msg="Cannot list external agents" error="open /opt/extensions: no such file or directory"
START RequestId: 1b867a67-e778-4418-9139-ff1123331b34 Version: $LATEST
... application logs
本地调用 Lambda 函数的命令:
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{ "sequence": ">SRR9968562_waxsystermes_virus_microassembly\nPIWDRVLEPLMRASPGIGRYMLTDVSPVGLLRVFKEKVDTTPHMPPEGMEDFKKASKEVE\nKTLPTTLRELSWDEVKEMIRNDAAVGDPRWKTALEAKESEEFWREVQAEDLNHRNGVCLR\nGVFHTMAKREKKEKNKWGQKTSRMIAYYDLIERACEMRTLGALNADHWAGEENTPEGVSG\nIPQHLYGEKALNRLKMNRMTGETTEGQVFQGDIAGWDTRVSEYELQNEQRICEERAESED\nHRRKIRTIYECYRSPIIRVQDADGNLMWLHGRGQRMSGTIVTYAMNTITNAIIQQAVSKD\nLGNTYGRENRLISGDDCLVLYDTQHPEETLVAAFAKYGKVLKFEPGEPTWSKNIENTWFC\nSHTYSRVKVGNDIRIMLDRSEIEILGKARIVLGGYKTGEVEQAMAKGYANYLLLTFPQRR\nNVRLAANMVRAIVPRGLLPMGRAKDPWWREQPWMSTNNMIQAFNQIWEGWPPISSMKDIK\nYVGRAREQMLDST", "hash": "132xx"}'
基础镜像构建:https ://github.com/ababaian/palmid
使用以下 Python 代码构建:https ://github.com/ababaian/palmid-lambda
解决方案
我无法让我的容器运行。但我决定采用这种方法,我使用 amazonlinux:2 作为基础映像,然后添加 python 东西,现在它可以工作了。似乎 R 的东西有一些干扰亚马逊库的依赖项。通过使用这种方法,我遇到了关于我所依赖的库的另一个问题,我将其修复如下:https ://github.com/aws/aws-lambda-python-runtime-interface-client/issues/24
推荐阅读
- python - 如何将图形级 matplotlib 图例移动到 seaborn displot 的轴
- django - django-simple-history 仅在满足特定条件时保存历史记录
- json - 将 RequestBody 传递给我的 RestAPI 时出错
- javascript - 使用 react-native-localize 本地化轮播/列表项
- html - 如何分两列打印页面?
- sql - 如何根据列中的条件递归更新PostgreSQL中的表
- python - 将变量动态替换为python中的参数
- visual-studio-code - VSCode 中的 GPU 加速有多大用处?
- assembly - x86 裸机组件 - 如果值小于 x 且大于 y
- opengl - 如何在 GLSL 中翻译剪切平面?