Python 每当我向s3添加新文件时,如何将文件从s3传输到ec2实例?

Python 每当我向s3添加新文件时,如何将文件从s3传输到ec2实例?,python,amazon-web-services,amazon-s3,amazon-ec2,Python,Amazon Web Services,Amazon S3,Amazon Ec2,我的ec2实例中有一个py脚本。这需要一个S3存储桶中的视频文件作为输入。如何使ec2实例在每次向该存储桶添加新文件时开始运行的过程自动化?我希望ec2实例识别这个新文件,然后将它添加到本地目录中,py脚本可以在那里使用它并处理它,然后创建输出文件。然后我想将这个输出文件发送回bucket并存储在那里。 我知道boto3库是用来连接s3和ec2的,但我不清楚如何自动触发它并查找新文件,而不必手动启动实例并复制所有内容 编辑: 我有一个python程序,它基本上是获取一个视频文件(mp4),然后将

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

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

有许多方法可以设计解决方案。它们将根据您获取视频的频率、视频是否具有可伸缩性、容错性、您希望并行处理多少视频以及更多而有所不同。我只提供一个,假设新视频偶尔上传,并且不需要自动缩放组来同时处理大量视频

根据上述假设,一种方式可以如下所示:

  • 上载新视频会使用触发lambda函数
  • Lambda从s3事件获取视频详细信息(例如s3路径),将视频详细信息提交到SQS队列,然后启动实例
  • 实例上的应用程序启动后,会拉取SQS队列,以获取要处理的视频文件的详细信息。这将要求应用程序的设计方式使其能够启动实例启动,这可以使用、systemd单位文件等来完成

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

    文件上传的频率是多少?您的AmazonEC2实例是否始终在运行?如果两个文件在相隔几秒钟的时间内上载,您想做什么?EC2实例上的过程是否需要很长时间?它能同时处理多个文件吗?您更关心响应时间还是保持低成本?EC2实例上的代码实际上在做什么,是否可以改为通过AWS Lambda函数完成?请编辑您的问题以添加更多详细信息,以便我们可以建议合适的体系结构。@JohnRotenstein我在编辑中添加了更多信息。请检查一下。谢谢。您还没有回答我的上述问题,所以要提供一个特定的体系结构并不容易。Marcin的回答是一个很好的通用解决方案。嗨,我已经编辑了我的问题并添加了关于需求的信息。考虑到这一点,你会建议一个更好的方法还是你说的足够好?@akshayacharya我认为我写的是一个好的开始。所以,你们可以试一下我写的东西,若你们发现它毕竟不适合你们,或者在某个点上卡住了,你们可以用新的细节提出新的问题。另外,如果您觉得我的答案有帮助,我们将不胜感激。我现在在lambda函数中收到文件名。如何向SQS队列提交这些详细信息?我如何从该队列控制指令?@akshayacharya请提出新问题,并提供相关细节、代码示例和错误消息。非常感谢。