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

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

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

具体涉及的步骤是:

  1. 接收大量图像(>1000 张)和一个包含图像元数据的 CSV 文件
  2. 解析 CSV 文件并创建数据库(使用 dynamoDB)。
  3. 将图像推送到云端(使用 S3),并推送格式为 (bucketname, keyname) 的消息 到输入队列(使用 SQS)。
  4. 从输入队列“弹出”消息
  5. 从 S3 获取适当的图像数据,从 dynamoDB 获取元数据。
  6. 做处理
  7. 在 dynamoDB 中更新该图像的相应条目
  8. 将结果保存到 S3
  9. 在输出队列 (SQS) 中保存一条消息,该消息提供给下一部分 管道。

第 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 中检索和存储文件、编写消息等。 这是 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/

相关文章:

python - 如何通过 Python 中的子类实例访问基类变量?

amazon-web-services - 如何解决这个问题? AWS updateAutoScalingGroup - 错误 : AccessDenied: You are not authorized to use launch template

MySQL性能不佳

ubuntu - EC2 用户数据以获取 S3 对象

amazon-web-services - AWS CodeDeploy 与 GitLab 的集成

python - 如何使用 Beautiful Soup 从网站检索信息?

python - 查找连续的未屏蔽值

python - 监控 API 的变化 - Pythonic 方式?

amazon-web-services - 服务发现 ECS AWS

java - 如何创建仅在 6 天后过期的 s3 下载链接