python - AWS Lambda 压缩文件命令

标签 python amazon-web-services lambda zip

我在使用上传的 Python 脚本的 .zip 文件运行 lambda 函数时遇到问题,该文件总是生成 “无法导入模块 '...':没有名为 ... 的模块"(我已确保我的 lambda 处理程序与我的 Python 文件名匹配),并且通过在线研究,我发现在这种情况下文件的压缩方式非常严格。

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

错误的命令:

$ ls 
   lambda_sample
$ zip -r lambda_sample lambda_sample

正确的命令:

$ cd lambda_sample
$ zip -r ../lambda_sample .

事实上,第二条命令对我有用。

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

最佳答案

AWS Lambda 期望您的处理程序位于 zip 文件的基础/根目录中,并且您显示的 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.

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

package/lambda.py
package/process/
package/process/__init__.py
# and so on

现在,你的第二个命令的例子,我首先 cd package:

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

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

lambda.py
process/
process/__init__.py
# etc.

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

关于python - AWS Lambda 压缩文件命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553081/

相关文章:

C# 进程的实时标准输出/错误捕获

python - 有没有办法检查实时流量 scapy 中的数据包?

amazon-web-services - 在 EMR 中持久化、挂载和共享卷

c++ - 在多线程应用程序中使用智能指针

c++ - 来自 boost.lambda 或 boost.phoenix 的静态函数

python - 将 None 替换为 Null,到位

python - 使用 mycli 时出错

amazon-web-services - Cognito 注销不像记录的那样工作

amazon-web-services - 如何在 EC2 容器中运行 Docker 镜像?

python - python 中的嵌套 if-else lambda 返回函数对象而不是值(传递变量?)