自助平台
开户/充值

AWS Fargate 完整指南:無伺服器容器運算的核心概念與實戰策略

隨著雲端運算技術的快速發展,容器化技術已經成為現代應用程式部署的主流方式。然而,管理容器所需的基礎設施往往帶來巨大的營運複雜性和成本壓力。正是在這樣的背景下,AWS Fargate 作為一款無伺服器容器運算引擎應運而生,讓開發者能夠專注於應用程式本身,而不必費心管理底層伺服器。本文將全面解析 AWS Fargate 的核心概念、運作原理、使用場景以及最佳實踐,幫助您充分掌握這項技術的優勢與應用方法。

AWS Fargate 完整指南:無伺服器容器運算的核心概念與實戰策略
AWS Fargate 完整指南:無伺服器容器運算的核心概念與實戰策略

一、AWS Fargate 核心概念與優勢

1.1 什麼是 AWS Fargate?

AWS Fargate 是 Amazon Web Services 提供的無伺服器容器計算引擎,它讓開發者能夠執行容器化應用程式,而無需管理底層的伺服器或虛擬機器。簡而言之,AWS Fargate 讓您只需關注應用程式的容器本身,不需要管理運行容器的基礎設施(如 EC2 執行個體、叢集等)

Fargate 與 Amazon Elastic Container Service (ECS) 和 Amazon Elastic Kubernetes Service (EKS) 緊密集成,支援無伺服器容器編排和管理。這種無伺服器方法讓您從選擇伺服器類型、決定何時擴展叢集或優化叢集打包等任務中解放出來

1.2 Fargate 的關鍵優勢

無伺服器架構:Fargate 讓您完全避免管理 EC2 執行個體或任何底層的虛擬機器基礎設施。您只需定義容器的資源需求(如 CPU 和記憶體),AWS 會自動分配和管理資源

按需計費:Fargate 按照實際使用的資源計費,即根據容器運行期間所使用的 CPU 和記憶體。您無需預先購買、配置或管理硬體資源,這使得 Fargate 成為非常靈活且具有成本效益的選擇

簡化的運維:由於 AWS Fargate 自動處理底層基礎設施,因此開發者可以專注於應用的開發和容器的配置,而不需要管理伺服器、叢集或節點的維護。這個特性大大簡化了運維工作

自動擴展:Fargate 會根據應用的負載自動調整計算資源,無需手動干預或管理擴展過程。您只需要設定容器的資源需求,Fargate 會按需分配資源並確保應用可用

增強的安全性:Fargate 為每個容器提供獨立的計算環境,使得每個容器的任務能夠得到更好的隔離。此外,Fargate 允許您為每個任務指定獨立的 IAM 角色,以細化權限管理

juduocloud自助充值系统
juduocloud自助充值系统

二、AWS Fargate 技術架構與運作原理

2.1 Fargate 的核心組件

要理解 Fargate 的運作方式,首先需要熟悉其核心組件:

叢集(Clusters):叢集是 Fargate 中組織任務和服務的邏輯分組

任務定義(Task Definitions):任務定義是配置檔案,使用者在此為應用程式定義容器及其設定。它們作為 Fargate 應用程式的藍圖,指定容器的各種參數

任務(Tasks):任務是任務定義的運行執行個體。使用者可以在叢集中從同一個任務定義建立多個任務,同時運行單個任務或多個任務

服務(Services):Fargate 中的服務管理和運行任務。它們可以同時運行多個任務,並根據任務定義在任務失敗或停止時替換任務

2.2 Fargate 工作流程

