本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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
。不支援devices
、sharedMemorySize
和tmpfs
參數。如需詳細資訊,請參閱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。例如,您可以指定單位或 1024
CPU1 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 平台 |
介於 16 GB 與 60 GB 之間,以 4 GB 為單位遞增 | Linux |
16384 (16v CPU) 注意此選項需要 Linux 平台 |
介於 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
日誌組態的 splunk
、 awslogs
和 日誌驅動程式。
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任務,支援下列儲存類型:
-
Amazon EBS磁碟區為資料密集型容器化工作負載提供符合成本效益、耐用且高效能的區塊式儲存。如需詳細資訊,請參閱搭配 Amazon 使用 Amazon EBS磁碟區 ECS。
-
持久性儲存的 Amazon EFS磁碟區。如需詳細資訊,請參閱搭配 Amazon 使用 Amazon EFS磁碟區 ECS。
-
用於暫時性儲存的繫結掛載。如需詳細資訊,請參閱搭配 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工具
注意
若要為映像建立SOCI索引,映像必須存在於 containerd 執行 的電腦上的影像存放區soci-snapshotter
。如果映像位於 Docker 映像存放區,找不到映像。
驗證任務是否使用延遲載入
若要驗證任務是否使用 短暫載入SOCI,請從任務內部檢查任務中繼資料端點。當您查詢任務中繼資料端點版本 4 時,您從中查詢的容器的預設路徑中有一個 Snapshotter
欄位。此外,/task
路徑中的每個容器都有 Snapshotter
欄位。此欄位的預設值為 overlayfs
,soci
如果使用 SOCI ,則此欄位會設定為 。