

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

# Elastic Beanstalk 滾動環境資訊更新
<a name="using-features.rollingupdates"></a>

當[組態變更需要替換執行個體](environments-updating.md)時，Elastic Beanstalk 能夠以批次方式執行更新，避免在傳播變更期間發生停機。在滾動更新期間，您可將容量設定為僅減少單一批次的大小。Elastic Beanstalk 會停止單一批次執行個體的服務，將其終止，然後啟動具備新組態的批次。新的批次開始處理請求後，Elastic Beanstalk 會繼續進行下一批次。

滾動組態更新的批次可根據時間定期處理 (每個批次間會出現延遲)，或是根據運作狀態處理。對於根據時間進行的滾動更新，您可設定 Elastic Beanstalk 完成啟動一批次執行個體後的等待時間，之後才繼續進行下一批次。此暫停時間可讓您的應用程式進行啟動載入作業，並開始處理請求。

對於根據運作狀態進行的滾動更新，Elastic Beanstalk 繼續進行下一批次前，會等待前一批次的執行個體通過運作狀態檢查。執行個體的運作狀態由運作狀態報告系統 (基礎型或增強型) 判定。若是[基本運作狀態](using-features.healthstatus.md)，單一批次內的所有執行個體一通過 Elastic Load Balancing (ELB) 運作狀態檢查，即可視為運作狀態良好。

若是[增強型運作狀態報告](health-enhanced.md)，單一批次內的所有執行個體都必須連續通過多次運作狀態檢查，之後 Elastic Beanstalk 才會繼續進行下一批次。增強型運作狀態除了具備只檢查執行個體的 ELB 運作狀態檢查，亦會監控應用程式日誌以及環境其他資源的狀態。若 Web 伺服器環境搭配增強型運作狀態，所有執行個體必須在兩分鐘內通過 12 個運作狀態檢查 (工作者環境則是在三分鐘內通過 18 個檢查)。若一個執行個體無法通過一項運作狀態檢查，則計數會重設。

