【发布时间】: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