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

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

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

  • 实例化一个给定的AMI的N个事件。
  • 对于每个启动的实例,它将上传一个自定义的脚本,并让脚本运行到实例中。

使用VMWare,我通常会使用vmrun或Vix SDK来做到这一点。

Amazon AWS / EC2中有哪些选项?

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

Amazon Linux AMIS和官方Ubuntu AMI安装了cloud-init软件包。 这有很多方法可以触发启动操作,但最符合您的请求的方式(以及我最喜欢的,因为我发明了它)是用户数据脚本的概念。

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

有关如何工作的具体示例,我在最近的文章中使用了这种精确的技术: 在EC2用户数据脚本中上传已知的ssh主机密钥

您还希望使用相同的脚本运行多个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,或者

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

  • 编写一个更复杂的包装脚本,logging所有实例标识,等待所有实例转移到运行状态,等待sshd接受连接,将启动脚本上传到每个实例,并在每个实例上运行启动脚本。

我有一个教程,在 AWS EC2启动时运行的“cloud-init”中运行脚本 。

  • 设置configuration文件(AWS CentOS6)和

  • 在启动EC2时运行脚本

要在Linux上设置configuration文件,您可以参考在AWS Linux上configurationcloud-init 。

我个人使用基于Linux AMI设置的AWS VPC / EBS ,我没有碰到configuration文件/etc/cloud/cloud.cfg任何内容,但是我的引导脚本在cloud-init中运行良好。