Fargate 基本上通過以下幾個步驟工作

  1. 容器定義和任務定義:您首先定義應用的容器,並建立一個任務定義。在任務定義中,您指定容器的配置參數,如鏡像、環境變數、網路設定、資源需求(如 CPU 和記憶體)等。
  2. 選擇 ECS 或 EKS:Fargate 可以與 Amazon ECS 或 Amazon EKS 一起使用。如果您選擇 ECS,您將使用 ECS 服務來管理和部署容器任務。如果您選擇 EKS,您將使用 Kubernetes 來進行容器管理和編排
  3. 啟動任務或服務:在 ECS 或 EKS 中,您可以建立一個服務或任務來運行您的容器。Fargate 會自動為容器分配所需的計算資源,並啟動容器
  4. 自動擴展和彈性:Fargate 允許根據工作負載的需求自動擴展容器的數量和計算資源。它會自動調整資源分配,確保應用高效運行,且不需要人工干預
  5. 監控與管理:您可以使用 AWS CloudWatch 來監控和記錄容器任務的運行情況。Fargate 提供了集成的監控和日誌記錄,幫助您即時查看應用的健康狀況和性能

2.3 任務定義參數與限制

使用 Fargate 時,必須將任務定義設定為使用 Fargate 啟動類型。使用 Fargate 時需注意額外考量

有些參數完全不予以支援,而其他參數對 Fargate 任務會有不同的行為。以下任務定義參數在 Fargate 任務中無效

  • disableNetworking
  • dnsSearchDomains
  • dnsServers
  • dockerSecurityOptions
  • extraHosts
  • gpu
  • ipcMode
  • links
  • placementConstraints
  • privileged
  • maxSwap
  • swappiness

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

  • linuxParameters – 當指定套用於容器的特定於 Linux 的選項時,對於 capabilities,您可以新增的唯一功能是 CAP_SYS_PTRACE。不支援 devices、sharedMemorySize 和 tmpfs 參數
  • volumes – Fargate 任務僅支援繫結掛載主機磁碟區,所以不支援 dockerVolumeConfiguration 參數
  • cpu – 對於 AWS Fargate 上的 Windows 容器,值不可少於 1 個 vCPU
  • networkConfiguration – Fargate 任務一律使用 awsvpc 網路模式

三、AWS Fargate 實戰應用與最佳實踐

3.1 Fargate 的使用場景

Fargate 非常適合以下場景

微服務架構:對於需要多個微服務的應用,Fargate 提供了簡化的管理和自動化的彈性擴展,適合現代化的應用架構

無伺服器 Web 應用:對於 Web 服務,Fargate 提供了按需計算和自動擴展功能,使得 Web 應用能夠根據用戶流量自動伸縮

背景任務和批處理作業:Fargate 可用於執行定時任務、批處理作業、資料處理等任務,且無需擔心底層計算資源

容器化的機器學習應用:對於需要計算密集型任務的應用,Fargate 允許您靈活配置所需的 CPU 和記憶體資源,支援機器學習模型的訓練和推理

大工作負載:Fargate 非常適合以最少的手動介入來管理大型工作負載,自動處理基礎設施、擴展和監控

具有偶發峰值的小型工作負載:對於經歷小工作量並偶爾出現記憶體或 CPU 突增的應用程式,Fargate 通過高效擴展資源來節省成本

3.2 任務 CPU 和記憶體配置

AWS Fargate 的 Amazon ECS 任務定義需要您指定任務層級的 CPU 和記憶體。只要在任務層級指定這些資源,就可以滿足大多數使用案例。下表顯示有效的任務層級 CPU 和記憶體組合

CPU 數值記憶體數值AWS Fargate 支援的作業系統
256 (.25 vCPU)512 MiB、1 GB、2 GBLinux
512 (.5 vCPU)1 GB、2 GB、3 GB、4 GBLinux
1024 (1 vCPU)2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GBLinux、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)介於 16 GB 與 60 GB 之間,以 4 GB 為單位遞增Linux
16384 (16vCPU)介於 32 GB 與 120 GB 之間,以 8 GB 為單位遞增Linux

您可以在任務定義中將記憶體值指定為以 MiB 或 GB 為單位的字串。例如,可指定 3072 MiB 作為記憶體值,也可指定 3 GB GB 作為記憶體值。您可以在 JSON 檔案中將 CPU 值指定為以 CPU 為單位或虛擬 CPU (vCPU) 為單位的字串。例如,可指定 1024 個 CPU 單位作為 CPU 值,也可指定 1 vCPU 個 vCPU 作為 CPU 值

