gpt4 book ai didi

python - AWS SAM 本地和 docker-lambda : keep getting Unable to import module 'lambda_function' : No module named 'lambda_function'

转载 作者:太空狗 更新时间:2023-10-30 02:53:50 25 4
gpt4 key购买 nike

编辑 2:根本原因是我设置了多个 DOCKER 环境变量,这导致我的函数调用重新路由到远程 Docker 主机,而不是命中 SAM Local。一旦我取消这些设置,功能就开始运行。

编辑:我克隆了 docker-lambda 并尝试运行他们的示例之一并得到相同的错误。

docker run --rm -v "$PWD":/var/task lambci/lambda:python3.6
START RequestId: 73a433fc-1d8a-4cdb-a66d-61bd667e13ba Version: $LATEST
Unable to import module 'lambda_function': No module named 'lambda_function'
END RequestId: 73a433fc-1d8a-4cdb-a66d-61bd667e13ba
REPORT RequestId: 73a433fc-1d8a-4cdb-a66d-61bd667e13ba Duration: 1 ms Billed Duration: 100 ms Memory Size: 1536 MB Max Memory Used: 15 MB

{"errorMessage": "Unable to import module 'lambda_function'"}

我正在尝试使用 Python lambda 函数设置 SAM Local,但一直对标题中的模块导入错误感到沮丧。

我的 template.yaml 看起来像这样:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
ProposalsTable:
Type: "AWS::Serverless::SimpleTable"
AddProposal:
Type: "AWS::Serverless::Function"
Properties:
Handler: lambda_function.lambda_handler
Runtime: python3.6
Policies: AmazonDynamoDBFullAccess
Environment:
Variables:
TABLE_NAME: !Ref ProposalsTable
Events:
Vote:
Type: Api
Properties:
Path: /proposals
Method: get

我在与 template.yaml 相同的文件夹中有一个 lambda_function.py。

我运行:sam local start-api 它启动正常:

Mounting lambda_function.lambda_handler (python3.6) at http://127.0.0.1:3000/proposals [GET]

然后我做:

curl http://127.0.0.1:3000/proposals

然后在“服务器”上显示:

Unable to import module 'lambda_function': No module named 'lambda_function'
Function returned an invalid response (must include one of: body, headers or statusCode in the response object): %!s(<nil>)

我已经尝试了所有不同的文件命名方式(例如,将其放在带有 init.py 的文件夹中)

我在谷歌上搜索并阅读了十几个或更多线程,但大多数人都在谈论部署到真正的 AWS Lambda; SAM Local 上的内容不多。

我想知道它是否在我的环境中。此处的 node.js 示例函数因超时而失败。 https://github.com/awslabs/aws-sam-local/tree/develop/samples/hello-world/node

2018/01/04 15:20:41 Invoking index.handler (nodejs6.10)
2018/01/04 15:20:41 Mounting /Users/me/code/sam-local-prototype as /var/task:ro inside runtime container
2018/01/04 15:20:46 Function index.handler timed out after 3 seconds

想法?

最佳答案

关于 Unable to import module 'lambda_function': No module named 'lambda_function' 错误:

在您在 template.yaml 中提供的 repo 链接中,Handler 键显示为:Handler: index.handler。这对应于包含名为 handler 的函数的 index.js 文件,编写为 exports.handler = () => {}

如果您在 Python 中重写它,您的 template.yaml 处理程序 key 将需要读取 Handler: {file_name}.{function_name}。如果携带 lambda 函数的文件名为 lambda.py 并且其中的函数是 def lambda_handler 您需要将处理程序 key 写入 .yaml 作为 Handler:lambda.lambda_function。我记得必须修改 Resources 下的 key 但请确保您的文件名和函数名准确无误,然后重试。

我只是将代码从存储库中复制出来并成功运行。你是否正确安装了docker?或者当您尝试从存储库运行测试代码时,是否启动了 sam local api?如果它试图连接到同一个端口,您也可能会超时。

2018/01/16 13:39:14 Successfully parsed template.yaml
2018/01/16 13:39:14 Connected to Docker 1.35
2018/01/16 13:39:14 Runtime image missing, will pull....
2018/01/16 13:39:14 Fetching lambci/lambda:nodejs6.10 image for nodejs6.10 runtime...
nodejs6.10: Pulling from lambci/lambda
f338a32fa56c: Already exists
4926b20b634f: Already exists
8040e979acbc: Pull complete
160b6838355f: Pull complete
Digest: sha256:e34f92bc0df0cf4a8ba560c6c7bf201183d5f6773ddf44440a97295486906744
Status: Downloaded newer image for lambci/lambda:nodejs6.10
2018/01/16 13:39:28 Invoking index.handler (nodejs6.10)
2018/01/16 13:39:28 Mounting /Users/me/sam_local_test as /var/task:ro inside runtime container
START RequestId: 8970d865-2d59-1d54-0825-d56f1fd035f7 Version: $LATEST
2018-01-16T20:39:32.315Z 8970d865-2d59-1d54-0825-d56f1fd035f7 LOG: Name is Bob
END RequestId: 8970d865-2d59-1d54-0825-d56f1fd035f7
REPORT RequestId: 8970d865-2d59-1d54-0825-d56f1fd035f7 Duration: 22.02 ms Billed Duration: 0 ms Memory Size: 0 MB Max Memory Used: 28 MB

"Hello Bob"

关于python - AWS SAM 本地和 docker-lambda : keep getting Unable to import module 'lambda_function' : No module named 'lambda_function' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48104577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com