【问题标题】:Error code 2 when trying to install pip in AWS Lambda尝试在 AWS Lambda 中安装 pip 时出现错误代码 2
【发布时间】:2016-01-21 17:26:22
【问题描述】:

我正在尝试使用 AWS Lambda 函数来启动其他 Lambda 函数,其中一些函数需要非标准的 python 库。我认为一个好的解决方案是让第一个 Lambda 函数安装 pip,然后使用它来安装模块,然后启动辅助 Lambda 函数。我从 s3 存储桶下载了基本的 get-pip.py,然后尝试安装它。

print(subprocess.check_output(['python', '/tmp/lambdaTools/get-pip.py']))

运行大约 30 秒,让我相信它开始正常执行,然后给出错误:

START RequestId: 5a6b8511-c05f-11e5-9e41-c1b36be05f9c Version: $LATEST
Command '['python', '/tmp/lambdaTools/get-pip.py']' returned non-zero exit status 2: CalledProcessError
Traceback (most recent call last):
  File "/var/task/lambdaTools.py", line 34, in lambdaTools_handler
    return operations[operation](event)
  File "/var/task/lambdaTools.py", line 27, in <lambda>
    'create': lambda x: create_function(x.get('function_name'), x.get('bucket_path') ),
  File "/var/task/lambdaTools.py", line 62, in create_function
    print(subprocess.check_output(['python',local_path+get_pip]))
  File "/usr/lib64/python2.7/subprocess.py", line 573, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
CalledProcessError: Command '['python', '/tmp/lambdaTools/get-pip.py']' returned non-zero exit status 2

除了错误代码 2 失败之外,它似乎没有给我任何其他信息。

【问题讨论】:

  • 我还没有真正看过 get-pip.py,但我怀疑它可能试图将一些东西安装到 Lambda 函数不可写的系统库中。
  • 这就是我的怀疑,有什么解决方法的想法吗?
  • 你为什么要安装pip? AWS Lambda Python 版本是 2.7,带有 pip。
  • 真的吗?当我尝试从 subprocess.check_output 调用 pip 时,它给出 OSError 2 'No such file or directory'
  • 你应该在推送你的 lambda 代码之前捆绑你的依赖。 pip install -r requirements.txt -t path/to/your/lambda_code 会这样做。当然,如果您的任何依赖项在其中编译了代码,事情就会变得有点复杂。

标签: python amazon-web-services subprocess pip aws-lambda


【解决方案1】:

一些函数需要非标准的python库。

您指的是哪些非标准库?如果您想使用 AWS Lambda python 环境未默认提供的库,那么推荐的方法是将这些库与您的 lambda 函数打包在一起。见:Deploying Lambda with other python packages

然后启动辅助 Lambda 函数。

即使您调用其他 lambda,也不能保证新的 lambda 将在与当前容器/实例/机器相同的容器/实例/机器中被调用。看到这个AWS Lambda - container reuse

【讨论】:

    【解决方案2】:

    一旦 Lambda 函数达到其 50MB 的最大大小,它将崩溃并退出,而不会提供任何有用的信息。我强烈建议您在上传之前安装任何依赖项并将它们打包到您的 zip 中,并考虑使用 S3 进行存储。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2020-05-06
      • 1970-01-01
      相关资源
      最近更新 更多