

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 不可變的環境更新
<a name="environmentmgmt-updates-immutable"></a>

不可變的環境更新是[滾動更新](using-features.rollingupdates.md)的替代選項。不可變環境更新可確保需要取代執行個體的組態變更有效安全執行。若不可變環境更新失敗，轉返程序只要終止 Auto Scaling 群組即可。另一方面，若滾動更新失敗，則需要另外執行滾動更新來還原變更。

欲執行不可變環境更新，Elastic Beanstalk 會於環境負載平衡器後方建立第二個臨時 Auto Scaling 群組，以容納新的執行個體。首先，Elastic Beanstalk 會於新群組內，使用新組態來啟動單一執行個體。此執行個體會處理流量，搭配執行之前組態的原始 Auto Scaling 群組中的所有執行個體運作。

第一個執行個體通過運作狀態檢查後，Elastic Beanstalk 會使用新組態來啟動額外的執行個體，總執行個體數量與原始 Auto Scaling 群組內執行的數量相符。所有新執行個體通過運作狀態檢查後，Elastic Beanstalk 會將其傳輸至原始 Auto Scaling 群組內，並終止臨時 Auto Scaling 群組和舊的執行個體。

**注意**  
不可變環境更新期間，當新的 Auto Scaling 群組的執行個體開始處理請求後，在原始 Auto Scaling 群組執行個體終止前，您環境的容量會短暫加倍。若您的環境擁有多個執行個體，或您的[隨需執行個體配額](https://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2)較低，請確認您的容量足以執行不可變環境更新。若您已接近配額，請考慮改使用滾動更新。

不可變更新需要[增強型運作狀態報告](health-enhanced.md)，以評估環境於更新期間的運作狀態。增強型運作狀態報告結合標準負載平衡器的運作狀態檢查與執行個體監控，以確保執行新組態的執行個體[成功處理請求](health-enhanced.md#health-enhanced-factors)。

您亦可將不可變更新做為滾動部署的替代方法，藉此部署應用程式的新版本。若您將 [Elastic Beanstalk 的應用程式部署設定為使用不可變更新](using-features.rolling-version-deploy.md)，則在您每次部署新的應用程式版本時，將會取代環境中的所有執行個體。若不可變應用程式部署失敗，Elastic Beanstalk 會終止新的 Auto Scaling 群組以立即回復變更。這可避免部分批次完成後，在滾動更新失敗時出現部分陣列部署。

**警告**  
部署或更新期間，部分原則會取代所有執行個體。這會造成所有的累計 [Amazon EC2 爆量餘額](https://docs.aws.amazon.com/AWSEC2/latest/DeveloperGuide/burstable-performance-instances.html)遺失。這發生的情況如下：  
執行個體更換啟用的受管平台更新
不可變更新
不可變更新或流量分割啟用的部署

若不可變更新失敗，新的執行個體在 Elastic Beanstalk 將其終止前，會上傳[套件日誌](using-features.logging.md)至 Amazon S3。Elastic Beanstalk 在刪除不可變更新失敗的日誌前，會於 Amazon S3 保留一小時，而非套件或結尾日誌的標準 15 分鐘。

**注意**  
若您將不可變更新用於應用程式版本部署，但未用於組態，則當您嘗試部署的應用程式版本內含通常會觸發滾動更新的組態變更時 (例如變更執行個體類型的組態)，可能會出現錯誤。欲避免此情況，請於不同更新作業內進行組態變更，或將不可變更新設定為用於部署及組態變更。

您的不可變更新執行無法搭配資源組態變更。例如，您無法在變更[需要替換執行個體的設定](environments-updating.md)，同時更新其他設定，或使用會變更組態設定或原始碼內其他資源的組態檔案，執行不可變部署。若您嘗試變更資源設定 (如負載平衡器設定)，並同時執行不可變更新，Elastic Beanstalk 會傳回錯誤。

若您的資源組態變更不需要變更原始碼或執行個體組態，請於兩次更新作業中執行變更。若須仰賴它們，請改為執行[藍/綠部署](using-features.CNAMESwap.md)。

## 設定不可變更新
<a name="updates-immutable-configure"></a>

您可於 Elastic Beanstalk 主控台啟用並設定不可變更新。

**欲啟用不可變更新 (主控台)**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在 **Rolling updates and deployments (滾動更新和部署)** 組態類別中，選擇 **Edit (編輯)**。

1. 在 **Configuration Updates (組態更新)** 區段，將 **Rolling update type (滾動更新類型)** 設定為 **Immutable (不可變)**。  
![\[在修改滾動更新與部署組態頁面上的組態更新區段\]](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/environments-mgmt-updates-immutable.png)

1. 若要儲存變更，請選擇頁面底部的**儲存變更**。

## aws:autoscaling:updatepolicy:rollingupdate 命名空間
<a name="updates-immutable-namespace"></a>

您亦可使用 `aws:autoscaling:updatepolicy:rollingupdate` 命名空間中的選項來設定不可變更新。下列範例[組態檔案](ebextensions.md)會針對組態變更啟用不可變更新。

**Example .ebextensions/immutable-updates.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateType: Immutable
```

下列範例會針對組態變更及部署兩者啟用不可變更新。

**Example .ebextensions/immutable-all.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateType: Immutable
  aws:elasticbeanstalk:command:
    DeploymentPolicy: Immutable
```

EB CLI 和 Elastic Beanstalk 主控台會為前述選項套用建議的數值。若您想要使用組態檔進行相同的設定，您必須移除這些設定。如需詳細資訊，請參閱「[建議值](command-options.md#configuration-options-recommendedvalues)」。