【问题标题】:AWS Lambda zip file commandAWS Lambda 压缩文件命令
【发布时间】:2017-10-03 20:41:45
【问题描述】:

我在使用上传的.zip Python 脚本文件运行 lambda 函数时遇到问题,该文件总是产生"Unable to import module '...': No module named ..."(我已确保我的 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 文件,因此会产生我在开头提到的相同错误。谁能提供任何见解?

【问题讨论】:

    标签: python amazon-web-services lambda zip


    【解决方案1】:

    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.
    

    所以第二种情况,你解压后没有父目录,AWS Lambda就可以正常工作了。

    【讨论】:

      【解决方案2】:

      我每次都会这样做:

      1. 创建一个虚拟环境来安装依赖:

         python3 -m venv nameOfYourVenvFolder
        
      2. 进入文件夹并激活虚拟环境:

         cd nameOfYourVenvFolder
         source bin/activate
        
      3. 安装 Lambda 可以访问的依赖项:

         pip3 install mysql-connector -t .
        
      4. 使依赖项与 Lambda (Linux) 兼容。即删除任何出现的 pycache 或 .dist-info 文件:

         rm *.dist-info
         rmdir __pycache__
        
      5. 压缩文件。您可以在终端中执行此操作,但只需选择所有文件 > 右键单击​​ > 压缩(在 Mac 上;Windows 类似)很容易。

      6. 如果 .zip 文件超过 50mb,则将 .zip 文件上传到 S3,然后再上传到 Lambda。 50mb以下的.zip文件可以直接上传到Lambda。

      如果您需要更具体的帮助,请告诉我,我很乐意为您解答!

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 1970-01-01
        • 2020-09-30
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        相关资源
        最近更新 更多