2012-04-12 105 views
52

我想自动启动一组Linux EC2实例。如何启动EC2实例并在每个实例上载/运行启动脚本?

基本上,我想编写一个脚本/程序,将:

  • 我的一个给定的AMI实例化的n次出现。
  • 对于每个启动的实例,它都会上传一个自定义脚本并让脚本进入实例。

使用VMware,我通常会做,使用vmrun或波动率指数SDK。

Amazon AWS/EC2中有哪些选项?

回答

80

答案取决于您正在运行的AMI,因为所提供的功能完全取决于AMI。

亚马逊Linux AMIS和官方Ubuntu AMI安装了cloud-init软件包。这有很多方法可以触发启动操作,但最符合您要求的方式(以及我最喜欢的方式,因为我发明了它)是user-data script的概念。

启动EC2实例时,您可以简单地将任何脚本(以两个字符#!开头)作为用户数据传递。它将在实例的第一次启动时以root用户身份运行。

对于如何工作的一个具体的例子,我用这个确切的技术在我最近的一篇文章:Uploading Known ssh Host Key in EC2 user-data Script

你也想用相同的脚本运行一个以上的EC2实例。 ec2-run-instances命令以及相关的API和Web控制台允许您指定任意数量的实例以相同的用户数据开始。例如:

ec2-run-instances   \ 
    --instance-count 10  \ 
    --user-data-file $MYSCRIPT \ 
    --key $USER    \ 
    $SOMEAMI 

如果您正在运行的AMI不具有云计算的初始化安装,你可以做的一个:

  • 切换到一个AMI有云的初始化安装,或

  • 建立自己的AMI的定制版本有云的初始化安装,或

  • 写一个更复杂的包装脚本,使一个RECO所有实例id的rd,等待所有实例转移到运行状态,等待sshd接受连接,将启动脚本上传到每个实例,然后在每个实例上运行启动脚本。

+20

一个与SO的好处之一是,通过你开始寻找一些指点的时候,他的名字开始的家伙出现在所有谷歌查询亲自解答您的问题。真棒:-) – 2012-04-13 06:56:56

+0

我会避免上述答案的选项3。用这种方法我遇到了两个不同的陷阱。 1)一个实例有一个你以前见过的IP地址,而known_hosts条目不匹配。 2)机载和控制所有的实例和启动脚本超载,和东西打破 – Nate 2013-08-30 22:09:07

+9

最佳的SO名言:“我最喜欢的,因为我发明了它” – 2013-09-06 23:33:56