我需要创建一个执行以下操作的应用程序:
- 通过消息系统接受请求(完成)
- 处理请求并确定作业所需的脚本和实例类型(完成)
- 启动EC2实例
- 上传自定义脚本(可能来自github,也可能是S3 bucket)
- 使用给定的参数启动脚本
问题是执行步骤3、4、5最有效的方法是什么?不要误解我的意思,现在我正在用做所有的脚本做同样的事情
- 启动实例
- 使用userdata下载必要的依赖项
- 比SSH进入实例并启动脚本
我的问题是:这是处理这类工作的唯一选择吗?或者可能有一种简单的方法可以做到这一点?我在看OpsWork,我不确定这是否对我来说是正确的。我知道我可以用它完成第3步和第4步,但其余的呢?:
- 使用给定的参数启动脚本
- 触发OpsWork以在收到请求时启动实例
顺便说一下,我使用Python、boto与AWS服务进行通信。
由于您已经在使用AWS,这听起来像是亚马逊简单工作流服务的完美用例(http://aws.amazon.com/swf/)
来自服务描述:
AmazonSWF取代了自定义编码工作流解决方案的复杂性以及具有完全管理的web服务的过程自动化软件。这消除了开发人员管理基础设施的需要过程自动化的管道,使他们能够将精力集中在其应用程序的独特功能。
它允许您定义任务工作流,并让工作人员处理工作流中的任务。
boto
对SWF具有"level1"支持(低级别api):http://boto.readthedocs.org/en/2.6.0/ref/swf.html
您可以使用刀引导。这可能是一种方法。你可以使用AWS SDK来完成大部分
- 启动实例
- 添加一个公共IP(如果不在VPC中)
- 等待实例重新联机
- 使用knifebootstrap提供脚本,设置厨师客户端,更新系统
- 然后使用厨师食谱来设置你的机器