gpt4 book ai didi

c# - AWS Lambda 发布后脚本?

转载 作者:行者123 更新时间:2023-11-30 23:15:21 26 4
gpt4 key购买 nike

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

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

我们查看了 package.json 文件的“scripts”选项,并尝试了以下(除其他外),但似乎没有什么不同。

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

我看到亚马逊建议人们在他们上传的 .zip 文件中设置权限,这样可执行文件就拥有执行权限,而无需复制到可写文件夹和 chmod,但我们有两个问题:

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

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


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

最佳答案

这距离 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”主机操作系统。

我希望这对某人有帮助。

关于c# - AWS Lambda 发布后脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com