

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

# 安全地停止在 EC2 執行個體上執行的 Amazon ECS 工作負載
<a name="managed-instance-draining"></a>

受管執行個體排空有助於優雅終止 Amazon EC2 執行個體。該機制可讓工作負載安全地停止，再重新排程至未終止的執行個體。基礎結構維護與更新作業可順利執行，且無需擔心工作負載受到中斷。透過受管執行個體排空，您可以簡化需要替代 Amazon EC2 執行個體的基礎結構管理工作流程，同時確保應用程式的彈性與可用性。

Amazon ECS 受管執行個體排空適用於 Auto Scaling 群組執行個體替代。根據執行個體重新整理與執行個體生命週期上限，客戶可以確保容量符合最新的作業系統與安全性要求。

受管執行個體排空只能與 Amazon ECS 容量提供者搭配使用。當您使用 Amazon ECS 主控台或 SDK 建立或更新 Auto Scaling 群組容量提供者時 AWS CLI，可以開啟受管執行個體耗盡。

Amazon ECS 受管執行個體排空會涵蓋下列事件。
+ [Auto Scaling 群組執行個體重新整理](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-refresh.html) – 使用執行個體重新整理來執行 Auto Scaling 群組中 Amazon EC2 執行個體的滾動替代，而不是手動分批執行。當您需要替換大量執行個體時，此方法非常實用。執行個體重新整理透過 Amazon EC2 主控台或 `StartInstanceRefresh` API 啟動。如果使用受管終止保護，請務必在呼叫 `StartInstanceRefresh` 時為縮減保護選取 `Replace`。
+ [執行個體生命週期上限](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-max-instance-lifetime.html) – 您可以在替換 Auto Scaling 群組執行個體時定義生命週期上限。此設定有助於根據內部安全政策或合規要求來排程替代執行個體。
+ Auto Scaling 群組縮減 – 根據擴展政策與排程擴展動作，Auto Scaling 群組支援執行個體的自動擴展。使用 Auto Scaling 群組作為 Amazon ECS 容量提供者，您可以在其中沒有任務執行時縮減 Auto Scaling 群組執行個體。
+ [Auto Scaling 群組運作狀態檢查](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-health-checks.html) – Auto Scaling 群組支援許多運作狀態檢查，可管理運作狀態不良的執行個體的終止。
+ [CloudFormation 堆疊更新](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-direct.html) - 您可以在 CloudFormation 堆疊中新增 `UpdatePolicy` 屬性，以在群組變更時執行滾動更新。
+ [Spot 容量重新平衡](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) – Auto Scaling 群組會根據 Amazon EC2 容量重新平衡通知，主動嘗試替換中斷風險較高的 Spot 執行個體。Auto Scaling 群組會在替代執行個體完成啟動且運作狀態良好時，終止舊執行個體。Amazon ECS 受管執行個體排空功能排空 Spot 執行個體的方式，與排空非 Spot 執行個體的方式相同。
+ [Spot 中斷](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html) – Spot 執行個體會在兩分鐘通知後終止。Amazon ECS 受管執行個體排空會讓執行個體進入排空狀態，以此作為回應。

**具有受管執行個體排空的 Amazon EC2 Auto Scaling lifecycle hook**  
Auto Scaling 群組 lifecycle hook 可讓客戶建立由執行個體生命週期中特定事件觸發的解決方案，並在發生此特定事件時執行自訂動作。Auto Scaling 群組最多允許 50 個勾點。可同時存在多組終止勾點平行執行，Auto Scaling 群組會等待所有勾點完成後才終止執行個體。

除 Amazon ECS 受管勾點終止外，您也可以自行設定生命週期終止勾點。Lifecycle hook 具有 `default action`，因此建議將 `continue` 設定為預設值，確保 Amazon ECS 受管勾點等其他勾點不受自訂勾點任何錯誤的影響。

