我是否需要通过 SSH 连接到 EC2 实例才能启动带有参数的自定义脚本,或者有一些我不知道的服务



我需要创建一个执行以下操作的应用程序:

  1. 通过消息系统接受请求(完成)
  2. 处理请求并确定作业所需的脚本和实例类型(完成)
  3. 启动EC2实例
  4. 上传自定义脚本(可能来自github,也可能是S3 bucket)
  5. 使用给定的参数启动脚本

问题是执行步骤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来完成大部分

  1. 启动实例
  2. 添加一个公共IP(如果不在VPC中)
  3. 等待实例重新联机
  4. 使用knifebootstrap提供脚本,设置厨师客户端,更新系统
  5. 然后使用厨师食谱来设置你的机器