若單一批次未在滾動更新逾時內 (預設為 30 分鐘) 恢復良好運作，則會取消更新。滾動更新逾時是可在 `aws:autoscaling:updatepolicy:rollingupdate` 命名空間使用的[組態選項](command-options.md)。若您的應用程式未通過運作狀態檢查 (即未處於 `Ok` 狀態)，但就另一層級而言仍屬穩定，您可於 [`aws:elasticbeanstalk:healthreporting:system`](command-options-general.md#command-options-general-elasticbeanstalkhealthreporting) 命名空間中設定 `HealthCheckSuccessThreshold` 選項，變更在 Elastic Beanstalk 中視執行個體運作良好的層級。

若滾動更新程序失敗，Elastic Beanstalk 會開始另一次滾動更新，以復原為之前的組態。滾動更新失敗的原因可能是未通過運作狀態檢查，或是由於啟動新執行個體導致超過您帳戶的配額。例如，若您達到 Amazon EC2 執行個體的數量配額，滾動更新可能會在嘗試佈建新一批次的執行個體時失敗。在此情況下，轉返亦會失敗。

轉返失敗會結束更新程序，讓您的環境停留在運作狀態不佳的狀態。尚未處理的批次仍使用舊的組態運行執行個體，而成功完成的批次則會具備新的組態。欲修正轉返失敗後的環境，請先解決造成更新失敗的根本原因，然後啟動另一次環境更新。

另一個方法是將新版本的應用程式部署至不同環境，然後執行 CNAME 交換重新導向流量，達到零停機時間。如需詳細資訊，請參閱[透過 Elastic Beanstalk 進行藍/綠部署](using-features.CNAMESwap.md)。

## 滾動更新與滾動部署比較
<a name="environments-cfg-rollingupdates-deployments"></a>

進行滾動更新的情況是，當您變更的設定需要為環境佈建新的 Amazon EC2 執行個體，這包括變更 Auto Scaling 群組組態 (如執行個體類型和金鑰對設定) 以及變更 VPC 設定。滾動更新會先終止各個批次的執行個體，再佈建新的批次予以替換。

進行[滾動部署](using-features.rolling-version-deploy.md)的情況是當您部署應用程式的時候，且滾動部署通常無須替換環境中的執行個體。Elastic Beanstalk 會停止各個批次的服務，部署新的應用程式版本，然後恢復其服務。

例外情況是當您變更需要替換執行個體的設定時，同時部署新的應用程式版本。例如，如果您變更原始碼套件中[組態檔案](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)的[金鑰名稱](ebextensions.md)設定並將其部署至您的環境，即會觸發滾動更新。此時不會將新的應用程式版本部署至現有執行個體的各個批次，而是會佈建具備新組態的新批次執行個體。在此情況下，不會另行部署，因為新的應用程式版本會採用新的執行個體。

只要環境更新包含佈建新的執行個體，就會出現部署階段，此時應用程式原始碼會部署至新的執行個體，且會套用修改執行個體上作業系統或軟體的組態設定。[部署運作狀態檢查設定](using-features.rolling-version-deploy.md#environments-cfg-rollingdeployments-console) (**Ignore health check (忽略運作狀態檢查)**、**Healthy threshold (運作狀態閾值)** 和 **Command timeout (命令逾時)**) 也會於部署期間，套用至根據運作狀態進行的滾動更新和不可變更新。

## 設定滾動更新
<a name="rollingupdates-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 (滾動更新類型)**，選取其中一個 **Rolling (滾動)** 選項。  
![在修改滾動更新與部署組態頁面上的組態更新區段](http://docs.aws.amazon.com/zh_tw/elasticbeanstalk/latest/dg/images/aeb-config-rolling-updates-health.png)

1. 選擇 **Batch size (批次大小)**、**Minimum capacity (容量下限)** 和 **Pause time (暫停時間)** 設定。

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

**Rolling updates and deployments** (滾動更新和部署) 頁面的 **Configuration updates** (組態更新) 區段，具有以下滾動更新的選項：
+ **Rolling update type (滾動更新類型)** – Elastic Beanstalk 完成更新一批次執行個體後的等待時間，之後才繼續進行下一批次，以允許這些執行個體完成啟動載入作業並開始處理流量。您可以從以下選項中選擇：
  + **Rolling based on Health (根據運作狀態進行滾動)** – 等待目前批次內執行個體恢復良好運作並恢復服務，之後才繼續下一批次。
  + **Rolling based on Time (根據時間進行滾動)** – 指定新執行個體啟動與其恢復服務並進行下一批次間的等待時間。
  + **Immutable (不可變)** – 透過[不可變的更新](environmentmgmt-updates-immutable.md)作業，將組態變更套用至全新的執行個體群組。
+ **Batch size (批次大小)** – 各個批次欲替換的執行個體數量 (介於 **1** 和 **10000** 之間)。根據預設，此數值為 Auto Scaling 群組大小下限的三分之一，無條件進位至整數。
+ **Minimum capacity (最低容量)** – 更新其他執行個體同時保持執行的執行個體數量下限 (介於 **0** 和 **9999** 之間)。預設值為 Auto Scaling 群組的規模下限或 Auto Scaling 群組的規模上限減一，以較低者為準。
+ **Pause time (暫停時間)** (僅適用根據時間進行的更新) – 批次更新完成直到繼續進行下一批前的等待時間，讓您的應用程式能夠開始接收流量。介於 0 秒與 1 小時之間。

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

您亦可使用 `aws:autoscaling:updatepolicy:rollingupdate` 命名空間中的[組態選項](command-options.md)來設定滾動更新。

使用 `RollingUpdateEnabled` 選項來啟用滾動更新，`RollingUpdateType` 則可選擇更新類型。`RollingUpdateType` 支援下列值：
+ `Health` (根據運作狀態進行滾動) – 等待目前批次內執行個體恢復良好運作並恢復服務，之後才繼續下一批次。
+ `Time` – 指定新執行個體啟動與其恢復服務並進行下一批次間的等待時間。
+ `Immutable` – 透過[不可變的更新](environmentmgmt-updates-immutable.md)作業，將組態變更套用至全新的執行個體群組。

當您啟用滾動更新，請設定 `MaxBatchSize` 和 `MinInstancesInService` 選項，進行各個批次大小的設定。以根據時間和根據運作狀態的滾動更新而言，您亦可分別設定 `PauseTime` 和 `Timeout`。

例如，欲一次啟動最多五個執行個體同時至少兩個執行個體保持服務，並在批次之間等待 5 分 30 秒，請指定下列選項與值。

**Example .ebextensions/timebased.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateEnabled: true
    MaxBatchSize: 5
    MinInstancesInService: 2
    RollingUpdateType: Time
    PauseTime: PT5M30S
```

欲啟用根據運作狀態的滾動更新，且各個批次的逾時為 45 分鐘，請指定下列選項與值：

**Example .ebextensions/healthbased.config**  

```
option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateEnabled: true
    MaxBatchSize: 5
    MinInstancesInService: 2
    RollingUpdateType: Health
    Timeout: PT45M
```

`Timeout` 和 `PauseTime` 值都必須以 [ISO8601 持續時間](http://en.wikipedia.org/wiki/ISO_8601#Durations)格式指定：`PT{{#}}H{{#}}M{{#}}S`，其中每個 \# 分別為時數、分鐘數或秒數。

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