容器(python)中的AWS Lambda在本地工作但未部署

MGu*_*ler 6 python amazon-web-services docker aws-lambda

我尝试包装一个部署到 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": []
}
Run Code Online (Sandbox Code Playgroud)

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   
Run Code Online (Sandbox Code Playgroud)

在本地运行容器的命令:

 docker run -e AWS_SECRET_ACCESS_KEY=XXX -e AWS_ACCESS_KEY_ID=YYY -p 9000:8080 palmid-lambda:latest
Run Code Online (Sandbox Code Playgroud)

本地运行的输出:

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

Run Code Online (Sandbox Code Playgroud)

本地调用 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"}'
Run Code Online (Sandbox Code Playgroud)

基础镜像构建: https: //github.com/ababaian/palmid

使用以下 Python 代码构建:https://github.com/ababaian/palmid-lambda

MGu*_*ler 1

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