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

时间:2017-09-06 13:26:34

标签: python aws-lambda

从S3上传python zip包到AWS Lambda时,我收到以下隐藏错误:

module initialization error: [Errno 13] Permission denied: '/var/task/lambda_function.py'

错误似乎是如果您创建具有限制权限的zip包,那么AWS会感到困惑。从本质上讲,AWS会使用您提供的权限解压缩您的程序包并尝试使用它。让您特别困惑的是,您可以从AWS Lambda内联代码编辑器中看到部分zip文件(因此您显然拥有一些权限),但Lambda函数会出现上述错误。

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

4 个答案:

答案 0 :(得分:4)

我使用的方法是在python中创建我的zip包时要小心。

而不是做像

这样的事情
ziph = zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED)
ziph.writestr(file_name, my_data)

我用

替换了上面的最后一行
zinfo = zipfile.ZipInfo(file_name)
zinfo.external_attr = 0o777 << 16  # give full access to included file
ziph.writestr(zinfo, my_data)

确保明确授予完整权限。如果您不这样做,那么writestr将使用限制性太强的默认权限。 (注意:上面是python 3.6)。

答案 1 :(得分:1)

我使用Python2.7serverless代码部署到AWS上,并遇到了类似的问题,该问题在CloudWatch中记录为:

Unable to import module handler: No module named handler

我在线搜索了解决方案,并得到了信息,当serverless将代码部署到AWS时(迄今为止),它可能会以与文件系统上相同的权限来部署文件。

在这种情况下,由于我的Python文件handler.py是只读的,因此Lambda将无法执行该文件。因此,我解决问题的方法是在部署前设置644权限。在命令行中,运行:

chmod 644 handler.py

希望有帮助。顺便说一下,我正在使用macOS Mojave。

答案 2 :(得分:0)

我在通过Azure Devops部署Lambda时遇到了类似的问题。
以下python任务对其进行了修复:

- task: PythonScript@0
        displayName: zip inspector.py
        inputs:
          scriptSource: inline
            script: |
              from zipfile import ZipFile
              with ZipFile('inspector.zip', 'w') as zf:
                zf.write('inspector.py')

答案 3 :(得分:0)

在您的 lambda_function.py 所在的目录中,运行以下命令:

chmod 644 $(find . -type f)
chmod 755 $(find . -type d)

以上命令使当前目录中的所有文件和文件夹都可以被任何用户读取。