首页 > 解决方案 > 容器中的 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

标签: pythonamazon-web-servicesdockeraws-lambda

解决方案


我无法让我的容器运行。但我决定采用这种方法,我使用 amazonlinux:2 作为基础映像,然后添加 python 东西,现在它可以工作了。似乎 R 的东西有一些干扰亚马逊库的依赖项。通过使用这种方法,我遇到了关于我所依赖的库的另一个问题,我将其修复如下:https ://github.com/aws/aws-lambda-python-runtime-interface-client/issues/24


推荐阅读