【问题标题】:How do i connect s3 bucket video files to ec2 instance and run python script on ec2 automatically whenever i get new video files on s3?每当我在 s3 上获得新视频文件时,如何将 s3 存储桶视频文件连接到 ec2 实例并在 ec2 上自动运行 python 脚本?
【发布时间】:2022-01-17 05:49:06
【问题描述】:
我的 s3 存储桶上有一个文件夹,其中包含一些 100 个视频 (mp4) 文件。每次 s3 存储桶摄取这 100 个视频时,它应该自动在 EC2 上运行一个 Python 脚本,该脚本将处理这 100 个视频文件并生成一组新的已处理视频。这些视频我需要用一个名为 generate_video 的新文件夹再次存储在 s3 中。
首先可以向我建议如何在这方面采取正确的程序。
【问题讨论】:
标签:
amazon-web-services
amazon-s3
amazon-ec2
aws-lambda
amazon-sqs
【解决方案1】:
典型的方法是让 EC2 实例轮询 Amazon SQS 消息,而不是触发 Amazon EC2 实例上的脚本:
- 在 Amazon S3 存储桶上配置一个触发器,以在存储桶中创建新对象时向 Amazon SQS 队列发送消息
- 在 Amazon EC2 实例 上运行代码,该代码将持续:
- 在 Amazon SQS 队列上调用
ReceiveMessage()
- 如果返回消息,则处理消息中引用的对象
- 继续循环
调用ReceiveMessage() 时,使用ReceiveMessageWaitTimeSeconds = 20 告诉SQS 等待最多20 秒,直到收到消息。这减少了它需要调用 SQS 的次数。
这种架构的可扩展性非常好。如果在将新文件上传到 S3 时 EC2 实例上的脚本处于“忙碌”状态,则该消息将简单地位于 SQS 队列中,直到实例准备就绪。同样,如果 EC2 实例出现问题,消息会排队等待修复,而不是错过处理 S3 对象。
根据处理步骤的复杂性,您或许还可以在 AWS Lambda 函数中处理对象。操作方式相同,只是 S3 可以直接触发 Lambda 函数,而不需要 SQS 队列。