我是 AWS 的新手,正在尝试将基于 Python 的图像处理应用程序移植到云端。我们的应用场景类似于这里描述的 Batch Processing 场景 [media.amazonwebservices.com/architecturecenter/AWS_ac_ra_batch_03.pdf]
具体涉及的步骤是:
- 接收大量图像(>1000 张)和一个包含图像元数据的 CSV 文件
- 解析 CSV 文件并创建数据库(使用 dynamoDB)。
- 将图像推送到云端(使用 S3),并推送格式为
(bucketname, keyname)
的消息 到输入队列(使用 SQS)。 - 从输入队列“弹出”消息
- 从 S3 获取适当的图像数据,从 dynamoDB 获取元数据。
- 做处理
- 在 dynamoDB 中更新该图像的相应条目
- 将结果保存到 S3
- 在输出队列 (SQS) 中保存一条消息,该消息提供给下一部分 管道。
第 4-9 步将涉及使用 EC2 实例。
从网上的boto文档和教程,我了解了如何将S3、SQS和dynamoDB整合到管道中。但是,我不清楚如何进行 EC2 包含。我尝试查看一些在线示例实现,但无法弄清楚 EC2 机器应该做什么才能使我们的批量图像处理应用程序正常工作
- 使用带有不断轮询的无限循环的
BOOTSTRAP_SCRIPT
输入队列广告处理消息(如果可用)。这就是我 思考正在 AWS 博客上的 Django-PDF 示例中完成 http://aws.amazon.com/articles/Python/3998 - 使用
boto.services
处理阅读的所有细节 消息、在 S3 中检索和存储文件、编写消息等。 这是 monster muck mash-up 示例中使用的内容 http://aws.amazon.com/articles/Python/691
以上哪种方法更适合批处理应用,或者有更好的方法吗?此外,对于上述每一项,我如何结合使用自动缩放组来根据输入队列中的负载管理 EC2 机器。 在这方面的任何帮助将不胜感激。谢谢。
最佳答案
您应该编写一个应用程序(例如使用 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
关于python - 将 EC2 与自动缩放组一起用于 AWS 上的批量图像处理应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981303/