AWS Lambda发布后脚本?

问题描述:

我们正在尝试通过AWS Lambda上的函数使用ffmpeg。我们包括ffmpeg的ffprobe我们包括列表,以便发布时可使用这些文件,但我们必须将它们移动到某处的/ tmp目录里面,使我们可以让他们的可执行文件。AWS Lambda发布后脚本?

目前我们有代码将它们复制到此文件夹,然后运行chmod -R + x/tmp/ffmpeg以使文件夹中的文件可执行。从那里开始就没有问题,但在第一次执行该功能时,似乎有点过分。

我们查看了package.json文件的“scripts”选项,并尝试了以下内容(除其他外),但似乎没有任何区别。

"scripts": { 
    "postpublish": [ 
     "mkdir /tmp/ffmpeg", 
    ] 
} 

我看到,亚马逊已经表明,人在.zip文件设置权限,他们上传,以便可执行文件都没有对被复制到可写文件夹,并chmod'd执行权限,但我们有两个问题这个:

  1. 我们使用亚马逊的Visual Studio工具发布。
  2. 只有一种专有格式的zip(Info-Zip)似乎支持zip文件的权限,而且他们软件的最后一个稳定版本是8年前的版本。

有没有什么办法可以运行某种发布后脚本来复制和设置ffmpeg库的权限?


更新:看来,MacOS的可以产生两个可执行文件,然后由LAMBDA荣幸的权限的zip文件。我仍然不确定我们如何从Windows实现这一目标。

+0

不弹性转码器可以解决您的问题吗? https://aws.amazon.com/elastictranscoder/ –

+0

@ÇağatayGürtürk如果您想从特定时间戳中提取缩略图,请不要使用它。我们实际上使用ZenCoder进行视频转码,但是我们使用ffmpeg来生成预览以响应用户更改。弹性代码转换器仅支持间隔。不管怎么说,还是要谢谢你。 – john

+0

不知道为什么你认为“在第一次执行该功能时似乎有点过分”。在第一次执行Lambda函数之前,Lambda函数不会部署到容器中,所以在初始执行时执行此步骤似乎完全合理。它也可能会根据您的使用模式部署到其他容器,此时,新容器中的第一次执行将需要再次执行此文件复制任务。 –

这是距离想要在Visual Studio中右键单击“发布到AWS Lambda”选项的很长一段路,但它完成了工作。

由于某些未知原因,Amazon要求ZIP文件包含Unix样式的文件权限。作为Windows用户,我就像是“ZIP文件?有权限吗?”?因为Windows ZIP文件没有真正执行权限。

经过一番搜索,我找到了一个能够在ZIP文件中设置权限的Python脚本。真棒。所以我试了一下。它没有工作。事实证明,作为文件元数据的一部分,ZIP文件存储创建文件的“主机操作系统”。 7zip有用地告诉我我的文件是“FAT”。

所以,这里是我的解决方案(其中可以清楚地得到改善,可能自动):

import zipfile 
import os 

srcFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\prepublish.zip' 
tmpFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\publish.zip' 

with zipfile.ZipFile(srcFileName, 'r') as sz: 
    with zipfile.ZipFile(tmpFileName, 'w', zipfile.ZIP_DEFLATED) as z: 
     for name in sz.namelist(): 
      srcFile = sz.open(name, "r") 
      print(name) 
      zi = zipfile.ZipInfo(name) 
      zi.create_system = 3 
      zi.external_attr = (0o764 << 16) 
      z.writestr(zi, sz.read(name)) 
     z.close() 
     sz.close() 

它需要包含我的代码现有的zip文件(prepublish.zip),并重新拉链作为publish.zip,但拥有764个文件权限和一个“Unix”主机操作系统。

我希望这可以帮助别人。