本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Fargate 啟動類型的 Amazon ECS 集群
Amazon ECS 容量供應商會針對叢集中的任務管理基礎設施的擴展。每個叢集可以有一或多個容量提供者,以及選用的容量提供者策略。容量提供者策略會決定任務在叢集的容量提供者之間分散的方式。當您執行獨立任務或建立服務時,可以使用叢集的預設容量提供者策略,也可以使用能覆寫預設值的容量提供者策略。
在上執行工作時 AWS Fargate,不需要建立或管理容量。您只需要將下列任何預先定義的容量提供者與叢集建立關聯:
-
Fargate
-
Fargate Spot
使用 Amazon ECS 在 AWS Fargate 容量提供商上,您可以將 Fargate 和遠門競價型容量同時用於您的 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 現貨終止通知
在需求極高期間,Fargate Spot 容量可能無法使用。這可能會導致 Fargate Spot 任務延遲。發生這種情況時,Amazon ECS 服務會重試啟動任務,直到所需的容量可用為止。Fargate 不會以隨需容量取代 Spot 容量。
當使用 Fargate Spot 容量的任務因 Spot 中斷而停止時,在任務停止之前會傳送兩分鐘的警告。警告會以任務狀態變更事件的形式傳送至 Amazon, EventBridge 並以SIGTERM訊號傳送至執行中的任務。如果您使用 Fargate Spot 作為服務的一部分,在此情況中,服務排程器會收到中斷訊號,並嘗試在容量可用時啟動其他任務。只有一項任務的服務會中斷,直到容量可用為止。如需有關正常關機的詳細資訊,請
若要確保您的容器在任務停止之前正常結束,可設定下列項目:
-
您可以在任務所使用的容器定義中指定
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
" ] } }