如何触发EC2实例并在每个实例上传/运行启动脚本?

时间:2012-04-12 14:10:47

标签: amazon-web-services amazon-ec2 ec2-ami

我想自动启动一组Linux EC2实例。

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

  • 实例化我的给定AMI的N次出现。
  • 对于每个已启动的实例,它将上载自定义脚本并让脚本运行到实例中。

使用VMWare,我通常会使用 vmrun 或Vix SDK。

亚马逊AWS / EC2有哪些选项?

2 个答案:

答案 0 :(得分:82)

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

Amazon 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

如果您当前正在运行未安装cloud-init的AMI,您可以执行以下操作之一:

  • 切换到安装了cloud-init的AMI,或

  • 构建安装了cloud-init的AMI的自定义版本,或

  • 编写一个更复杂的包装器脚本,该脚本在启动后记录所有实例ID,等待所有实例移动到运行状态,等待sshd接受连接,上传您的启动脚本到每个实例,并在每个实例上运行启动脚本。

答案 1 :(得分:1)

每次AWS EC2启动时,我都会运行a tutorial to run the script in the "cloud-init"

  
      
  • 设置配置文件(AWS CentOS6)和

  •   
  • 启动EC2时运行脚本

  •   

要在Linux上设置配置文件,您可以参考configure cloud-init on AWS Linux

我个人使用基于Linux AMI设置的AWS VPC/EBS,我没有触及配置文件/etc/cloud/cloud.cfg上的任何内容,但我的boot script in the cloud-init运行良好。