更新AWS Lambda文件的权限以使其可执行 概述: 我有一些C++代码( MyStudio),我想从lambda函数中执行。我已经在AmazonLinuxEC2实例上构建了代码,它在那里运行没有问题。 当我尝试从Lambda中的Python脚本运行它时,我收到以下错误消息:
命令'LD_LIBRARY_PATH=/var/task/lib/var/task/myProgram-d'返回非零退出状态126.:CalledProcessError 从中可以看出,126表示该命令已找到,但不可执行。在我上传到Lambda之前它是可执行的,所以我不确定如何解决这个问题 编辑:感谢下面的评论,我仔细检查了Lambda实例的权限。事实上,文件上传后并没有标记为可执行文件。当我尝试用更新AWS Lambda文件的权限以使其可执行 概述: 我有一些C++代码( MyStudio),我想从lambda函数中执行。我已经在AmazonLinuxEC2实例上构建了代码,它在那里运行没有问题。 当我尝试从Lambda中的Python脚本运行它时,我收到以下错误消息:,python,amazon-web-services,aws-lambda,Python,Amazon Web Services,Aws Lambda,命令'LD_LIBRARY_PATH=/var/task/lib/var/task/myProgram-d'返回非零退出状态126.:CalledProcessError 从中可以看出,126表示该命令已找到,但不可执行。在我上传到Lambda之前它是可执行的,所以我不确定如何解决这个问题 编辑:感谢下面的评论,我仔细检查了Lambda实例的权限。事实上,文件上传后并没有标记为可执行文件。当我尝试用chmod更改它时,我得到一个错误只读文件系统 细节: 当我将其打包并上传到lambda函数时,目
chmod
更改它时,我得到一个错误只读文件系统
细节:
当我将其打包并上传到lambda函数时,目录结构如下所示:
- handler.py
- 我的计划
- 解放党
- (所需图书馆)
handler.py的代码
import os
import subprocess
exepath = os.path.join(os.getcwd(), 'myProgram')
libdir = os.path.join(os.getcwd(), 'lib')
def handler(event, context):
command = 'LD_LIBRARY_PATH={}; {} -d'.format(libdir, exepath)
return subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
如果我将shell=True
更改为shell=False
,则会收到不同的错误
[Errno 2]没有这样的文件或目录:“LD_LIBRARY_PATH=/var/task/lib/var/task/myProgram-d':FileNotFoundError
问题:
如何使myProgram
可执行?由于雅克的提示和问题的答案,我在中没有提到这个过程
我必须将myProgram
复制到/tmp
,然后chmod
才能执行它
command = 'cp ./myProgram /tmp/myProgram; chmod 755 /tmp/myProgram; LD_LIBRARY_PATH={}; /tmp/myProgram -d '.format(libdir)
return subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
777
许可证(rwxrwxrwx
)是您“本地”确认的还是在Lambda服务器上确认的?如果不在Lambda上,您能否说服Lambda转储myProgram
的权限?您可以转储可执行文件的用户和组以及尝试执行它的进程吗?(理论:(a)“上传到Lambda”权限混乱,无法执行。(b)在Lambda系统上运行全局可写可执行文件或在组/用户之外执行有一定的安全性)你是对的。我在本地检查了这些权限,并假设它们会被保留,但事实并非如此。在lambda实例上,它们是rw-rw-r--
。现在。。。如何改变这一点?