AWS Lambda发布后脚本?

时间:2017-03-08 08:20:17

标签: c# amazon-web-services aws-lambda

我们尝试通过AWS Lambda上的函数使用ffmpeg。我们在包含列表中包含 ffmpeg ffprobe ,以便文件在发布时可用,但我们必须将它们移动到 / tmp 目录,以便我们可以使它们可执行。

目前我们有代码将它们复制到此文件夹,然后运行 chmod -R + x / tmp / ffmpeg 以使文件夹中的文件可执行。从那以后它很好,但是在第一次执行该函数时必须执行此操作似乎有点过分。

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

let debouncedInput$ = this.form.control['clientId'].valueChanges.debounceTime(1000);

我看到亚马逊建议人们在他们上传的.zip文件中设置权限,以便可执行文件具有执行权限,而不会被复制到可写文件夹和chmod'd,但我们有两个问题:

  1. 我们正在使用亚马逊的Visual Studio工具发布。
  2. 只有一种专有格式的zip(Info-Zip)似乎支持zip文件的权限,而且他们软件的最后一个稳定版本是8年前。
  3. 有没有什么办法可以运行某种发布后脚本来复制和设置ffmpeg库的权限?

    更新:似乎MacOS可以生成一个带有两个可执行文件权限的zip文件,然后由Lambda授予。我仍然不确定如何从Windows实现这一目标。

1 个答案:

答案 0 :(得分:2)

与Visual Studio中所需的“发布到AWS Lambda”选项相比,这还有很长的路要走,但它可以完成工作。

由于某些未知原因,亚马逊要求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”主机操作系统。

我希望这有助于某人。