本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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
- 對於 AWS Fargate 上的 Windows 容器,值不可少於 1 個 vCPU。 -
networkConfiguration
- Fargate 任務一律使用awsvpc
網路模式。
為了確保您的任務定義通過驗證可與 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 和記憶體。只要在任務層級指定這些資源,就可以滿足大多數使用案例。下表顯示有效的任務層級 CPU 和記憶體組合。您可以在任務定義中將記憶體值指定為 MiB 或 GB 的字串。例如,您可以指定 MiB 或 3 GB
GB 3072
的記憶體值。您可以將 JSON 檔案中的 CPU 值指定為 CPU 單位或虛擬 CPUsvCPUs) 的字串。例如,您可以指定 CPU 值,如 1024
CPU 單位或 1 vCPU
vCPUs
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 平台 |
介於 16 GB 與 60 GB 之間,以 4 GB 為單位遞增 | Linux |
16384 (16vCPU) 注意此選項需要 Linux 平台 |
介於 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
軟限制為 65535
,硬限制為 65535
。您可以將兩個限制的值設定為 1048576
。
以下是範例任務定義程式碼片段,示範如何定義已加倍的自訂 nofile
限制:
"ulimits": [
{
"name": "nofile",
"softLimit": 2048
,
"hardLimit": 8192
}
]
如需可調整之其他資源限制的詳細資訊,請參閱 資源限制。
日誌
事件記錄
Amazon ECS 記錄 EventBridge 採取的動作。您可以使用適用於 EventBridge 的 Amazon ECS 事件,接收有關您的 Amazon ECS 叢集、服務和任務目前狀態的近乎即時通知。此外,您可以自動執行動作來回應這些事件。如需詳細資訊,請參閱使用 EventBridge 自動化對 Amazon ECS 錯誤的回應。
任務生命週期日誌記錄
在 Fargate 上執行的任務會發佈時間戳記,以透過任務生命週期的狀態追蹤任務。您可以在 和 中的任務詳細資訊中查看時間戳記, AWS Management Console 方法是在 AWS CLI 和 SDKs 中描述任務。例如,您可以使用時間戳記來評估任務下載容器映像所花費的時間,並決定是否應最佳化容器映像大小,或使用 Seekable OCI 索引。如需有關容器映像實務的詳細資訊,請參閱 Amazon ECS 容器映像的最佳實務。
應用程式日誌記錄
AWS Fargate 的 Amazon ECS 任務定義支援日誌組態的 awslogs
、splunk
和 awsfirelens
日誌驅動程式。
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 Logs 的詳細資訊,請參閱將 Amazon ECS 日誌傳送至 CloudWatch 。
如需任務定義中 awsfirelens
日誌驅動程式的詳細資訊,請參閱 將 Amazon ECS 日誌傳送至 AWS 服務或 AWS Partner。
如需在任務定義中使用 splunk
日誌驅動程式的詳細資訊,請參閱 splunk 日誌驅動程式。
任務儲存體
對於 Fargate 上託管的 Amazon ECS 任務,支援下列儲存類型:
-
Amazon EBS 磁碟區為資料密集型容器化工作負載提供經濟實惠、耐用、高效能的區塊儲存。如需詳細資訊,請參閱搭配 Amazon ECS 使用 Amazon EBS 磁碟區。
-
適用於持久性儲存的 Amazon EFS 磁碟區。如需詳細資訊,請參閱搭配 Amazon ECS 使用 Amazon EFS 磁碟區。
-
用於暫時性儲存的繫結掛載。如需詳細資訊,請參閱搭配 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 (SOCI) 是一種由 開發的開放原始碼技術 AWS ,可透過延遲載入容器映像來更快速地啟動容器。SOCI 的運作原理是在現有容器映像中建立檔案索引 (SOCI 索引)。此索引有助於更快地啟動容器,提供在下載整個映像之前從容器映像中擷取個別檔案的功能。SOCI 索引必須以成品的形式儲存在與容器登錄中的映像相同的儲存庫中。您應該只使用來自信任來源的 SOCI 索引,因為索引是映像內容的權威來源。如需詳細資訊,請參引入 Seekable OCI 用於延遲載入容器映像
希望使用 SOCI 的客戶只能使用 SOCI 索引資訊清單 v2。先前在 Fargate 上使用 SOCI 的現有客戶可以繼續使用 SOCI 索引資訊清單 v1,但我們強烈建議這些客戶遷移至 SOCI 索引資訊清單 v2。SOCI 索引資訊清單 v2 會在容器映像及其 SOCI 索引之間建立明確關係,以確保一致的部署。
考量事項
如果您希望 Fargate 使用 SOCI 索引在任務中延遲載入容器映像,請考慮以下幾點:
-
只有在 Linux 平台版本
1.4.0
上執行的任務才能使用 SOCI 索引。不支援在 Fargate 上執行 Windows 容器的任務。 -
支援在 X86_64 或 ARM64 CPU 架構上執行的任務。
-
任務定義中的容器映像均須儲存在相容的映像登錄中。以下列出相容的登錄:
-
Amazon ECR 私有登錄檔。
-
-
僅支援使用gzip壓縮或未壓縮的容器映像。不支援使用 zstd 壓縮的容器映像。
-
對於 SOCI 索引資訊清單 v2,產生 SOCI 索引資訊清單會修改容器映像資訊清單,因為我們新增 SOCI 索引的註釋。這會導致新的容器映像摘要。容器映像檔案系統層的內容不會變更。
-
對於 SOCI 索引資訊清單 v2,當容器映像已存放在容器映像儲存庫中時,在產生 SOCI 索引之後,您需要重新啟動容器映像。重新推送容器映像不會因為複製檔案系統層而增加儲存成本,只會上傳新的資訊清單檔案。
-
我們建議您嘗試延遲載入大於 250 MiB 壓縮大小的容器映像。您不太可能看到載入較小映像的時間減少。
-
由於延遲載入可能會變更任務開始所需的時間,因此您可能需要變更各種逾時,例如 Elastic Load Balancing 的運作狀態檢查寬限期。
-
如果您想要防止容器映像載入延遲,則需要在沒有連接 SOCI 索引的情況下重新啟動容器映像。
建立 Seekable OCI 索引
若要延遲載入容器映像,它需要建立 SOCI 索引 (中繼資料檔案),並與容器映像一起存放在容器映像儲存庫中。若要建立和推送 SOCI 索引,您可以使用 GitHub 上的開放原始碼 soci-snapshotter CLI 工具
注意
若要為映像建立 SOCI 索引,映像必須存在於執行 soci-snapshotter
的電腦上的 containerd 映像存放區中。如果映像位於 Docker 映像存放區中,則無法找到該映像。
驗證任務是否使用延遲載入
若要驗證任務是否使用 SOCI 延遲載入,請從任務內部檢查任務中繼資料端點。當您查詢任務中繼資料端點版本 4 時,您從中查詢的容器的預設路徑中有一個 Snapshotter
欄位。此外,/task
路徑中的每個容器都有 Snapshotter
欄位。此欄位的預設值為 overlayfs
,如果使用 SOCI,則此欄位會設定為 soci
。若要驗證容器映像是否已連接 SOCI 索引資訊清單 v2,您可以使用 從 Amazon ECR 擷取映像索引 AWS CLI。
IMAGE_REPOSITORY=r IMAGE_TAG=latest aws ecr batch-get-image \ --repository-name=$IMAGE_REPOSITORY \ --image-ids imageTag=$IMAGE_TAG \ --query 'images[0].imageManifest' --output text | jq -r '.manifests[] | select(.artifactType=="application/vnd.amazon.soci.index.v2+json")'
若要驗證容器映像是否已連接 SOCI 索引資訊清單 v1,您可以使用 OCI 推薦者 API。
ACCOUNT_ID=111222333444 AWS_REGION=us-east-1 IMAGE_REPOSITORY=nginx-demo IMAGE_TAG=latest IMAGE_DIGEST=$(aws ecr describe-images --repository-name $IMAGE_REPOSITORY --image-ids imageTag=$IMAGE_TAG --query 'imageDetails[0].imageDigest' --output text) ECR_PASSWORD=$(aws ecr get-login-password) curl \ --silent \ --user AWS:$ECR_PASSWORD \ https://$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/v2/$IMAGE_REPOSITORY/referrers/$IMAGE_DIGEST?artifactType=application%2Fvnd.amazon.soci.index.v1%2Bjson | jq -r '.'