将EC2与自动缩放组一起用于AWS上的批处理图像处理应用程序

时间:2014-01-07 20:32:20

标签: python amazon-web-services amazon-ec2 batch-processing boto

我是AWS的新手,我正在尝试将基于python的图像处理应用程序移植到云端。我们的应用场景类似于此处描述的批处理场景 [media.amazonwebservices.com/architecturecenter/AWS_ac_ra_batch_03.pdf]

具体涉及的步骤是:

  1. 接收大量图像(> 1000)和一个包含图像元数据的CSV文件
  2. 解析CSV文件并创建数据库(使用dynamoDB)。
  3. 将图片推送到云端(使用S3),然后推送表单(bucketname, keyname)的消息 到输入队列(使用SQS)。
  4. "流行#34;来自输入队列的消息
  5. 从S3获取适当的图像数据,从dynamoDB获取元数据。
  6. 进行处理
  7. 在dynamoDB中更新该图像的相应条目
  8. 将结果保存到S3
  9. 在输出队列(SQS)中保存一条消息,该消息将提供给下一部分 管道。
  10. 步骤4-9将涉及使用EC2实例。

    从在线boto文档和教程中,我了解了如何将S3,SQS和dynamoDB合并到管道中。但是,我不清楚如何进行EC2包含。我尝试在线查看一些示例实现,但无法弄清楚EC2机器应该如何使我们的批处理图像处理应用程序工作

    1. 使用具有无限循环的BOOTSTRAP_SCRIPT不断轮询 输入队列广告处理消息(如果可用)。这就是我 认为正在AWS博客上的 Django-PDF 示例中完成 http://aws.amazon.com/articles/Python/3998
    2. 使用boto.services来处理所有阅读细节 消息,在S3中检索和存储文件,编写消息等。 这是在怪物渣滓混搭的例子中使用的 http://aws.amazon.com/articles/Python/691
    3. 上述哪种方法适用于批处理应用程序,还是有更好的方法?此外,对于上述每一项,我如何结合使用自动缩放组来根据输入队列中的负载管理EC2机器。 在这方面的任何帮助将非常感谢。谢谢。

1 个答案:

答案 0 :(得分:1)

您应该编写一个应用程序(例如使用Python和Boto)来执行SQS轮询并与S#和DynamoDB交互。

此应用程序必须在引导时安装在EC2实例上。有几个选项可用(CloudFormation,Chef,CloudInit和用户数据或自定义AMI),但我建议您从这里描述的用户数据开始http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

您还必须确保您的实例具有与S3,SQS和DynamodDB通信的适当权限。您必须为此创建IAM权限。然后将权限附加到角色,并将角色附加到您的实例。详细程序可在http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

的文档中找到