Fargate 啟動類型的 Amazon ECS任務定義差異 - Amazon Elastic Container Service

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

Fargate 啟動類型的 Amazon ECS任務定義差異

若要使用 Fargate,您必須設定任務定義以使用 Fargate 啟動類型。使用 Fargate 時還有其他考量事項。

任務定義參數

使用 Fargate 啟動類型的任務不支援所有可用的 Amazon ECS任務定義參數。有些參數完全不予以支援,而其他參數對 Fargate 任務會有不同的行為。

下列任務定義參數在 Fargate 任務中無效:

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • gpu

  • ipcMode

  • links

  • placementConstraints

  • privileged

  • maxSwap

  • swappiness

下列任務定義參數在 Fargate 任務中有效,但應注意其限制:

  • linuxParameters - 當指定套用於容器的特定於 Linux 的選項時,對於 capabilities,您可以新增的唯一功能是 CAP_SYS_PTRACE。不支援 devicessharedMemorySizetmpfs 參數。如需詳細資訊,請參閱Linux 參數

  • volumes - Fargate 任務僅支援繫結掛載主機磁碟區,所以不支援 dockerVolumeConfiguration 參數。如需詳細資訊,請參閱磁碟區

  • cpu - 針對 上的 Windows 容器 AWS Fargate,該值不能小於 1 v CPU。

  • networkConfiguration - Fargate 任務一律使用 awsvpc netwok 模式。

為了確保您的任務定義通過驗證可與 Fargate 搭配使用,您可以在登錄任務定義時指定下列項目:

  • 在 中 AWS Management Console,針對需要相容性欄位,指定 FARGATE

  • 在 中 AWS CLI,指定 --requires-compatibilities選項。

  • 在 Amazon ECS 中API,指定 requiresCompatibilities旗標。

作業系統和架構

當您為 設定任務和容器定義時 AWS Fargate,您必須指定容器執行的作業系統。支援下列作業系統 AWS Fargate:

  • Amazon Linux 2

    注意

    Linux 容器僅使用來自主機作業系統的核心和核心組態。例如,核心組態包括 sysctl 系統控制項。Linux 容器映像可以從包含任何 Linux 發行版本的檔案和程式的基礎映像製作。如果CPU架構相符,您可以從任何作業系統上的任何 Linux 容器映像執行容器。

  • Windows Server 2019 Full

  • Windows Server 2019 Core

  • Windows Server 2022 Full

  • Windows Server 2022 Core

當您在 上執行 Windows 容器時 AWS Fargate,您必須具有 X86_64 CPU架構。

當您在 上執行 Linux 容器時 AWS Fargate,您可以使用 X86_64 CPU架構或 ARM型應用程式的ARM64架構。如需詳細資訊,請參閱適用於 64 位元ARM工作負載的 Amazon ECS任務定義

任務CPU和記憶體

的 Amazon ECS任務定義 AWS Fargate 會要求您在任務層級指定 CPU和 記憶體。雖然您也可以在容器層級為 Fargate 任務指定 CPU和 記憶體,但這是選用的。只要在任務層級指定這些資源,就可以滿足大多數使用案例。下表顯示任務層級CPU和記憶體的有效組合。您可以在任務定義中將記憶體值指定為 MiB 或 GB 的字串。例如,您可以指定 MiB 3072 或 GB 3 GB中的記憶體值。您可以將JSON檔案中CPU的值指定為單位CPU或虛擬 CPUs() 的字串vCPUs。例如,您可以指定單位或 1024CPU1 vCPU中的CPU值vCPUs。

CPU 值 記憶體數值 支援的作業系統 AWS Fargate
256 (.25 v CPU) 512 MiB、1 GB、2 GB Linux
512 (.5 v CPU) 1 GB、2 GB、3 GB、4 GB Linux
1024 (1 v CPU) 2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB Linux、Windows
2048 (2 v CPU) 介於 4 GB 與 16 GB 之間,以 1 GB 為單位遞增 Linux、Windows
4096 (4 v CPU) 介於 8 GB 與 30 GB 之間,以 1 GB 為單位遞增 Linux、Windows
8192 (8 v CPU)
注意

此選項需要 Linux 平台 1.4.0 或更新版本。

介於 16 GB 與 60 GB 之間,以 4 GB 為單位遞增 Linux
16384 (16v CPU)
注意

