Amazon web services 使用SQS在AWS S3上批处理图像

Amazon web services 使用SQS在AWS S3上批处理图像,amazon-web-services,amazon-s3,amazon-ec2,batch-processing,amazon-sqs,Amazon Web Services,Amazon S3,Amazon Ec2,Batch Processing,Amazon Sqs,我正在为我的web应用程序使用AWS EC2,该应用程序对图像进行水印处理,将它们调整为5种不同的大小,并将它们与原始图像一起上载到AWS S3 现在我想再次处理原始图像以添加新的水印并制作新的尺寸。我在S3上有一百万张图像,我不知道如何处理它们。我研究过谷歌,读过很多博客。只有我发现我可以使用SQS来实现这一点,但我不知道它将如何工作以及如何配置它 我希望这件事能在更短的时间内完成。 我应该如何进一步进行?SQS可用于为您安排工作,但只有在您计划旋转多个实例以进行实际转换时,SQS才有帮助。S

我正在为我的web应用程序使用AWS EC2,该应用程序对图像进行水印处理,将它们调整为5种不同的大小,并将它们与原始图像一起上载到AWS S3

现在我想再次处理原始图像以添加新的水印并制作新的尺寸。我在S3上有一百万张图像,我不知道如何处理它们。我研究过谷歌,读过很多博客。只有我发现我可以使用SQS来实现这一点,但我不知道它将如何工作以及如何配置它

我希望这件事能在更短的时间内完成。
我应该如何进一步进行?

SQS可用于为您安排工作,但只有在您计划旋转多个实例以进行实际转换时,SQS才有帮助。SQS与实际的图像转换无关——只与任务的打包无关

如果你只打算使用一个EC2实例(尽你所能让它变大、变快),并且让它尽可能快地处理一百万个文件——因为这是一次性的工作,如果它能足够快地完成,这将是你最容易的选择

如果您打算使用一组EC2实例来完成这项工作,那么在每台机器上安装您的定制软件(进行转换),添加一个新的(可能是定制的)软件,该软件将轮询sqs队列,请求“要做的工作”,然后一旦实例启动并运行,将需要处理的每个图像的详细信息加载到SQS队列中;每个文件一条消息

您的机队将轮询队列,获取一条(或多条)要处理的消息(该消息应包含S3文件位置等内容),然后让它处理映像并重新上载到S3。完成映像后,ec2实例将从队列中删除该消息,并请求处理另一条消息

在这种情况下,SQS为您所做的是提供一个待处理消息的“队列”,让许许多多的消费者1)要求完成工作,2)在工作完成时告诉SQS删除消息,3)尽最大努力确保同一消息不会发送到多台机器(这种情况很少发生)。使用SQS是让一组机器在同一队列上工作的有效方法,而不用担心如何在它们之间分配工作


但是,正如我所说的,在您的情况下,由于这是一次性转换工作,队列的使用可能是有保证的,也可能不是有保证的——您可以让一台机器完成所有工作,如果您认为它可以足够快地运行,或者将工作拆分为手动完成(例如,机器“A”获取在month1创建的所有文件,机器“B”获取在month2创建的所有文件,等等-您必须在机器之间分割工作的任何方法都可以工作;SQS只是一种方法。

您已经尝试了什么,哪些不起作用?SQS可以在保存新图像时触发事件,这将处理所有fu真实图像。但你仍然需要以某种方式处理现有图像。嗨,迈克,我已经处理了新图像,但我担心s3存储桶上已经有100万个图像。我想亲自重新处理它们。我建议使用Thumbor,它将为你处理所有这些,并根据需要调整图像大小。如果你想预处理所有的图像现有的图像,E.J.布伦南的答案是要走的路。