4

使用AWS時,通過AWS CodeDeploy將應用程序部署到新創建的實例似乎是一種不錯的方式。這種工作方式如下:使用CodeDeploy和CI工具部署分佈式應用程序的好方法是什麼?

  1. 設置自動縮放組應用
  2. 寫上從S3拉CodeDeploy劑自動縮放組中的用戶數據bash腳本,安裝並啓動它
  3. 設置其部署到自動縮放團的CodeDeploy部署組現在

,當一個應用程序包(例如罐或Debian軟件包)被部署到部署組,它將被自動部署到新在自動縮放組中啓動的實例。

我的問題是:這種部署策略如何適合像特拉維斯CI這樣的CI工具?

具體做法是:

  • CodeDeploy如何可以拿起通過像特拉維斯CI使用CI工具建立了一個包?構建作業是否需要將包上傳到S3?
  • 如何使用CodeDeploy逐步部署應用程序(例如,一次只能創建一個實例)?
  • 此部署策略是否要求關閉並替換每個正在運行的實例,還是部署在現有實例上的應用程序的新版本?如果是前者,機器IP地址在部署期間將會改變,那麼其他服務如何發現新部署的應用程序(即沒有硬編碼IP地址)?

回答

4

TL;博士版本:

  • 構建作業需要包上傳到S3。
  • 一次使用一個部署配置。
  • 應用程序的新版本部署在現有實例上。

好吧,這裏的長版本:

我建議你試試Deployment Walkthrough或文檔中採取的外觀在Concepts。它應該可以幫助您更快地熟悉CodeDeploy。

如果您不想使用CodeDeploy,則不必使用AutoScaling組。使用AutoScaling集成的CodeDeploy允許您管理需要動態更改大小的船隊,而不是部署到它們的代碼,但這不是使用CodeDeploy的必要條件。您也可以手動啓動一些EC2實例,安裝主機代理,然後將其標記到部署組中 - 但它們不會像AutoScaling實例那樣在啓動時自動部署。無論哪種情況,您都可以創建機羣範圍的部署。

您必須做一些工作才能將其與CI工具集成。 CodeDeploy不會直接管理您的構建工件,因此您的構建過程需要這樣做。有自動部署,您將需要:

  1. appspec.yml創建歸檔包,你需要處理的安裝/升級,您的構建文物任何腳本。
  2. 將軟件包上傳到S3。
  3. 在CodeDeploy中創建部署。

您可能想看看CodePipeline作爲與CodeDeploy集成的持續交付系統的示例。

CodeDeploy使用部署配置來控制它部署到您的車隊中的實例的積極性。 (因爲每個實例都是分開處理的,所以此配置在自動部署中被忽略。)CodeDeploy會使部署失敗,如果在不違反部署配置中的約束條件的情況下不能部署另一個實例,則停止部署到新實例。

有三個built in部署配置,您可以通過CLI或API創建自己的,如果您需要不同的配置。要一次僅部署一個實例,可以使用CodeDeployDefault.OneAtATime部署配置,該配置在任何給定時間最多允許一個不健康的主機。

+0

感謝您的詳細解答 - 過去一週我一直在嘗試CodeDeploy,它似乎是一個不錯的工具。我有一個關於部署新版API的問題。假設我們有一個跨5個EC2實例進行負載均衡的API,並且我們從不想處於實例運行不同版本的API的不一致狀態。在這種情況下,我們可能需要部署5個新實例,並在完成後切換ELB。應該如何使用CodeDeploy來做到這一點?你會爲每個版本創建5個新的實例和一個新的部署組嗎? – Josh

+1

你描述的將會起作用。正如一般的最佳實踐所做的那樣,您應該始終假定您有時會以混合模式運行,並且您的部署應該設計爲與以前版本一起工作。這確實會使架構遷移變得更加痛苦(兩次部署而不是三次),但是您會變得更安全。 –

相關問題