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

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

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

為了使用 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 - 對於 AWS Fargate 上的 Windows 容器,值不可少於 1 個 vCPU。

為了確保您的任務定義通過驗證可與 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

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

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

任務 CPU 和記憶體

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

CPU 數值

記憶體數值

AWS Fargate 支援的作業系統

256 (.25 vCPU)

512 MiB、1 GB、2 GB

Linux

512 (.5 vCPU)

1 GB、2 GB、3 GB、4 GB

Linux

1024 (1 vCPU)

2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB

Linux、Windows

2048 (2 vCPU)

介於 4 GB 與 16 GB 之間,以 1 GB 為單位遞增

Linux、Windows

4096 (4 vCPU)

介於 8 GB 與 30 GB 之間,以 1 GB 為單位遞增

Linux、Windows

8192 (8 vCPU)

注意

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

介於 16 GB 與 60 GB 之間,以 4 GB 為單位遞增

Linux

16384 (16vCPU)

注意

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

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

Linux

任務聯網

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

如果使用公有子網路,請決定是否提供網路界面的公有 IP 地址。若要讓公有子網路中的 Fargate 任務提取容器映像,需要透過路由至網際網路,或可將請求路由至網際網路的 NAT 閘道,將公有 IP 地址指派給任務的彈性網路界面。若要讓私有子網路中的 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" ] } }

任務資源限制

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

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

在 Fargate 上託管的 Amazon ECS 任務會使用作業系統設定的預設資源限制值,但是 nofile 資源限制參數除外。nofile 資源限制會對容器可使用的開放檔案數量設限。在 Fargate 上,預設的 nofile 軟限制為 1024,硬限制為 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 和 SDK 中描述工作。例如,您可以使用時間戳記來評估任務下載容器映像所花費的時間,並決定是否應最佳化容器映像大小,或使用 Seekable OCI 索引。如需有關容器映像實務的詳細資訊,請參閱 Amazon ECS 容器映像的最佳實務

應用程式日誌記錄

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

awslogs日誌驅動程式會設定您的 Fargate 任務,以便將日誌資訊傳送到 Amazon 日誌。 CloudWatch 以下顯示任務定義片段,其中設定了 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 平台版本 1.4.0 的 Fargate 上,Amazon ECS 任務可以使用 Seekable OCI (SOCI) 來協助更快地啟動任務。使用 SOCI 時,容器只需耗費幾秒鐘就可以開始提取映像,因此在背景下載影像時,可為環境設定和應用程式執行個體化提供時間。這稱為延遲載入。當 Fargate 啟動 Amazon ECS 任務時,Fargate 會自動偵測任務中映像是否存在 SOCI 索引,並啟動容器,而無需等待整個映像下載完成。

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

Seekable OCI 索引

可搜索的 OCI(SOCI)是一種開源技術,可以通過懶惰地加載容 AWS 器映像來更快地啟動容器。SOCI 的運作原理是在現有容器映像中建立檔案索引 (SOCI 索引)。此索引有助於更快地啟動容器,提供在下載整個映像之前從容器映像中擷取個別檔案的功能。SOCI 索引必須以成品的形式儲存在與容器登錄中的映像相同的儲存庫中。您應該只使用來自信任來源的 SOCI 索引,因為索引是映像內容的權威來源。如需詳細資訊,請參引入 Seekable OCI 用於延遲載入容器映像

考量事項

如果您希望 Fargate 使用 SOCI 索引在任務中延遲載入容器映像,請考慮以下幾點:

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

  • 支援在 X86_64 或 ARM64 CPU 架構上執行的任務。採用 ARM64 架構的 Linux 任務不支援 Fargate Spot 容量提供者。

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

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

    • Amazon ECR 私有登錄檔。

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

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

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

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

建立 Seekable OCI 索引

對於延遲加載容器映像,它需要沿著容器映像一側創建並存儲在容器映像存儲庫中的 SOCI 索引(元數據文件)。要創建和推送 SOCI 索引,您可以使用開源社交快照 CLI 工具。 GitHub或者,您可以部署 CloudFormation AWS SOCI 索引產生器。這是一種無伺服器解決方案,可在將容器映像推送至 Amazon ECR 時自動建立和推送 SOCI 索引。如需有關解決方案和安裝步驟的詳細資訊,請參閱上 GitHub的 CloudFormation AWS SOCI 索引產生器。 CloudFormation AWS SOCI 索引產生器是自動化 SOCI 入門的一種方式,而開放原始碼 soci 工具在索引產生方面具有更大的彈性,以及在持續整合和持續交付 (CI/CD) 管線中整合索引產生的能力。

注意

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

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

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