【问题标题】:How do I transfer files from s3 to my ec2 instance whenever I add a new file to s3?每当我向 s3 添加新文件时,如何将文件从 s3 传输到我的 ec2 实例?
【发布时间】:2021-05-19 23:19:00
【问题描述】:

我的 ec2 实例中有一个 py 脚本。这需要一个视频文件作为输入,该文件位于 S3 存储桶中。每次将新文件添加到该存储桶时,如何自动化 ec2 实例开始运行的过程?我希望 ec2 实例识别这个新文件,然后将其添加到 py 脚本可以使用它并处理它并创建输出文件的本地目录。然后我想将此输出文件发送回存储桶并将其存储在那里。 我知道 boto3 库用于将 s3 连接到 ec2 ,但是我不清楚如何自动触发它并查找新文件,而无需手动启动我的实例并复制所有内容

编辑: 我有一个 python 程序,它基本上获取一个视频文件(mp4),然后将其分解为帧并缝合它以创建一堆小的全景图像并将其存储在一个名为“输出”的文件夹中。现在,由于程序需要视频作为输入,在程序中我引用了一个特定的目录,它应该从中选择 mp4 文件并将其作为输入读取。所以我现在想要的是,将有一个 s3 存储桶来接收来自其他地方的视频文件。它将位于特定存储桶内的文件夹中。我希望将进入该存储桶的任何新 mp4 文件复制或发送到我的实例中的输入目录。另外,当发生这种情况时,我希望存储在该实例中的我的 python 程序自动执行,并在输入目录中找到这个新的视频文件来处理它并制作小全景图,然后将其存储在输出目录中,或者更好的是,发送它到同一个 s3 存储桶中的输出文件夹。

【问题讨论】:

  • 多久上传一次文件?您的 Amazon EC2 实例是否一直在运行?如果两个文件在几秒钟内上传,你想做什么? EC2 实例上的进程是否需要很长时间?它可以同时处理多个文件吗?您更关心响应时间还是保持低成本? EC2 实例上的代码实际上在做什么,它是否可能通过 AWS Lambda 函数来完成?请编辑您的问题以添加更多详细信息,以便我们推荐合适的架构。
  • @JohnRotenstein 我在编辑中添加了更多信息。请通过它。谢谢。
  • 您还没有提供我上述问题的答案,因此提供特定架构并不容易。 Marcin 的回答是一个很好的通用解决方案。

标签: python amazon-web-services amazon-s3 amazon-ec2


【解决方案1】:

您可以通过多种方式为此设计解决方案。它们会根据您获取视频的频率、可扩展性、容错性、您想要并行处理的视频数量等等而有所不同。我只提供一个,假设偶尔会上传新视频,并且不需要自动缩放组来同时处理大量视频。

根据上述假设,一种方式可能如下:

  1. 上传新视频会触发使用 S3 event notifications 的 lambda 函数。
  2. Lambda 从 S3 事件中获取视频详细信息(例如 s3 路径),将视频详细信息提交到 SQS 队列启动您的实例
  3. 实例上的应用程序一旦启动,就会拉入 SQS 队列以获取要处理的视频文件的详细信息。这将要求您的应用程序设计为启动实例启动,这可以使用modified user data、systemd 单元文件等来完成。

这是一个非常基本的解决方案,正如我所提到的,许多其他方法都是可能的,包括自动缩放组、基于 sqs 大小的缩放策略、ssm 运行命令等等。

【讨论】:

  • 嗨,我已经编辑了我的问题并添加了有关要求的信息。考虑到这一点,您会建议更好的方法还是您所说的足够好?
  • @akshayacharya 我认为我写的是一个好的开始。因此,您可以做的就是尝试我写的内容,如果您发现它毕竟不适合或卡在某个点上,您可以使用新的细节提出新的问题。另外,如果您觉得我的回答有帮助,我们将不胜感激。
  • 我现在在我的 lambda 函数中接收文件名。如何将这些详细信息提交到 SQS 队列?以及如何控制该队列中的实例?
  • @akshayacharya 请提出新问题,并附上相关细节、代码示例和错误消息。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-10-24
  • 2022-01-07
  • 2012-11-08
  • 1970-01-01
  • 2011-11-10
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多