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

Ser*_*ier 54 amazon-ec2 amazon-web-services ec2-ami

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

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

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

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

Amazon AWS/EC2有哪些选项?

Eri*_*ond 85

答案取决于您正在运行的AMI,因为提供的功能完全取决于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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • SO的一个好处是,当你开始寻找一些指针时,那个名字开始出现在你所有谷歌查询中的人亲自回答了你的问题.太棒了:-) (21认同)
  • SO的最佳报价:"我最喜欢的,因为我发明了它" (10认同)