Amazon SQS,Boto和Python:在Amazon EC2上获取和运行脚本

时间:2013-10-18 17:32:34

标签: python amazon-s3 amazon-ec2 boto

我正在尝试在Amazon EC2上运行一组python脚本。此help guide建议使用Amazon SQS管理队列。从本指南中,我了解了如何启动EC2实例并从我的计算机将作业发送到队列,但我不明白如何设置EC2实例,以便在从中获取后运行python脚本队列然后将结果保存到Amazon S3。如何获取,在EC2服务器上运行,并将结果保存到python脚本的S3?

2 个答案:

答案 0 :(得分:5)

在上述指南中,您可以找到包含示例代码的github repository链接。这是一个有效的例子,回答你的问题。它有很好的文档记录,易于阅读。

即,仔细查看pdf/tasks.py源代码。简而言之,它使用ec2.run_instances使用引导程序bash脚本启动ec2实例:

  • 使用apt-get
  • 更新实例 循环中的
  • 使用boto.connect_sqs连接到SQS并获取任务
  • 执行任务
  • 使用boto.connect_s3()连接到S3并上传结果
  • 脚本完成时关闭实例。

<强>更新

此外,CheckResponseQueueTask是使用来自Celery.PeriodicTask的{​​{1}}来处理消息并将其处理的好消息。查看SQS,源代码行51-57,以获取说明上传到S3的结果的示例代码。并且BOOTSTRAP_SCRIPT说明了在任务数量超过实例数的情况下,使用队列处理器进行新实例启动和引导。第214-244行供参考。

答案 1 :(得分:2)

这样做的一种方法是在您的EC2实例上运行Celery,该实例能够将AWS SQS用作开箱即用的任务代理。

有关使用Celery和AWS SQS的信息,请访问: http://docs.celeryproject.org/en/latest/getting-started/brokers/sqs.html

Celery还支持并发和多个工作者。这意味着您可以让多个运行Celery的EC2实例监听一个AWS SQS队列,并且任务将自动在您的实例中自行分发。