从S3上传AWS Lambda python zip后权限被拒绝

oxe*_*xer 3 python aws-lambda

从S3将python zip软件包上传到AWS Lambda时,出现以下神秘错误:

module initialization error: [Errno 13] Permission denied: '/var/task/lambda_function.py'
Run Code Online (Sandbox Code Playgroud)

错误似乎是,如果您创建具有限制性权限的zip软件包,则AWS会感到困惑。本质上,AWS使用您赋予它的权限将您的程序包解压缩并尝试使用它。这可能特别令人困惑的是,您可以从AWS Lambda内联代码编辑器中看到部分zip文件(因此您显然拥有一定的权限),但是Lambda函数将给出上述错误。

解决此问题的最佳方法是什么(更好的错误消息或解决问题)?

oxe*_*xer 6

我使用的方法是谨慎使用python创建zip包的方式。

而不是做类似的事情

ziph = zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED)
ziph.writestr(file_name, my_data)
Run Code Online (Sandbox Code Playgroud)

我将上面的最后一行替换为

zinfo = zipfile.ZipInfo(file_name)
zinfo.external_attr = 0o777 << 16  # give full access to included file
ziph.writestr(zinfo, my_data)
Run Code Online (Sandbox Code Playgroud)

为了确保明确授予完全权限。如果您不这样做,writestr则将使用限制性太强的默认权限。(注意:以上内容适用于python 3.6)。