部署方法 - 在 AWS 上實作持續整合與持續交付

部署方法

您可以考慮多種部署策略和變化方式,以在持續交付程序中推出新的軟體版本。本節討論最常見的部署方法:一次全部 (就地部署)、滾動法、不變式,以及藍/綠法。AWS 會指出 AWS CodeDeploy 和 AWS Elastic Beanstalk 支援哪些方法。

下表摘要說明每一種部署方法的特性。

方法 部署失敗的影響 部署時間 零停機時間 無 DNS 變更 回復程序 程式碼部署目標
就地部署 停機時間
重新部署 現有執行個體
滾動式 單一批次停止服務。失敗前成功的批次,會執行新的應用程式版本。
重新部署 現有執行個體
以額外批次進行滾動 (Beanstalk) 若第一個批次即失敗,則影響極小;否則與滾動式程度相近。
重新部署 新執行個體和現有執行個體
不變式 極小
重新部署 新執行個體
流量分割 極小
重新路由流量並終止新的執行個體 新執行個體
藍/綠法 極小
切換回舊環境 新執行個體

一次全部 (就地部署)

一次全部 (就地部署) 是一種可用於將新的應用程式程式碼,部署到現有伺服器機群的方法。此方法會在單一部署動作中替換掉所有程式碼。由於會一次更新機群中的所有伺服器,所以其需要停機時間。其無須更新現有 DNS 記錄。若部署失敗,則還原作業唯一的方法是再次對所有伺服器重新部署程式碼。

在 AWS Elastic Beanstalk 中,此部署稱為一次全部,可供單一和負載平衡的應用程式使用。在 AWS CodeDeploy 中,此部署方法稱為就地部署,其部署組態為 AllAtOnce

滾動部署

透過滾動部署,機群會劃分為幾個部分,因此不會同時升級整個機群。在部署程序期間,相同機群上會執行新的和舊的兩個軟體版本。此方法允許零停機時間更新。若該部署失敗,只會影響機群在進行更新的部分。

滾動部署方法的一種變化方式 (稱為 Canary 版本) 涉及先對相當小百分比的伺服器,部署新的軟體版本。透過這種方式,可以觀察軟體在少數伺服器上的生產執行狀況,同時最大限度地降低重大變更的影響。如果 Canary 部署的錯誤率高,則會回復該軟體。否則會逐漸增加使用新版本的伺服器百分比。

AWS Elastic Beanstalk 遵循滾動部署模式,並有兩個部署選項:滾動和以額外批次進行滾動。這些選項可讓應用程式先擴充規模,再停止伺服器的服務,以在部署期間保持完整的功能。AWS CodeDeploy 透過就地部署的變化且搭配 OneAtATime 和 HalfAtATime 等模式,來實現此模式。

不變式與藍/綠法部署

不變式模式會透過使用新組態或新的應用程式程式碼版本,啟動一組全新的伺服器,來指定應用程式程式碼的部署。此模式運用雲端功能,使用簡易的 API 呼叫來建立新的伺服器資源。

藍/綠法部署策略是一種不可變部署類型,也需要建立另一個環境。新環境開始運作且通過所有測試之後,流量便會移動到此新的部署項目。重要的是舊環境 (「藍」環境) 會維持在閒置狀態,以在需要時提供回復。

AWS Elastic Beanstalk 支援不變式藍/綠法部署模式。AWS CodeDeploy 也支援藍/綠法模式。如需 AWS 服務如何實現這些不變模式的詳細資訊,請參閱《AWS 上的藍/綠法部署》白皮書。