更新 Amazon ECS 服務參數 - Amazon Elastic Container Service

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

更新 Amazon ECS 服務參數

建立服務之後,有時候您可能需要更新服務參數,例如任務數量。

服務排程器啟動新任務時,會使用下列邏輯來決定叢集中的任務置放。

  • 決定叢集中的哪些容器執行個體可以支援您服務的任務定義。例如,它們具有所需的 CPU、記憶體、連接埠和容器執行個體屬性。

  • 根據預設,服務排程器會嘗試以這種方式平衡可用區域之間的任務,即使您可以選擇不同的置放策略。

    • 在與執行個體相同的可用區域中,依最少數量的此服務執行中任務排序有效的容器執行個體。例如,如果區域 A 有一項執行中的服務任務,而區域 B 和 C 都沒有,則最適合置放的即為區域 B 或 C 中的有效容器執行個體。

    • 將新的服務任務放置在最佳可用區域的有效容器執行個體 (根據先前的步驟),且偏好此服務中的執行中任務數量最少的容器執行個體。

當服務排程器停止執行任務時,它會嘗試使用下列邏輯來維持叢集中可用區域的平衡:

  • 在與執行個體相同的可用區域中,依此服務的最大執行中任務數量排序容器執行個體。例如,如果區域 A 有一項執行中的服務任務,而區域 B 和 C 各有兩項,則最適合終止的即為區域 B 或 C 中的容器執行個體。

  • 停止最佳可用區域之容器執行個體中的任務 (根據先前的步驟),且偏好此服務之執行中任務數量最多的容器執行個體。

使用 清單來判斷您是否可以變更服務參數。

可用區域重新平衡

指出是否針對服務使用可用區域重新平衡。

您可以針對滾動部署變更此參數。

容量提供者策略

容量提供者策略的詳細資料。您可以在建立叢集、執行任務或更新服務時設定容量提供者。

當您使用 Fargate 時,容量提供者為 FARGATEFARGATE_SPOT

當您使用 Amazon EC2 時,容量提供者是 Auto Scaling 群組。

您可以變更滾動部署和藍/綠部署的容量提供者。

下列清單提供有效的轉換:

  • 將 Fargate 啟動類型更新為 Auto Scaling 群組容量提供者。

  • 將 Amazon EC2 啟動類型更新為 Fargate 容量提供者。

  • 將 Fargate 容量提供者更新為 Auto Scaling 群組容量提供者。

  • 將 Amazon EC2 容量提供者更新為 Fargate 容量提供者。

  • 將 Auto Scaling 群組或 Fargate 容量提供者更新回啟動類型。當您使用 CLI 或 API 時,您會在 capacityProviderStrategy 參數中傳遞空清單。

叢集

您無法變更叢集名稱。

Deployment configuration (部署組態)

部署組態包括 CloudWatch 警示,以及用於偵測失敗和所需組態的斷路器。

如果服務無法達到穩定狀態,部署斷路器會確定服務部署是否會失敗。如果您使用部署斷路器,服務部署將轉換為失敗狀態並停止啟動新任務。如果您使用復原選項,當服務部署失敗時,服務會復原至上次成功完成的部署。

當您更新使用 Amazon ECS 斷路器的服務時,Amazon ECS 會建立服務部署和服務修訂。這些資源可讓您檢視服務歷史記錄的詳細資訊。如需詳細資訊,請參閱使用 Amazon ECS 服務部署檢視服務歷史記錄

服務排程器 (在服務的部署組態中) 使用運作狀態百分比下限和百分比上限參數,決定部署策略。

如果服務使用滾動更新 (ECS) 部署類型,運作狀態百分比下限表示服務中必須在部署期間保持 RUNNING 狀態的任務數量下限,以所需任務數量的百分比表示 (四捨五入至最接近的整數)。如果服務包含的任務使用 EC2 啟動類型,即使有任何容器執行個體處於 DRAINING 狀態,此參數也適用。使用此參數進行部署,無須使用額外的叢集容量。例如,如果您的服務所需任務數量為四項,且運作狀態百分比下限為 50%,則排程器可先停止兩項現有的任務以釋出叢集容量,再啟動兩項新的任務。如果服務處於 RUNNING 狀態,則不使用負載平衡器的服務會將任務視為正常運作。對於使用負載平衡器的服務,如果任務處於 RUNNING 狀態,且負載平衡器回報為正常運作,則服務會將任務視為正常運作。運作狀態百分比下限的預設值為 100%。

