根據我的理解,CloudFormation模板可以從遠程檢索文件並運行它(例如:bash shell),例如:下載bash腳本以安裝Graphite/OpenTSDB RRD工具。AWS CloudFormation bash部署腳本vs模板命令
我的問題是:使用CloudFormation模板命令執行安裝步驟的步驟與使用CloudFormation模板檢索bash腳本來運行安裝有什麼最佳做法?
感謝
根據我的理解,CloudFormation模板可以從遠程檢索文件並運行它(例如:bash shell),例如:下載bash腳本以安裝Graphite/OpenTSDB RRD工具。AWS CloudFormation bash部署腳本vs模板命令
我的問題是:使用CloudFormation模板命令執行安裝步驟的步驟與使用CloudFormation模板檢索bash腳本來運行安裝有什麼最佳做法?
感謝
沒有「最好」的方式做到這一點,只有很多不同的權衡不同的選擇。
將腳本放入CF模板很快就變得很麻煩,因爲您必須引用數據。
鏈接到shell腳本可能會變得很複雜,因爲您必須詳細指定所有內容,並且步驟可能變得很脆弱。
過了一段時間,你會想要使用木偶或廚師。這些讓你聲明你想要什麼「應該安裝Apache 2.1」,配置文件應該看起來像這樣..「而不是指定它應該如何執行。這可以使複雜的事情組織起來。 (但有一個學習曲線,看看OpsWorks。)
之後,你會想要將你的圖像捆綁到一個AMI(如果你的構建需要一段時間,並且依賴於互聯網上的其他服務器直到安裝!)
謝謝@BraveNewCurrency,我聽說過Puppet和Chef,但不知道他們是什麼真正用於你解釋它之前。我也會研究這些選項。 –
btw,@BraveNewCurrency,我將不得不挑選一個木偶或廚師,任何建議? –
我建議你使用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"}]]}},
...
我想如果我將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 –
這個問題令人困惑,因爲目前的措辭。你能否提供你正在比較的案例的例子? –