3.3 任務聯網配置

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

如果使用公有子網路,請決定是否提供網路界面的公有 IP 地址。若要讓公有子網路中的 Fargate 任務提取容器映像,需要透過路由至網際網路,或可將請求路由至網際網路的 NAT 閘道,將公有 IP 地址指派給任務的彈性網路界面。若要讓私有子網路中的 Fargate 任務提取容器映像,您需要子網路中的 NAT 閘道以將請求路由到網際網路

以下是適用於 Fargate 服務之 networkConfiguration 區段的範例

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

3.4 日誌記錄與監控

對於 Fargate 上託管的 Amazon ECS 任務,支援多種日誌記錄方式

事件記錄:Amazon ECS 記錄 EventBridge 採取的動作。您可以使用適用於 EventBridge 的 Amazon ECS 事件,接收有關您的 Amazon ECS 叢集、服務和任務目前狀態的近乎即時通知

任務生命週期日誌記錄:在 Fargate 上執行的任務會發佈時間戳記,以透過任務生命週期的狀態追蹤任務。您可以在 AWS Management Console 的任務詳細資訊中以及透過在 AWS CLI 和 SDK 中描述任務來查看時間戳記

應用程式日誌記錄:AWS Fargate 的 Amazon ECS 任務定義支援日誌組態的 awslogssplunk 和 awsfirelens 日誌驅動程式

以下顯示任務定義片段,其中設定了 awslogs 日誌驅動程式

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

3.5 可觀測性實踐

在 Amazon ECS on Fargate 環境中實現可觀測性對於了解應用程式運行的性能、可用性、健康狀況和資源使用情況至關重要。這能夠幫助您及時發現潛在問題並採取措施,優化資源使用、感知問題和識別瓶頸等,以提高整體性能和用戶體驗

實施可觀測性通常需要採集三類主要數據

指標採集:監控 ECS Fargate 相關的運行指標,以及應用程式的性能指標(如 JVM 運行指標、NodeJS 應用的 runtime 運行指標等)

鏈路追蹤:通過在應用容器中加載鏈路追蹤代理(如 ddtrace agent)來產生呼叫鏈路數據,從而可視化應用程式的請求流程和性能瓶頸

日誌採集:通過 AWS FireLens (Fluent-Bit 插件) 作為 Sidecar 與應用容器運行在同一個 Amazon ECS 任務中來採集應用日誌數據

四、Fargate 與其他 AWS 服務的比較

4.1 Fargate 與 EC2 的比較

AWS FargateAWS EC2 執行個體
AWS Fargate 是一個無伺服器計算引擎,用於需要以容器化形式運行的應用程式,無需擔心底層基礎設施AWS EC2 執行個體最適合虛擬化應用,但需要手動配置底層基礎設施
容器將彼此隔離,不會發生數據洩露您擁有完全控制權,隔離也取決於您的手中,需要更仔細的配置
AWS Fargate 根據傳入流量自動擴展應用程式AWS EC2 不會自動擴展,應與其他 AWS 服務整合以實現執行個體的自動擴展
AWS Fargate 適用於短期任務EC2 包含長期運行的容器

4.2 Fargate 與 Lambda 的比較

功能AWS FargateAWS Lambda
使用案例適合運行容器化應用程式和管理有狀態工作負載適合運行由事件觸發的短暫、無狀態函數
類型容器即服務 (CaaS)功能即服務 (FaaS)
運行方式在 AWS 管理的 EC2 執行個體上運行容器無需伺服器管理即可運行單獨的程式碼功能
事件觸發器無內建事件觸發器。根據容器配置連續運行事件驅動;回應如 S3 物件上傳等觸發器
最適合有狀態應用程式、微服務、批處理作業、大型工作負載短期、事件驅動的應用程式(例如 API 後端、即時處理)
定價模型基於消耗的資源(CPU、記憶體)的按需付費模型基於執行時間(時間和使用的記憶體)的按需付費模型
擴展根據需求自動擴展容器根據事件頻率自動擴展