如果服務使用滾動更新 (ECS) 部署類型,最大百分比參數代表部署期間在 PENDINGRUNNINGSTOPPING 狀態中允許的服務任務數量上限,以所需任務數量的百分比表示 (四捨五入至最接近的整數)。如果服務包含的任務使用 EC2 啟動類型,即使有任何容器執行個體處於 DRAINING 狀態,此參數也適用。使用此參數來定義部署批次大小。例如,如果您的服務有所需的四個任務數目及百分比上限值 200%,則排程器可先啟動四項新任務,再停止四項舊任務。前提是有執行此操作所需的叢集資源。百分比上限的預設值為 200%。

當服務排程器於更新期間取代任務時,服務會先從負載平衡器 (如果使用) 移除任務,並等待連線耗盡。然後,對任務中執行的容器發出相當於 docker stop 的命令。這會造成 SIGTERM 信號和 30 秒逾時,並在之後傳送 SIGKILL,強制停止容器。如果容器在接收到 SIGTERM 信號後於 30 秒內從容處理完畢並結束,就不會傳送任何 SIGKILL 信號。服務排程器依據您定義的運作狀態百分比下限和百分比上限設定,啟動和停止任務。

在容器運作狀態檢查或負載平衡器目標群組運作狀態檢查失敗後,服務排程器也會取代判定為狀況不佳的任務。此取代取決於 maximumPercentdesiredCount 服務定義參數。如果任務標記為運作狀態不佳,服務排程器會先啟動替代任務。然後,會發生下列情況。

  • 如果取代任務的運作狀態為 HEALTHY,則服務排程器會停止運作狀態不佳的任務

  • 如果替代任務的運作狀態為 UNHEALTHY,排程器會停止運作狀態不佳的替代任務或現有運作狀態不佳的任務,以使任務總計數等於 desiredCount

如果 maximumPercent 參數限制排程器先啟動替代任務,排程器會隨機停止運作狀態不佳的任務,以釋放容量,然後啟動替代任務。開始和停止程序會繼續進行,直到所有運作狀態不佳的任務都會取代為運作狀態良好的 一旦已取代了所有運作狀態不佳的任務,而且只執行運作狀態良好的任務,如果任務總數超過 desiredCount,則運作良好的任務會隨機停止,直到任務總計數等於 desiredCount 為止。如需有關 maximumPercentdesiredCount 的詳細資訊,請參閱服務定義參數

所需的任務計數

要在服務中放置並持續執行的任務的執行個體數量。

如果您想要暫時停止服務,請將此值設為 0。然後,當您準備好啟動服務時,請使用原始值更新服務。

您可以變更滾動部署和藍/綠部署的此參數。

啟用受管標籤

決定是否為服務中的任務開啟 Amazon ECS 受管標籤。

只有更新後啟動的任務才會反映更新。若要更新所有任務上的標籤,請使用強制部署選項。

您可以變更滾動部署和藍/綠部署的此參數。

啟用 ECS Exec

決定是否使用 Amazon ECS Exec。

如果您不想覆寫建立服務時設定的值,您可以在執行此動作時將此值設定為 null。

您可以針對滾動部署變更此參數。

運作狀態檢查寬限期

Amazon ECS 服務排程器在任務首次啟動後忽略運作狀態不佳 Elastic Load Balancing、VPC Lattice 和容器運作狀態檢查的期間,以秒為單位。如果您未指定運作狀態檢查寬限期值,0則會使用 的預設值。如果您不使用任何運作狀態檢查,則 healthCheckGracePeriodSeconds 未使用。

如果您服務的任務需要一些時間來啟動和回應運作狀態檢查,您可以指定最多 2,147,483,647 秒 (約 69 年) 的運作狀態檢查寬限期。在此期間,Amazon ECS 服務排程器會忽略運作狀態檢查情形。此寬限期可防止服務排程器將任務標示為狀況不良並在其來得及標示前加以停止。

您可以針對滾動部署和藍/綠部署變更此參數。

負載平衡器

當您更新負載平衡器時,必須使用服務連結角色。

Elastic Load Balancing 負載平衡器物件的清單。它包含負載平衡器名稱、容器名稱,以及要從負載平衡器存取的容器連接埠。容器名稱與容器定義中顯示的相同。

Amazon ECS 不會自動更新與 Elastic Load Balancing 負載平衡器或 Amazon ECS 容器執行個體相關聯的安全群組。

當您新增、更新或移除負載平衡器組態時,Amazon ECS 會使用更新的 Elastic Load Balancing 組態啟動新任務,然後在新任務執行時停止舊任務。

對於使用滾動更新的服務,您可以新增、更新或移除 Elastic Load Balancing 目標群組。您可以從單一目標群組更新至多個目標群組,以及從多個目標群組更新至單一目標群組。

對於使用藍/綠部署的服務,您可以透過 CreateDeployment CodeDeploy 使用 來更新 Elastic Load Balancing 目標群組。請注意,藍/綠部署不支援多個目標群組。如需詳細資訊,請參閱使用 服務註冊多個目標群組

