Sam local调用lambda并显示本地层错误“无法导入包”

时间:2019-10-08 17:46:09

标签: amazon-web-services aws-lambda aws-serverless aws-sam-cli

使用“ Sam本地调用”在本地调用lambda时(该功能也依赖于本地构建的层),该函数无法找到属于该层的模块。

在使用“ sam local invoke FUNCTIONNAME”在本地调用我的lambda时,出现“无法导入包”错误。这些软件包已经存在于layer(压缩文件夹)中。他们是在本地测试这些lamda的任何方法,这些lamda将python依赖压缩到层中。

START RequestId:083247f2-3011-428c-a529-50eba6d668f2版本:$ LATEST 无法导入模块“ getnext”:没有名为“ apiconfig”的模块 END RequestId:083247f2-3011-428c-a529-50eba6d668f2 REPORT RequestId:083247f2-3011-428c-a529-50eba6d668f2持续时间:12 ms计费持续时间:100 ms内存大小:128 MB使用的最大内存:19 MB

'apiconfig'模块已经存在于layer.zip

期望所有层模块都应在执行“ sam本地调用”时在某个临时位置下载,以便它可以获取所有包并运行lamda,因此我尝试使用--layer-cache-basedir DIRECTORY标志虽然在目录路径下生成了docker文件,但也仍然出现相同的错误。而且,即使我没有提供--skip-pull-image标志,它仍然显示请求跳过拉图像。也添加了--force-image-build标志 error

2 个答案:

答案 0 :(得分:0)

  • 为了支持Lambda层,SAM CLI通过下载所有关联的层并将它们缓存在您的开发计算机上来本地复制AWS层过程。第一次运行sam本地调用或第一次使用sam local start-lambda或sam local start-api
  • 执行Lambda函数时,就会发生这种情况
  • 当您在本地f = open('Desktop\\2002\\1. t x t','r') lines = f. read lines() currentParagraph = False for line in lines: if "[1]" in line and not currentParagraph: print(line) currentParagraph = True continue if currentParagraph: print(line) if line == "": break –layer-cache-basedir aws docs上使用Lambda图层时,SAM CLI中的两个特定标志会很有帮助

答案 1 :(得分:0)

对于Google员工:

  • Requested to skip pull images在这种情况下没关系
  • 确保您的本地层是目录,而不是zip文件
  • 使用lambda函数中的代码,确保模块位于/opt文件夹中
  • 确保您在template.yaml中引用正确的路径

我按顺序进行了上述操作,发现这是一个愚蠢的错误。