適用於 Fargate 啟動類型的 Amazon ECS 叢集 - Amazon Elastic Container Service

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

適用於 Fargate 啟動類型的 Amazon ECS 叢集

Amazon ECS 容量提供者會管理叢集中任務的基礎設施擴展。每個叢集可以有一或多個容量提供者,以及選用的容量提供者策略。容量提供者策略會決定任務在叢集的容量提供者之間分散的方式。當您執行獨立任務或建立服務時,可以使用叢集的預設容量提供者策略,也可以使用能覆寫預設值的容量提供者策略。

在上執行工作時 AWS Fargate,不需要建立或管理容量。您只需要將下列任何預先定義的容量提供者與叢集建立關聯:

  • Fargate

  • Fargate Spot

使用 AWS Fargate 容量供應商上的 Amazon ECS,您可以將 Fargate 和 Fargate 競價型容量與 Amazon ECS 任務一起使用。

透過 Fargate Spot,您能以折扣價 (與 Fargate 價格相比) 執行可接受中斷的 Amazon ECS 任務。Fargate Spot 在備用運算容量上執行任務。當 AWS 需要恢復容量時,您的任務會在兩分鐘的警告中斷。Fargate 競價型僅支援平台 1.3.0 或更新版本上具有 X86_64 架構的 Linux 工作。

當使用 Fargate 和 Fargate Spot 容量提供者的任務停止時,任務狀態變更事件會傳送至 Amazon。 EventBridge停止原因說明其原因。如需詳細資訊,請參閱 Amazon ECS 任務狀態變更事件

叢集可以同時包含 Fargate 和 Auto Scaling 群組容量提供者。不過,容量提供者策略只能包含 Fargate 或 Auto Scaling 群組容量提供者,不能同時包含兩者。如需詳細資訊,請參閱 Auto Scaling 群組容量提供者

使用容量提供者時,請考慮下列事項:

  • 您必須先將容量提供者與叢集建立關聯,才能將其與容量提供者策略產生關聯。

  • 您最多可以為容量提供者策略指定 20 個容量提供者。

  • 您無法將使用 Auto Scaling 群組容量提供者的服務更新為使用 Fargate 容量提供者。反之亦然。

  • 在容量提供者策略中,如果沒有在主控台中對容量提供者指定 weight 值,則會使用預設值 1。如果使用 API 或 AWS CLI,則會使用的0預設值。

  • 在容量提供者策略中指定多個容量提供者時,至少有一個容量提供者必須具有大於零的權重值。任何重量為零的容量提供者都不會用於放置工作。如果您在策略中指定多個容量提供者權重均為零,則使用容量提供者策略的任何 RunTaskCreateService 動作都會失敗。

  • 在容量提供者策略中,只有一個容量提供者已定義基準值。如果未指定基準值,則會使用預設值零。

  • 叢集可以同時包含 Auto Scaling 群組容量提供者以及 Fargate 容量提供者。不過,容量提供者策略只能包含 Auto Scaling 群組或 Fargate 容量提供者,不能同時包含兩者。

  • 叢集可以同時包含使用容量提供者和啟動類型的各種服務和獨立任務。服務可以更新為使用容量提供者策略,而非啟動類型。不過,若要執行此操作,您必須強制執行新部署。

Fargate 現貨終止通知

在需求極高期間,Fargate Spot 容量可能無法使用。這可能會導致 Fargate Spot 任務延遲。發生這種情況時,Amazon ECS 服務會重試啟動任務,直到所需的容量可用為止。Fargate 不會以隨需容量取代 Spot 容量。

當使用 Fargate Spot 容量的任務因 Spot 中斷而停止時,在任務停止之前會傳送兩分鐘的警告。警告會以任務狀態變更事件的形式傳送至 Amazon, EventBridge 並以 SIGTERM 訊號傳送至執行中的任務。如果您使用 Fargate Spot 作為服務的一部分,在此情況中,服務排程器會收到中斷訊號,並嘗試在容量可用時啟動其他任務。只有一項任務的服務會中斷,直到容量可用為止。如需正常關機的詳細資訊,請參閱使用 ECS 正常關機

若要確保您的容器在任務停止之前正常結束,可設定下列項目:

  • 您可以在任務所使用的容器定義中指定 120 秒數的 stopTimeout 值 (或更少)。預設 stopTimeout 值為 30 秒。您可以指定更長的 stopTimeout 值,讓您從收到任務狀態變更事件到容器強制停止之間有更多時間。如需詳細資訊,請參閱 容器逾時

  • SIGTERM 信號必須從容器內接收,以執行任何清理動作。無法處理此信號將導致任務在設定 stopTimeout 後收到 SIGKILL 信號,甚至可能導致資料遺失或毀損。

以下是任務狀態變更事件的程式碼片段。此程式碼片段顯示停止原因和 Fargate Spot 中斷的停止程式碼。

{ "version": "0", "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab", "detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "111122223333", "resources": [ "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef" ], "detail": { "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default", "createdAt": "2016-12-06T16:41:05.702Z", "desiredStatus": "STOPPED", "lastStatus": "RUNNING", "stoppedReason": "Your Spot Task was interrupted.", "stopCode": "SpotInterruption", "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE", ... } }

以下是用來建立 Amazon ECS 任務狀態變更事件 EventBridge 規則的事件模式。您可以選擇在 detail 欄位中指定叢集。若指定,則表示您會收到該叢集的任務狀態變更事件。如需詳細資訊,請參Amazon EventBridge 使用者指南中的建立 EventBridge 規則

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "clusterArn": [ "arn:aws:ecs:us-west-2:111122223333:cluster/default" ] } }