

# 部署方法
<a name="deployment-methods"></a>

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

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


|  方法  |  部署失敗的影響  |  部署時間  |  零停機時間  |  無 DNS 變更  |  回復程序  |  程式碼部署目標  | 
| --- | --- | --- | --- | --- | --- | --- | 
|  就地部署  |  停機時間  |  ![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)  |  ☓  |  ✓  |  重新部署  |  現有執行個體  | 
|  滾動式  |  單一批次停止服務。失敗前成功的批次，會執行新的應用程式版本。  |  ![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)†  |  ✓  |  ✓  |  重新部署  |  現有執行個體  | 
|  以額外批次進行滾動 (Beanstalk)  |  若第一個批次即失敗，則影響極小；否則與滾動式程度相近。  |  ![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)†  |  ✓  |  ✓  |  重新部署  |  新執行個體和現有執行個體  | 
|  不變式  |  極小  |  ![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)  |  ✓  |  ✓  |  重新部署  |  新執行個體  | 
|  流量分割  |  極小  |  ![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)  |  ✓  |  ✓  |  重新路由流量並終止新的執行個體  |  新執行個體  | 
|  藍/綠法  |  極小  |  ![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)![](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/practicing-continuous-integration-continuous-delivery/images/image18.png)  |  ✓  |  ☓  |  切換回舊環境  |  新執行個體  | 

## 一次全部 (就地部署)
<a name="all-at-once-in-place-deployment"></a>

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

 在 AWS Elastic Beanstalk 中，此部署稱為[一次全部](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html)，可供單一和負載平衡的應用程式使用。在 AWS CodeDeploy 中，此部署方法稱為[就地部署](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments.html)，其部署組態為 `AllAtOnce`。

## 滾動部署
<a name="rolling-deployment"></a>

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

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

 AWS Elastic Beanstalk 遵循滾動部署模式，並有兩個部署選項：[滾動和以額外批次進行滾動](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html)。這些選項可讓應用程式先擴充規模，再停止伺服器的服務，以在部署期間保持完整的功能。AWS CodeDeploy 透過就地部署的變化且搭配 [OneAtATime 和 HalfAtATime](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) 等模式，來實現此模式。

## 不變式與藍/綠法部署
<a name="immutable-and-bluegreen-deployment"></a>

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

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

 AWS Elastic Beanstalk 支援[不變式](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environmentmgmt-updates-immutable.html)和[藍/綠法](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html)部署模式。AWS CodeDeploy 也支援[藍/綠法模式](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html#welcome-deployment-overview-blue-green)。如需 AWS 服務如何實現這些不變模式的詳細資訊，請參閱《[AWS 上的藍/綠法部署](https://d1.awsstatic.com/whitepapers/AWS_Blue_Green_Deployments.pdf)》白皮書。