此選項需要 Linux 平台 1.4.0 或更新版本。

介於 32 GB 與 120 GB 之間,以 8 GB 為單位遞增 Linux

任務聯網

的 Amazon ECS任務 AWS Fargate 需要awsvpc網路模式,為每個任務提供彈性網路介面。當您使用此網路模式執行任務或建立服務時,必須指定一或多個子網路來連接網路界面,以及指定一或多個安全群組來套用至網路界面。

如果使用公有子網路,請決定是否提供網路界面的公有 IP 地址。若要在公有子網路中執行 Fargate 任務以提取容器映像,需將公有 IP 地址指派給任務的彈性網路介面,並將路由傳送至網際網路,或將請求路由至網際網路的NAT閘道。若要讓私有子網路中的 Fargate 任務提取容器映像,您需要子網路中的NAT閘道,才能將請求路由至網際網路。當您在 Amazon 中託管容器映像時ECR,您可以將 Amazon 設定為ECR使用介面VPC端點。在此情況下,任務的私有IPv4地址會用於影像提取。如需 Amazon ECR 介面端點的詳細資訊,請參閱Amazon Elastic Container Registry 使用者指南中的 Amazon ECR 介面VPC端點 (AWS PrivateLink)

以下是 Fargate 服務的 networkConfiguration區段範例:

"networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-12345678" ], "subnets": [ "subnet-12345678" ] } }

任務資源限制

Linux 容器的 Amazon ECS任務定義 AWS Fargate 支援 ulimits 參數來定義要為容器設定的資源限制。

Windows on 的 Amazon ECS任務定義 AWS Fargate 不支援 ulimits 參數來定義要為容器設定的資源限制。

託管在 Fargate 上的 Amazon ECS任務會使用作業系統設定的預設資源限制值,但nofile資源限制參數除外。nofile 資源限制會對容器可使用的開放檔案數量設限。在 Fargate 上,預設的 nofile 軟限制為 65535,硬限制為 65535。您可以將兩個限制的值設定為 1048576

以下是範例任務定義程式碼片段,示範如何定義已加倍的自訂 nofile 限制:

"ulimits": [ { "name": "nofile", "softLimit": 2048, "hardLimit": 8192 } ]

如需可調整之其他資源限制的詳細資訊,請參閱 資源限制

日誌

事件記錄

Amazon 會將所採取的動作ECS記錄到 EventBridge。您可以使用 的 Amazon ECS事件 EventBridge 來接收有關 Amazon ECS叢集、服務和任務目前狀態的近乎即時通知。此外,您可以自動執行動作來回應這些事件。如需詳細資訊,請參閱使用 自動回應 Amazon ECS錯誤 EventBridge

任務生命週期日誌記錄

在 Fargate 上執行的任務會發佈時間戳記,以透過任務生命週期的狀態追蹤任務。您可以在 和 中查看任務詳細資訊中的時間戳記, AWS Management Console 方法是在 AWS CLI 和 中描述任務SDKs。例如,您可以使用時間戳記來評估任務下載容器映像所花費的時間,並決定是否應最佳化容器映像大小,或使用可搜尋OCI索引。如需有關容器映像實務的詳細資訊,請參閱 Amazon ECS容器映像的最佳實務

應用程式日誌記錄

的 Amazon ECS任務定義 AWS Fargate 支援awsfirelens日誌組態的 splunkawslogs和 日誌驅動程式。

awslogs 日誌驅動程式會設定 Fargate 任務,以將日誌資訊傳送至 Amazon CloudWatch Logs。以下顯示任務定義片段,其中設定了 awslogs 日誌驅動程式:

"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }

如需在任務定義中使用awslogs日誌驅動程式將容器日誌傳送至 CloudWatch 日誌的詳細資訊,請參閱 將 Amazon ECS日誌傳送至 CloudWatch

如需任務定義中 awsfirelens 日誌驅動程式的詳細資訊,請參閱 將 Amazon ECS日誌傳送至 AWS 服務或 AWS Partner

如需在任務定義中使用 splunk 日誌驅動程式的詳細資訊,請參閱 splunk 日誌驅動程式

任務儲存體

對於在 Fargate 上託管的 Amazon ECS任務,支援下列儲存類型:

