我正在尝试使用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之外,它似乎没有给我任何其他信息。
答案 0 :(得分:0)
某些功能需要非标准的python库。
您指的是哪些非标准库?如果您想使用AWS Lambda python环境未提供的库,那么推荐的方法是使用您的lambda函数打包这些库。请参阅:Deploying Lambda with other python packages
然后启动辅助Lambda函数。
即使您调用其他lambdas,也不能保证新lambda将在与当前容器/实例/机器相同的容器/实例/机器中调用。见AWS Lambda - container reuse
答案 1 :(得分:0)
一旦Lambda函数达到50MB的最大大小,它将崩溃并退出而不提供任何有用的信息。我强烈建议您在上传之前安装任何依赖项并将其打包到您的zip中,并考虑使用S3进行存储。