4.3 Fargate 與 ECS 的關係

需要注意的是,Fargate 和 ECS 並非互斥的服務,而是可以協同工作的。當您開始將 AWS Fargate 與 AWS ECS 一起使用時,您不再負責配置和擴展應用程式及底層基礎設施的伺服器,這一切都由 AWS 負責處理

在啟動應用程式之前,以套件形式指定它需要的所有先決條件,例如 CPU 和記憶體要求、網路要求和 IAM(身份和訪問管理)策略。通過將 requiresCompatibilities 任務定義參數設定為 FARGATE,您可以配置您的任務定義以使用 Fargate。AWS Fargate 將選擇合適的執行個體進行應用程式部署

五、Fargate 的定價模式與成本優化

5.1 Fargate 定價結構

AWS Fargate 按照您所使用的 CPU 和記憶體資源計費。定價基於容器任務運行的時間和您為任務分配的計算資源。您只需為容器實際運行的時間和消耗的資源付費

  • 計算資源:按分配的 CPU 和記憶體資源計費,價格基於每秒的使用量
  • 儲存和網路費用:如果您使用 Amazon EFS 或其他儲存服務,儲存費用會單獨計費。同時,網路流量也可能產生費用

具體定價因地區而異,例如在亞太(孟買)地區的價格如下

  • vCPU 每小時:$0.04256
  • 記憶體每 GB 每小時:$0.004655

5.2 成本優化策略

使用 Fargate Spot:AWS Fargate Spot 為運行使用備用容量的容器提供高達 70% 的更低價格,使其成為成本意識用戶的有吸引力的選擇

合理配置資源:根據應用程式的實際需求精確配置 CPU 和記憶體資源,避免過度配置。

利用自動擴展:根據工作負載模式自動調整任務數量,避免在低使用期間為未使用的資源付費。

優化容器映像:減少容器映像大小可以加快啟動時間,並降低資料傳輸成本。

六、Fargate 的局限性與應對策略

儘管 AWS Fargate 提供了許多好處,但也存在一些限制需要考慮

6.1 成本考量

對於長時間運行的任務,與使用傳統 EC2 執行個體相比,AWS Fargate 可能成本更高。如果您的工作負載持續運行,EC2 可能是更具成本效益的選擇

6.2 基礎設施控制限制

Fargate 抽象了大部分基礎設施管理,這對於需要對伺服器設定、配置或性能進行細粒度控制的用戶可能不理想

6.3 區域可用性

AWS Fargate 可能並非在所有 AWS 區域都可用。您需要檢查它是否在您計劃部署應用程式的區域中可用

6.4 其他技術限制

Fargate 目前對 GPU 資源的支持有限,不適合需要 GPU 加速的工作負載。此外,容器啟動時間雖然不斷改善,但仍可能比在 EC2 上直接運行容器稍長。

結論

AWS Fargate 作為一款無伺服器容器計算引擎,徹底改變了容器化應用程式的部署和管理方式。通過消除基礎設施管理的負擔,它讓開發團隊能夠專注於應用程式邏輯和業務價值,而非底層運維工作。無論是微服務架構、批處理任務還是 web 應用程式,Fargate 都提供了靈活、安全且成本效益高的解決方案。

儘管 Fargate 可能存在成本和控制方面的限制,但對於大多數使用場景而言,其運維簡化自動擴展優勢遠遠超過這些局限性。通過合理設計應用程式架構、精細配置資源參數並實施適當的可觀測性策略,您可以充分利用 Fargate 的潛力,構建高效、可靠且成本優化的容器化應用程式。

隨著無伺服器技術的不斷成熟,AWS Fargate 在雲端容器生態系統中的角色將越發重要,成為現代化應用程式部署不可或缺的選擇之一。

最新文章:

滚动至顶部