2012-04-12 96 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