amazonsqs、Boto和Python:在amazonec2上获取并运行脚本

amazonsqs、Boto和Python:在amazonec2上获取并运行脚本,python,amazon-s3,amazon-ec2,boto,Python,Amazon S3,Amazon Ec2,Boto,我试图在AmazonEC2上运行一组python脚本。这建议使用AmazonSQS来管理队列。从本指南中,我了解了如何启动EC2实例并从我的计算机向队列发送作业,但我不了解如何设置EC2实例,使其在从队列中获取python脚本后运行python脚本,然后将结果保存到Amazon S3。如何获取、在EC2服务器上运行并将结果保存到python脚本的S3?在上述指南中,您可以找到指向示例代码的链接。这是一个工作示例,回答您的问题。它有很好的文档记录,易于阅读 也就是说,仔细看看源代码。简而言之,它使

我试图在AmazonEC2上运行一组python脚本。这建议使用AmazonSQS来管理队列。从本指南中,我了解了如何启动EC2实例并从我的计算机向队列发送作业,但我不了解如何设置EC2实例,使其在从队列中获取python脚本后运行python脚本,然后将结果保存到Amazon S3。如何获取、在EC2服务器上运行并将结果保存到python脚本的S3?

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

也就是说,仔细看看源代码。简而言之,它使用
ec2.run_instances
启动ec2实例,并使用一个引导bash脚本,该脚本:

  • 使用apt get更新实例
  • 在循环中使用
    boto.connect_sqs
    连接到sqs并获取任务
  • 执行任务
  • 使用
    boto.connect\u s3()
    连接到s3并上传结果
  • 脚本完成时关闭实例
更新


此外,
CheckResponseQueueTask
是一个很好的例子,它使用
芹菜.PeriodicTask
SQS
对消息进行排队并对其进行处理。查看
BOOTSTRAP\u脚本
,源代码行51-57,获取示例代码,说明上传到S3的结果。和
CheckQueueLevelsTask
说明了在任务量超过实例数的情况下,新实例引导和使用队列处理器引导。第214-244行供参考。

实现这一点的一种方法是在EC2实例上运行,该实例能够使用AWS SQS作为现成的任务代理

有关使用芹菜和AWS SQS的信息,请参见:


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

芹菜似乎会有很大的帮助。然而,文档被分解成程序的每个小部分,我很难把它们拼凑在一起。您能否提供或向我指出带注释的示例代码,该代码从AmazonSQS获取,使用SQS/S3的输入运行函数,然后将输出保存到S3。理想情况下,该代码还将引导EC2实例。实际上,
CheckResponseQueueTask
是定期消息排队和处理的示例代码。更新了我的答案。你的更新非常有帮助。我相信我现在理解了这个脚本是如何链接到启动实例、从队列中检索任务并保存到S3的,但是新启动的实例在这两者之间执行的任务在哪里呢?是否是第160-173行,简单地将文件传输到特定的S3存储桶?如果我想在保存到S3之前添加要执行的额外任务,比如从队列中获取x并将f(x)的结果保存到S3,我将如何/在何处将其添加到代码中?您可能希望将代码从链接复制到您的答案中,并添加注释,以便在链接消失时您的答案不会消失。再次感谢您的帮助。在新实例上执行的所有代码都是用
BOOTSTRAP\u脚本
编写的。这是
bash
script!Magic(数据处理)在第99-104行的
subprocess.Popen中发生。请注意,此脚本在循环(75)中使用
python-c
语法(21)运行,当连续10次延迟10秒未获取数据时,脚本结束(81),系统关闭(125)。制动器中的参考线编号。git上有18个叉子,还有一个地雷;)这里有很多代码,我不认为把所有代码都复制到这里是合适的。脚本运行时使用了一条神奇的代码行242
user\u data=startup
,arument to
boto.ec2.run\u instances
。事实上,我并不知道这个功能,我发现它很有用:)