對於使用外部部署控制器的服務,您可以使用 CreateTaskSet 新增、更新或移除負載平衡器。請注意,外部部署不支援多個目標群組。如需詳細資訊,請參閱使用 服務註冊多個目標群組

傳遞空清單以移除負載平衡器。

您可以針對滾動部署變更此參數。

網路組態

服務網路組態。

您可以針對滾動部署變更此參數。

置放限制條件

要更新要使用之服務的任務置放限制物件陣列。如果未指定任何值,則服務的現有置放限制將保持不變。如果指定此值,則會覆寫為服務定義的任何現有置放限制條件。若要移除所有現有的置放限制,請指定空陣列。

您最多可以為每項任務指定 10 項限制條件。此限制包含任務定義中的限制條件以及執行時間指定的限制條件。

您可以變更滾動部署和藍/綠部署的此參數。

置放策略

要更新要使用之服務的任務置放策略物件。如果未指定任何值,則服務的現有置放策略將保持不變。如果指定此值,則會覆寫為服務定義的現有置放策略。若要移除現有的置放策略,請指定空物件。

您可以變更滾動部署和藍/綠部署的此參數。

平台版本

您服務執行的 Fargate 平台版本。

使用 Linux 平台版本的服務無法更新為使用 Windows 平台版本,反之亦然。

您可以針對滾動部署變更此參數。

傳播標籤

決定要將標籤從任務定義或服務傳播到任務。如果沒有指定值,則不會傳播標籤。

只有更新後啟動的任務才會反映更新。若要更新所有任務上的標籤,請將 forceNewDeployment設定為 true,以便 Amazon ECS 使用更新的標籤啟動新任務。

您可以變更滾動部署和藍/綠部署的此參數。

Service Connect 組態

Amazon ECS Service Connect 的組態。此參數決定服務如何連線到應用程式中的其他 服務。

您可以針對滾動部署變更此參數。

服務登錄檔

當您更新服務登錄檔時,必須使用服務連結角色。

要指派給此服務之服務探索登錄檔的詳細資訊。如需詳細資訊,請參閱服務探索

當您新增、更新或移除服務登錄檔組態時,Amazon ECS 會使用更新的服務登錄檔組態啟動新任務,然後在新任務執行時停止舊任務。

傳遞空清單以移除服務登錄檔。

您可以針對滾動部署變更此參數。

任務定義

用於服務的任務定義和修訂。

如果您變更任務定義中容器使用的連接埠,您可能需要更新容器執行個體的安全群組,才能使用更新的連接埠。

如果您為服務更新任務定義,則在負載平衡器組態中指定的容器名稱和容器連接埠必須保留在任務定義中。

容器映像提取行為會因啟動類型而有所不同。如需詳細資訊,請參閱下列其中一個項目:

您可以針對滾動部署變更此參數。

磁碟區組態

磁碟區的詳細資訊,即 configuredAtLaunch。當設定為 true 時,此參數會在部署期間設定 Amazon EBS 任務連接。您可以在 ServiceManagedEBSVolumeConfiguration 中設定大小、volumeType、IOPS、輸送量、快照和加密。name 磁碟區的 必須符合name任務定義的 。如果設定為 null,則不會觸發新的部署。否則,如果此組態與現有的組態不同,則會觸發新的部署。

您可以針對滾動部署變更此參數。

VPC Lattice 組態

您服務的 VPC Lattice 組態。這會定義您的服務如何整合 VPC Lattice service-to-service通訊。

您可以針對滾動部署變更此參數。

AWS CDK 考量事項

AWS CDK 不會追蹤資源狀態。它不知道您是建立還是更新服務。客戶應該使用逃生艙直接存取 ecs Service L1 建構。

如需逃生艙的相關資訊,請參閱《 AWS Cloud Development Kit (AWS CDK) v2 開發人員指南》中的從 AWS 建構程式庫自訂建構

若要將現有服務遷移至 ecs.Service 建構,請執行下列動作:

  1. 使用逃生艙存取 Service L1 建構。

  2. Service L1 建構中手動設定下列屬性。

    如果您的服務使用 Amazon EC2 容量:

    • daemon?

    • placementConstraints?

    • placementStrategies?

    • 如果您使用 awsvpc 網路模式,則需要設定 vpcSubnets?securityGroups? 建構。

    如果您的服務使用 Fargate:

    • FargatePlatformVersion

    • vpcSubnets?securityGroups? 建構。

  3. 設定 launchType,如下所示:

    const cfnEcsService = service.node.findChild('Service') as ecs.CfnService; cfnEcsService.launchType = "FARGATE";

若要從啟動類型遷移至容量提供者,請執行下列動作:

  1. 使用逃生艙存取 Service L1 建構。

  2. 新增 capacityProviderStrategies? 建構。

  3. 部署服務。