2016-08-21 199 views
2

試圖獲取aws asg的一些信息。AWS AutoScaling - 實例生命週期

這是我的場景;

  • 推出使用默認ubuntu ami
  • 規定使用ansible
  • 部署代碼的實例(安裝所有需要的軟件包和配置)在asg的情況下使用python
launch configasg

快樂的日子,每一件事都是安裝好的。

問題是,如果我應該更改我的asg的度量標準,以便所有實例都被終止,然後將其更改回原始度量標準,則新實例將變爲空白!沒有包,沒有代碼!

1 - 這是預期的行爲嗎?

2 - 另外,如果asg有2個實例,並擴展到5將它添加3種空白的情況下,或採取與代碼和包裝物的運行實例1副本,並旋轉了3分新的?

如果1是,我該如何解決這個問題?我需要使用預先烘焙的圖像嗎?但即使如此,也不會有最新的代碼。

基本上在非高峯時段,我希望能夠'零'出我的asg,因此沒有實例正在運行,然後在高峯時間再次備份。每天必須重新配置和部署代碼是沒有意義的。

任何幫助/建議表示讚賞。

回答

2

您的方法出現的問題是您正在將代碼部署到啓動實例。因此,當您將ASG度量標準實例關閉並再次出現時,它們將從AMI啓動,以使它們錯過代碼和配置。永遠記住,在自動擴展中,新啓動的實例將使用ASG正在使用的AMI和已啓動的實例啓動。

爲了避免這種情況,你可以使用,這將運行配置腳本的用戶數據和提取數據,從您的回購該實例上的每個實例的實例時,充分利用AMI推出,使空實例沒有得到推出。

閱讀用戶此開發人員指南數據

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

2
  1. 是的,這是預期的行爲
  2. 這將增加3種空白的情況下(如果blank你的意思是from my base image

通常的選擇有:

  1. 每當有一個新的代碼版本(它可以很容易地自動化作爲構建/部署過程中的一個步驟)時烘焙新的圖像,但是隻有當它不太經常時,他纔有意義。

  2. 配置您的實例以在啓動時提取最新的軟件版本。有幾個選項都涉及user-data scripts。您可以直接從SCM獲取最新版本,或者例如將最新軟件包作爲構建過程的一部分放置到S3存儲桶中,並在啓動時配置實例以將其從S3中啓動並自行部署,或者任何您認爲合適的部件。

+0

因此,如果我預先烘烤了一個ami,然後在我的asg中用啓動配置使用ami,我已經解決了我的第一個問題,那就是packages和config。現在,如果我將代碼部署到新實例中,讓我們假設3並且我的服務已啓動並正在運行..當asg擴展到5時,這兩個新實例是否具有其他3個代碼? –

+0

否。當您將代碼部署到活動實例時,同時烘焙新的ami。 –

+0

如果您認爲爲每個軟件版本構建新的AMI需要太多開銷,則可以使用選項2。 –