AWS Lambda zip文件命令

cod*_*sea 0 python lambda zip amazon-web-services

我遇到了运行lambda函数的问题,上传.zip的Python脚本文件总是产生"Unable to import module '...': No module named ..."(我确保我的lambda处理程序与我的Python文件名相匹配),通过在线研究,我发现文件压缩的​​方式非常严格在这种情况下.

该解决方案提供以下命令示例

错误的命令:

$ ls 
   lambda_sample
$ zip -r lambda_sample lambda_sample
Run Code Online (Sandbox Code Playgroud)

正确的命令:

$ cd lambda_sample
$ zip -r ../lambda_sample .
Run Code Online (Sandbox Code Playgroud)

事实上,第二个命令对我有用.

所以我想知道为什么第一个命令不起作用?此外,我正在使用macOS,并通过右键单击文件夹并Compress [folder_name]生成一个[folder_name].zipLambda无法读取的文件,因此产生我在开头提到的相同错误.谁能提供任何见解?

wkl*_*wkl 7

AWS Lambda期望您的处理程序位于zip文件的base/root中,并且zip您显示的命令会生成不同的文件布局.

我将用我自己的系统中的一些例子来演示.

这是您的第一个命令的示例:

> ls
package
> zip -r package package
 adding: package/ (stored 0%)
 adding: package/lambda.py (deflated 38%)
 adding: package/process/ (stored 0%)
 adding: package/process/__init__.py (stored 0%)
 adding: package/process/aws.py (deflated 56%)
 # ... etc.
Run Code Online (Sandbox Code Playgroud)

如果我unzip package.zip,生成的解压缩文件的文件夹结构如下所示:

package/lambda.py
package/process/
package/process/__init__.py
# and so on
Run Code Online (Sandbox Code Playgroud)

现在,我的第二个命令的例子,我在cd package第一个:

> zip -r ../package .
adding: lambda.py (deflated 38%)
adding: process/ (stored 0%)
# ... etc.
Run Code Online (Sandbox Code Playgroud)

因此,如果我unzip package.zip看起来像这样生成的解压缩文件:

lambda.py
process/
process/__init__.py
# etc.
Run Code Online (Sandbox Code Playgroud)

因此,在第二种情况下,在展开ZIP后您没有父目录,并且AWS Lambda将正常工作.