本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Fargate 啟動類型的 Amazon ECS叢集
Amazon ECS容量提供者會管理叢集中任務的基礎設施擴展。每個叢集可以有一或多個容量提供者,以及選用的容量提供者策略。容量提供者策略會決定任務在叢集的容量提供者之間分散的方式。當您執行獨立任務或建立服務時,可以使用叢集的預設容量提供者策略,也可以使用能覆寫預設值的容量提供者策略。
當您在 上執行任務時 AWS Fargate,您不需要建立或管理容量。您只需要將下列任何預先定義的容量提供者與叢集建立關聯:
-
Fargate
-
Fargate Spot
透過 Amazon ECS on AWS Fargate capacity provider,您可以將 Fargate 和 Fargate Spot 容量與 Amazon ECS任務搭配使用。
使用 Fargate Spot,您可以比 Fargate 價格折價的速率執行可容中斷的 Amazon ECS任務。Fargate Spot 在備用運算容量上執行任務。當 AWS 需要恢復容量時,您的任務會受到兩分鐘警告。
當使用 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
使用 的預設值。 -
在容量提供者策略中指定多個容量提供者時,至少有一個容量提供者必須具有大於零的權重值。任何權重為零的容量提供者都不會用來放置任務。如果您在策略中指定多個容量提供者權重均為零,則使用容量提供者策略的任何
RunTask
或CreateService
動作都會失敗。 -
在容量提供者策略中,只有一個容量提供者已定義基準值。如果未指定基準值,則會使用預設值零。
-
叢集可以同時包含 Auto Scaling 群組容量提供者以及 Fargate 容量提供者。不過,容量提供者策略只能包含 Auto Scaling 群組或 Fargate 容量提供者,不能同時包含兩者。
-
叢集可以同時包含使用容量提供者和啟動類型的各種服務和獨立任務。服務可以更新為使用容量提供者策略,而非啟動類型。不過,若要執行此操作,您必須強制執行新部署。
Fargate Spot 終止通知
在需求極高期間,Fargate Spot 容量可能無法使用。這可能會導致 Fargate Spot 任務延遲。發生這種情況時,Amazon ECS服務會重試啟動任務,直到所需的容量變為可用為止。Fargate 不會以隨需容量取代 Spot 容量。
當使用 Fargate Spot 容量的任務因 Spot 中斷而停止時,在任務停止之前會傳送兩分鐘的警告。警告會以任務狀態變更事件形式傳送至 Amazon, EventBridge 並以SIGTERM訊號形式傳送至執行中的任務。如果您使用 Fargate Spot 作為服務的一部分,在此情況中,服務排程器會收到中斷訊號,並嘗試在容量可用時啟動其他任務。只有一項任務的服務會中斷,直到容量可用為止。如需正常關機的詳細資訊,請參閱使用 的正常關機ECS
若要確保您的容器在任務停止之前正常結束,可設定下列項目:
-
您可以在任務所使用的容器定義中指定
120
秒數的stopTimeout
值 (或更少)。預設stopTimeout
值為 30 秒。您可以指定更長的stopTimeout
值,讓您從收到任務狀態變更事件到容器強制停止之間有更多時間。如需詳細資訊,請參閱容器逾時。 -
SIGTERM 訊號必須從容器內接收,才能執行任何清除動作。未處理此訊號會導致任務在設定 後收到SIGKILL訊號,
stopTimeout
並可能導致資料遺失或損毀。
以下是任務狀態變更事件的程式碼片段。此程式碼片段顯示停止原因和 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
" ] } }