使用 Seekable OCI(SOCI) 延遲載入容器映像

使用 Linux 平台版本的 Fargate 上的 Amazon ECS任務1.4.0可以使用 Seekable OCI(SOCI) 來協助更快速地開始任務。使用 SOCI時,容器只會在映像提取上花幾秒鐘的時間,然後才能啟動,為在背景下載映像時的環境設定和應用程式實例化提供時間。這稱為延遲載入。當 Fargate 啟動 Amazon ECS任務時,Fargate 會自動偵測任務中是否有映像的SOCI索引存在,並啟動容器,而無需等待下載整個映像。

對於在沒有SOCI索引的情況下執行的容器,容器映像會在容器啟動之前完全下載。此行為在 Fargate 的所有其他平台版本和 Amazon EC2執行個體上的 Amazon ECS最佳化AMI時都相同。

可搜尋的OCI索引

Seekable OCI(SOCI) 是一種由 開發的開放原始碼技術 AWS ,可透過短暫載入容器映像來更快速地啟動容器。SOCI 在現有容器映像中建立檔案索引 (SOCI 索引) 即可運作。此索引有助於更快地啟動容器,提供在下載整個映像之前從容器映像中擷取個別檔案的功能。SOCI 索引必須作為成品存放在與容器登錄檔中的映像相同的儲存庫中。您只能使用來自信任來源的SOCI索引,因為索引是映像內容的權威來源。如需詳細資訊,請參閱推出可尋求OCI的延遲載入容器映像

考量事項

如果您想要 Fargate 使用SOCI索引來短暫載入任務中的容器映像,請考慮下列事項:

  • 只有在 Linux 平台版本上執行的任務1.4.0才能使用SOCI索引。不支援在 Fargate 上執行 Windows 容器的任務。

  • 在 上執行的任務 X86_64 或 ARM64 CPU 支援 架構。

  • 任務定義中的容器映像必須與映像在相同的容器登錄檔中具有SOCI索引。

  • 任務定義中的容器映像均須儲存在相容的映像登錄中。以下列出相容的登錄:

    • Amazon ECR私有登錄。

  • 只有使用 的容器映像 gzip 支援壓縮或 未壓縮。使用的容器映像 zstd 不支援壓縮。

  • 建議您嘗試在容器映像大於 時延遲載入 250 MiB 壓縮大小。您不太可能看到載入較小映像的時間減少。

  • 由於延遲載入可能會變更任務開始所需的時間,因此您可能需要變更各種逾時,例如 Elastic Load Balancing 的運作狀態檢查寬限期。

  • 如果您想要防止容器映像延遲載入,請從容器登錄檔中刪除SOCI索引。如果任務中的容器映像不符合其中一項考量事項,則會透過預設方法下載該容器映像。

建立可搜尋OCI索引

若要讓容器映像延遲載入,它需要建立SOCI索引 (中繼資料檔案),並沿著容器映像側邊存放在容器映像儲存庫中。若要建立和推送SOCI索引,您可以使用 上的開放原始碼社群快照CLI工具 GitHub。或者,您可以部署 CloudFormation AWS SOCI Index Builder。這是一個無伺服器解決方案,當容器映像推送至 Amazon 時, 會自動建立並推送SOCI索引ECR。如需解決方案和安裝步驟的詳細資訊,請參閱 上的CloudFormation AWS SOCI索引建置器 GitHub。Index CloudFormation AWS SOCI Builder 是自動化 入門的一種方法SOCI,而開放原始碼社群工具在索引產生方面具有更大的靈活性,並且能夠在您的持續整合和持續交付 (CI/CD) 管道中整合索引產生。

注意

若要為映像建立SOCI索引,映像必須存在於 containerd 執行 的電腦上的影像存放區soci-snapshotter。如果映像位於 Docker 映像存放區,找不到映像。

驗證任務是否使用延遲載入

若要驗證任務是否使用 短暫載入SOCI,請從任務內部檢查任務中繼資料端點。當您查詢任務中繼資料端點版本 4 時,您從中查詢的容器的預設路徑中有一個 Snapshotter 欄位。此外,/task 路徑中的每個容器都有 Snapshotter 欄位。此欄位的預設值為 overlayfssoci如果使用 SOCI ,則此欄位會設定為 。