如果您已設定 Auto Scaling 群組終止 lifecycle hook 並啟用 Amazon ECS 受管執行個體排空，則會執行兩個 lifecycle hook。不過，相對時間點無法保證。Lifecycle hook 具有 `default action` 設定，可指定逾時之時要採取的動作。如果失敗，建議在自訂勾點中使用 `continue` 作為預設結果。這可確保其他勾點，特別是 Amazon ECS 受管勾點不受自訂 lifecycle hook 中任何錯誤的影響。`abandon` 的替代結果會略過所有其他勾點，應避免此類狀況發生。如需有關 Auto Scaling 群組 lifecycle hook 的詳細資訊，請參閱 *Amazon EC2 Auto Scaling User Guide* 中的 [Amazon EC2 Auto Scaling lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)。

**任務與受管執行個體排空**  
Amazon ECS 受管執行個體排空功能會使用在容器執行個體中找到的現有排空功能。[容器執行個體排空](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-draining.html)功能會針對屬於 Amazon ECS 服務的副本任務執行替代與停止作業。處於 `PENDING` 或 `RUNNING` 狀態的獨立任務與 `RunTask` 調用的任務一樣，不會受到影響。您必須等待這些任務完成，或手動將其停止。容器執行個體會維持 `DRAINING` 狀態，直至所有任務停止或超過 48 小時為止。常駐程式任務是所有副本任務停止後最後停止的任務。

**受管執行個體排空與受管終止保護**  
即使停用受管終止，受管執行個體排空仍可運作。如需有關受管終止保護的資訊，請參閱[控制 Amazon ECS 終止的執行個體](managed-termination-protection.md)。

下表摘要說明受管終止與受管排空的不同組合的行為。


|  受管終止  |  受管排空  |  結果  | 
| --- | --- | --- | 
|  已啟用  | 已啟用 | Amazon ECS 可保護正在執行任務的 Amazon EC2 執行個體，避免因縮減事件而終止。任何正在終止的執行個體，例如未設定終止保護、收到 Spot 中斷通知或受執行個體重新整理強制處理的執行個體，皆會優雅排空。 | 
|  Disabled  | 已啟用 | Amazon ECS 不會保護執行任務的 Amazon EC2 執行個體免受縮減影響。不過，任何正在終止的執行個體皆會優雅排空。 | 
|  已啟用  | Disabled | Amazon ECS 可保護正在執行任務的 Amazon EC2 執行個體，避免因縮減事件而終止。不過，如果發生 Spot 中斷、強制執行個體重新整理或執行個體未執行任何任務，執行個體仍會終止。Amazon ECS 不會對這些執行個體執行優雅排空，並會在其停止後啟動替代服務任務。 | 
|  Disabled  | Disabled | Amazon EC2 執行個體可以隨時縮減或終止，即使正在執行 Amazon ECS 任務。Amazon ECS 會在這些執行個體停止後啟動替代服務任務。 | 

