本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Elastic Beanstalk 滾動環境資訊更新
當組態變更需要替換執行個體時,Elastic Beanstalk 能夠以批次方式執行更新,避免在傳播變更期間發生停機。在滾動更新期間,您可將容量設定為僅減少單一批次的大小。Elastic Beanstalk 會停止單一批次執行個體的服務,將其終止,然後啟動具備新組態的批次。新的批次開始處理請求後,Elastic Beanstalk 會繼續進行下一批次。
滾動組態更新的批次可根據時間定期處理 (每個批次間會出現延遲),或是根據運作狀態處理。對於根據時間進行的滾動更新,您可設定 Elastic Beanstalk 完成啟動一批次執行個體後的等待時間,之後才繼續進行下一批次。此暫停時間可讓您的應用程式進行啟動載入作業,並開始處理請求。
對於根據運作狀態進行的滾動更新,Elastic Beanstalk 繼續進行下一批次前,會等待前一批次的執行個體通過運作狀態檢查。執行個體的運作狀態由運作狀態報告系統 (基礎型或增強型) 判定。若是基本運作狀態,單一批次內的所有執行個體一通過 Elastic Load Balancing (ELB) 運作狀態檢查,即可視為運作狀態良好。
若是增強型運作狀態報告,單一批次內的所有執行個體都必須連續通過多次運作狀態檢查,之後 Elastic Beanstalk 才會繼續進行下一批次。增強型運作狀態除了具備只檢查執行個體的 ELB 運作狀態檢查,亦會監控應用程式日誌以及環境其他資源的狀態。若 Web 伺服器環境搭配增強型運作狀態,所有執行個體必須在兩分鐘內通過 12 個運作狀態檢查 (工作者環境則是在三分鐘內通過 18 個檢查)。若一個執行個體無法通過一項運作狀態檢查,則計數會重設。
若單一批次未在滾動更新逾時內 (預設為 30 分鐘) 恢復良好運作,則會取消更新。滾動更新逾時是可在 aws:autoscaling:updatepolicy:rollingupdate
命名空間使用的組態選項。若您的應用程式未通過運作狀態檢查 (即未處於 Ok
狀態),但就另一層級而言仍屬穩定,您可於 aws:elasticbeanstalk:healthreporting:system 命名空間中設定 HealthCheckSuccessThreshold
選項,變更在 Elastic Beanstalk 中視執行個體運作良好的層級。
若滾動更新程序失敗,Elastic Beanstalk 會開始另一次滾動更新,以復原為之前的組態。滾動更新失敗的原因可能是未通過運作狀態檢查,或是由於啟動新執行個體導致超過您帳戶的配額。例如,若您達到 Amazon EC2 執行個體的數量配額,滾動更新可能會在嘗試佈建新一批次的執行個體時失敗。在此情況下,轉返亦會失敗。
轉返失敗會結束更新程序,讓您的環境停留在運作狀態不佳的狀態。尚未處理的批次仍使用舊的組態運行執行個體,而成功完成的批次則會具備新的組態。欲修正轉返失敗後的環境,請先解決造成更新失敗的根本原因,然後啟動另一次環境更新。
另一個方法是將新版本的應用程式部署至不同環境,然後執行 CNAME 交換重新導向流量,達到零停機時間。如需更多資訊,請參閱透過 Elastic Beanstalk 進行藍/綠部署。
滾動更新與滾動部署比較
進行滾動更新的情況是,當您變更的設定需要為環境佈建新的 Amazon EC2 執行個體,這包括變更 Auto Scaling 群組組態 (如執行個體類型和金鑰對設定) 以及變更 VPC 設定。滾動更新會先終止各個批次的執行個體,再佈建新的批次予以替換。
進行滾動部署的情況是當您部署應用程式的時候,且滾動部署通常無須替換環境中的執行個體。Elastic Beanstalk 會停止各個批次的服務,部署新的應用程式版本,然後恢復其服務。
例外情況是當您變更需要替換執行個體的設定時,同時部署新的應用程式版本。例如,如果您變更原始碼套件中組態檔案的金鑰名稱設定並將其部署至您的環境,即會觸發滾動更新。此時不會將新的應用程式版本部署至現有執行個體的各個批次,而是會佈建具備新組態的新批次執行個體。在此情況下,不會另行部署,因為新的應用程式版本會採用新的執行個體。
只要環境更新包含佈建新的執行個體,就會出現部署階段,此時應用程式原始碼會部署至新的執行個體,且會套用修改執行個體上作業系統或軟體的組態設定。部署運作狀態檢查設定 (Ignore health check (忽略運作狀態檢查)、Healthy threshold (運作狀態閾值) 和 Command timeout (命令逾時)) 也會於部署期間,套用至根據運作狀態進行的滾動更新和不可變更新。
設定滾動更新
您可於 Elastic Beanstalk 主控台啟用並設定滾動更新。
欲啟用滾動更新
開啟 Elastic Beanstalk 主控台
,然後在區域清單中選取您的 AWS 區域。 -
在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。
注意
如果您有許多環境,請使用搜尋列來篩選環境清單。
在導覽窗格中,選擇組態。
-
在 Rolling updates and deployments (滾動更新和部署) 組態類別中,選擇 Edit (編輯)。
-
在 Configuration updates (組態更新) 區段中,針對 Rolling update type (滾動更新類型),選取其中一個 Rolling (滾動) 選項。
-
選擇 Batch size (批次大小)、Minimum capacity (容量下限) 和 Pause time (暫停時間) 設定。
-
若要儲存變更,請選擇頁面底部的儲存變更。
Rolling updates and deployments (滾動更新和部署) 頁面的 Configuration updates (組態更新) 區段,具有以下滾動更新的選項:
-
Rolling update type (滾動更新類型) – Elastic Beanstalk 完成更新一批次執行個體後的等待時間,之後才繼續進行下一批次,以允許這些執行個體完成啟動載入作業並開始處理流量。您可以從以下選項中選擇:
-
Rolling based on Health (根據運作狀態進行滾動) – 等待目前批次內執行個體恢復良好運作並恢復服務,之後才繼續下一批次。
-
Rolling based on Time (根據時間進行滾動) – 指定新執行個體啟動與其恢復服務並進行下一批次間的等待時間。
-
Immutable (不可變) – 透過不可變的更新作業,將組態變更套用至全新的執行個體群組。
-
-
Batch size (批次大小) – 各個批次欲替換的執行個體數量 (介於
1
和10000
之間)。根據預設,此數值為 Auto Scaling 群組大小下限的三分之一,無條件進位至整數。 -
Minimum capacity (最低容量) – 更新其他執行個體同時保持執行的執行個體數量下限 (介於
0
和9999
之間)。預設值為 Auto Scaling 群組的規模下限或 Auto Scaling 群組的規模上限減一,以較低者為準。 -
Pause time (暫停時間) (僅適用根據時間進行的更新) – 批次更新完成直到繼續進行下一批前的等待時間,讓您的應用程式能夠開始接收流量。介於 0 秒與 1 小時之間。
aws:autoscaling:updatepolicy:rollingupdate 命名空間
您亦可使用 aws:autoscaling:updatepolicy:rollingupdate
命名空間中的組態選項來設定滾動更新。
使用 RollingUpdateEnabled
選項來啟用滾動更新,RollingUpdateType
則可選擇更新類型。RollingUpdateType
支援下列值:
-
Health
(根據運作狀態進行滾動) – 等待目前批次內執行個體恢復良好運作並恢復服務,之後才繼續下一批次。 -
Time
– 指定新執行個體啟動與其恢復服務並進行下一批次間的等待時間。 -
Immutable
– 透過不可變的更新作業,將組態變更套用至全新的執行個體群組。
當您啟用滾動更新,請設定 MaxBatchSize
和 MinInstancesInService
選項,進行各個批次大小的設定。以根據時間和根據運作狀態的滾動更新而言,您亦可分別設定 PauseTime
和 Timeout
。
例如,欲一次啟動最多五個執行個體同時至少兩個執行個體保持服務,並在批次之間等待 5 分 30 秒,請指定下列選項與值。
範例 .ebextensions/timebased.config
option_settings:
aws:autoscaling:updatepolicy:rollingupdate:
RollingUpdateEnabled: true
MaxBatchSize: 5
MinInstancesInService: 2
RollingUpdateType: Time
PauseTime: PT5M30S
欲啟用根據運作狀態的滾動更新,且各個批次的逾時為 45 分鐘,請指定下列選項與值:
範例 .ebextensions/healthbased.config
option_settings:
aws:autoscaling:updatepolicy:rollingupdate:
RollingUpdateEnabled: true
MaxBatchSize: 5
MinInstancesInService: 2
RollingUpdateType: Health
Timeout: PT45M
Timeout
和 PauseTime
值都必須以 ISO8601 持續時間PT
,其中每個 # 分別為時數、分鐘數或秒數。#
H#
M#
S
EB CLI 和 Elastic Beanstalk 主控台會為前述選項套用建議的數值。若您想要使用組態檔進行相同的設定,您必須移除這些設定。如需詳細資訊,請參閱「建議值」。