2013-10-18 39 views
0

根據我的理解,CloudFormation模板可以從遠程檢索文件並運行它(例如:bash shell),例如:下載bash腳本以安裝Graphite/OpenTSDB RRD工具。AWS CloudFormation bash部署腳本vs模板命令

我的問題是:使用CloudFormation模板命令執行安裝步驟的步驟與使用CloudFormation模板檢索bash腳本來運行安裝有什麼最佳做法?

感謝

+0

這個問題令人困惑,因爲目前的措辭。你能否提供你正在比較的案例的例子? –

回答

2

沒有「最好」的方式做到這一點,只有很多不同的權衡不同的選擇。

將腳本放入CF模板很快就變得很麻煩,因爲您必須引用數據。

鏈接到shell腳本可能會變得很複雜,因爲您必須詳細指定所有內容,並且步驟可能變得很脆弱。

過了一段時間,你會想要使用木偶或廚師。這些讓你聲明你想要什麼「應該安裝Apache 2.1」,配置文件應該看起來像這樣..「而不是指定它應該如何執行。這可以使複雜的事情組織起來。 (但有一個學習曲線,看看OpsWorks。)

之後,你會想要將你的圖像捆綁到一個AMI(如果你的構建需要一段時間,並且依賴於互聯網上的其他服務器直到安裝!)

+1

謝謝@BraveNewCurrency,我聽說過Puppet和Chef,但不知道他們是什麼真正用於你解釋它之前。我也會研究這些選項。 –

+0

btw,@BraveNewCurrency,我將不得不挑選一個木偶或廚師,任何建議? –

1

我建議你使用user-data,作爲參數到您的模板。無論是本地保存還是遠程保存,最好將引導邏輯(shell腳本)中的基礎架構詳細信息(即模板)分開。用戶數據可以是一個shell腳本,當你的實例啓動時它將被調用。 這裏是提供用戶數據作爲參數的例子:

"Parameters":{ 
    "KeyName":{ 
     "Description":"N/A", 
     "Type":"String" 
    }, 
    "initScript":{ 
     "Description":"The shell script to be executed on boot", 
     "Type":"String" 
    }, 
}, 
"Resources":{ 
    "workersGroup1":{ 
    "GlobalWorker":{ 
     "Type":"AWS::EC2::Instance", 
     "Properties":{ 
      "InstanceType":"t1.micro", 
      "ImageId":"ami-XXXX", 
      "UserData":{"Fn::Base64":{"Fn::Join":["", [{"Ref":"initScript"}]]}}, 
... 
+0

我想如果我將initScript分離出來保存在遠程文件中並讓模板檢索腳本,那麼我就可以在任何地方重複使用腳本。例如:有些人希望安裝Graphite,但他們沒有AWS CloudFormation。我編寫了CloudFormation模板來遠程加載安裝腳本,這裏是模板腳本:https://github.com/gdbtek/cloudformation-templates/blob/master/graphite_statsd.json,https://github.com/gdbtek/setup- graphite/blob/master/ubuntu.bash和https://github.com/gdbtek/setup-statsd/blob/master/ubuntu.bash –