**受管執行個體排空與 Spot 執行個體排空**  
透過 Spot 執行個體排空功能，您可以在 Amazon ECS 代理程式上設定環境變數 `ECS_ENABLE_SPOT_INSTANCE_DRAINING`，這能讓 Amazon ECS 因應為期兩分鐘的 Spot 中斷通知時，將執行個體設為排空狀態。Amazon ECS 受管執行個體排空功能可促進 Amazon EC2 執行個體的優雅關閉，這些執行個體的終止可能源於多種原因，而非僅限於 Spot 中斷。例如，您可以使用 Amazon EC2 Auto Scaling 容量重新平衡功能，在高中斷風險的情況下主動替換 Spot 執行個體，且受管執行個體排空會對要替換的 Spot 執行個體執行優雅關閉。透過受管執行個體排空功能，您不需要個別啟用 Spot 執行個體排空，因此 Auto Scaling 群組使用者資料中的 `ECS_ENABLE_SPOT_INSTANCE_DRAINING` 是多餘的。如需有關 Spot 執行個體排空的詳細資訊，請參閱 [Spot 執行個體](create-capacity.md#container-instance-spot)。

## 受管執行個體排空如何與 EventBridge 搭配使用
<a name="managed-instance-draining-eventbridge"></a>

Amazon ECS 受管執行個體排空事件會發布至 Amazon EventBridge，Amazon ECS 會在您帳戶的預設匯流排中建立 EventBridge 受管規則，用以支援受管執行個體排空。您可以將這些事件篩選到 Lambda、Amazon SNS 和 Amazon SQS 等 AWS 其他服務，以監控和疑難排解。
+ Amazon EC2 Auto Scaling 會在調用 lifecycle hook 時，將事件傳送至 EventBridge。
+ Spot 中斷通知會發布至 EventBridge。
+ Amazon ECS 會產生錯誤訊息，您可以透過 Amazon ECS 主控台與 API 擷取這些訊息。
+ EventBridge 內建重試機制，可作為暫時故障的緩解措施。

## Amazon ECS 受管執行個體排空疑難排解
<a name="managed-instance-troubleshooting"></a>

您可能需要針對受管執行個體排空的問題進行疑難排解。以下是您在使用時可能遇到的問題與解決方案範例。

**使用自動擴展時，執行個體不會在超過執行個體生命週期上限後終止。**  
如果在使用 Auto Scaling 群組時，您的執行個體即使在達到並超過執行個體生命週期上限之後仍未終止，可能是因為執行個體受到縮減保護。您可以停用受管終止功能，同時允許受管排空功能處理執行個體回收。

## Amazon ECS 受管執行個體的排空行為
<a name="managed-instances-draining-behavior"></a>

Amazon ECS 受管執行個體終止可確保正常的工作負載轉換，同時最佳化成本和維護系統運作狀態。終止系統為執行個體終止提供三種不同的決策路徑，每種都具有不同的時間特性與客戶影響設定檔。

### 終止決策路徑
<a name="managed-instances-termination-paths"></a>

客戶啟動的終止  
在您需要從服務中立即移除容器執行個體時，提供執行個體移除的直接控制權。您可以在強制旗標設定為 true 的情況下調用 DeregisterContainerInstance API，表示即使有任何執行中的工作負載，仍需要立即終止。

系統啟動的閒置終止  
Amazon ECS 受管執行個體透過終止未執行任何任務的閒置 Amazon ECS 容器執行個體，持續監控並主動最佳化成本。ECS 使用啟發式延遲，讓容器執行個體有機會在終止之前取得新啟動的任務。這可以使用 `scaleInAfter` Amazon ECS 受管執行個體容量提供者組態參數來自訂。

基礎結構重新整理終止  
Amazon ECS 受管執行個體會自動管理和更新受管容器執行個體上的軟體，以確保安全性和合規性，同時維持工作負載可用性。如需詳細資訊，請參閱 [Amazon ECS 受管執行個體中的修補](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-patching.html)。

### 優雅排空與工作負載遷移
<a name="managed-instances-draining-coordination"></a>

優雅排空系統會實作與 Amazon ECS 服務管理的複雜協調，確保服務受管任務正確遷移至已排程終止的執行個體之外。

**服務任務排空協調**  
當執行個體轉換為排空狀態時，Amazon ECS 排程器會自動停止在該執行個體上置放新任務，同時為現有服務任務實作優雅關閉程序。服務任務排空包括與服務部署策略、運作狀態檢查需求和排空偏好設定的協調，確保最佳的遷移時間與成功率。

**獨立任務處理**  
獨立任務需要不同的處理方式，因為此類任務無法受益於自動服務管理機制。系統會評估獨立任務特性，包括任務持續時間預估、完成機率分析與客戶影響評估。優雅完成策略允許獨立任務在延長的寬限期內自然完成，而強制終止可確保任務尚未自然完成時，基礎結構重新整理會在可接受的時間範圍內發生。

### 兩階段完成策略
<a name="managed-instances-two-phase-completion"></a>

終止系統會實作兩階段方法，可平衡工作負載持續性與基礎結構管理需求。

**階段 1：優雅完成期間**  
在此階段，系統會實作優先考量工作負載持續性的優雅排空策略。服務任務會透過正常的 Amazon ECS 排程程序優雅排空，獨立任務會持續執行且可能自然完成，系統將監控所有任務透過自然完成流程進入已停止狀態。

**階段 2：硬性截止日期強制執行**  
當優雅完成在可接受的時間範圍內未達成終止目標時，系統會實作硬性截止日期強制執行。硬性截止日期通常設定為排空啟動時間加 7 天，為優雅完成提供大量時間，同時維持營運需求。強制執行包括自動調用強制取消註冊程序並立即終止所有剩餘的任務，無論完成狀態如何。