

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

# 透過取代任務來部署 Amazon ECS 服務
<a name="deployment-type-ecs"></a>

如果建立的服務使用的是*滾動更新* (`ECS`) 部署類型，Amazon ECS 服務排程器會使用新任務取代目前執行中的任務。Amazon ECS 在滾動更新期間從服務新增或移除的任務數量是由服務部署組態控制。

Amazon ECS 使用下列參數來決定任務數量：
+ `minimumHealthyPercent` 代表在滾動部署期間或容器執行個體耗盡時，應為服務執行且運作狀態良好的任務數量下限，以服務所需任務數量的百分比表示。此值會向上捨入。例如，如果最小運作狀態良好的百分比為 `50`，且所需的任務計數為 4，則排程器可以先停止兩項現有的任務，再開始兩項新的任務。同樣地，如果最小運作狀態良好的百分比為 75%，而所需的任務計數為 2，則排程器無法停止任何任務，因為產生的值也是 2。
+ `maximumPercent` 代表在滾動部署期間或容器執行個體耗盡時，應為服務執行的任務數量上限，以服務所需任務數量的百分比表示。此值會向下捨去。例如，如果最大百分比為 ，`200`而所需的任務計數為 4，則排程器可以在停止四個現有任務之前啟動四個新任務。同樣地，如果最大百分比為 `125`，且所需的任務計數為 3，則排程器無法停止任何任務，因為產生的值也是 3。

在滾動部署期間，當任務運作狀態不佳時，Amazon ECS 會取代它們，以維護您服務的 `minimumHealthyPercent` 並保護可用性。運作狀態不佳的任務會使用其所屬的相同服務修訂來取代。這可確保來源修訂版中運作狀態不佳的任務替換與目標修訂版中的任務失敗無關。當`maximumPercent`設定允許時，排程器會在停止運作狀態不佳的任務之前啟動替代任務。如果 `maximumPercent` 參數限制排程器先啟動取代任務，排程器會一次停止一個運作狀態不佳的任務，以在啟動取代任務之前釋放容量。

**重要**  
設定最小運作狀態良好的百分比或最大百分比時，您應確定排程器在部署初始化時，可以停止或啟動至少一項任務。如果您的服務部署因無效的部署組態而停滯，將傳送服務事件簡訊。如需詳細資訊，請參閱[服務 (*service-name*) 在部署期間因服務部署組態而無法停止或啟動任務。更新 minimumHealthyPercent 或 maximumPercent 值，然後再試一次。](service-event-messages-list.md#service-event-messages-7)。

滾動部署有兩種方法，有助於快速識別服務部署何時失敗：
+ [Amazon ECS 部署斷路器如何偵測失敗](deployment-circuit-breaker.md)
+ [CloudWatch 警示如何偵測 Amazon ECS 部署失敗](deployment-alarm-failure.md)

可以單獨使用或一起使用這些方法。同時使用兩種方法時，只要符合任一失敗方法的失敗條件，就會將部署設定為失敗。

請遵循下列準則來協助判斷要使用的方法：
+ 斷路器 – 當您想要在任務無法啟動而停止部署時，請使用此方法。
+ CloudWatch 警示 – 當您想要根據應用程式指標停止部署時，請使用此方法。

這兩種方法都支援復原至先前的服務修訂版。

## 容器映像解析
<a name="deployment-container-image-stability"></a>

依預設，Amazon ECS 會將任務定義中指定的容器映像標籤解析為容器映像摘要。如果您建立的服務執行並維護單一任務，則該任務將用於建立任務中容器的映像摘要。如果您建立的服務執行並維護多項任務，則服務排程器在部署期間啟動的第一項任務將用於建立這些任務中容器的映像摘要。

如果三次或多次嘗試建立容器映像摘要失敗，則部署將在不進行映像摘要解析的情況下繼續。如果啟用了部署斷路器，則部署將額外標記為失敗並得到復原。

建立容器映像摘要之後，Amazon ECS 會使用摘要來啟動任何其他所需的任務，以及進行任何未來的服務更新。這會導致服務中的所有任務始終執行相同的容器映像，從而確保軟體的版本一致性。

您可以使用容器定義中的 `versionConsistency` 參數，為任務中的每個容器設定此行為。如需詳細資訊，請參閱[versionConsistency](task_definition_parameters.md#ContainerDefinition-versionconsistency)。

**注意**  
低於 `1.31.0` 的 Amazon ECS 代理程式版本不支援映像摘要解析。`1.31.0` 至 `1.69.0` 的代理程式版本僅支援解析推送至 Amazon ECR 儲存庫之映像的摘要。`1.70.0` 或更高版本的代理程式版本支援解析所有映像的摘要。
用於映像摘要解析的最低 Fargate Linux 平台版本為 `1.3.0`。用於映像摘要解析的最低 Fargate Windows 平台版本為 `1.0.0`。
Amazon ECS 不會擷取 Amazon ECS 管理的邊車容器摘要，例如 Amazon GuardDuty 安全代理程式或 Service Connect Proxy。
若要在具有多項任務的服務中降低與容器映像解析相關聯的潛在延遲，請在 EC2 容器執行個體上執行 Amazon ECS 代理程式 `1.83.0` 或更高版本。若要避免潛在延遲，請在任務定義中指定容器映像摘要。
如果您建立所需任務計數為零的服務，則在您觸發另一次所需任務計數大於零的服務部署之前，Amazon ECS 無法建立容器摘要。
若要建立更新後的映像摘要，您可以強制執行新部署。更新後的摘要將用於啟動新任務，不會影響已在執行的任務。如需有關強制執行新部署的詳細資訊，請參閱 *Amazon ECS API reference* 中的 [forceNewDeployment](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html#ECS-UpdateService-request-forceNewDeployment)。
使用 EC2 容量提供者時，如果在初始部署期間沒有足夠的容量來啟動任務，軟體版本一致性可能會失敗。為確保即使容量有限也能維持版本一致性，請在任務定義容器組態中明確設定 `versionConsistency: "enabled"`，而不是依賴預設行為。這會導致 Amazon ECS 等待容量變為可用，然後再繼續部署。