AWS Lambda 與 Amazon EC2:該選擇哪一個?
亞馬遜是提供多元雲端服務的領導者之一,其服務項目已達數十種且持續增加中。Amazon EC2 是亞馬遜最受歡迎的服務之一,也是 2006 年推出的亞馬遜雲端運算平台的核心組成部分。如今 Amazon EC2 已被廣泛採用,但另一項名為 Lambda(2014 年推出)的亞馬遜服務人氣也正持續攀升。 今天的部落格文章將比較 AWS Lambda 與 EC2 平台,協助您為自身環境做出正確的選擇。
什麼是 AWS EC2?
AWS EC2(Amazon Web Services Elastic Compute Cloud)是一項服務,允許您在雲端使用稱為 EC2 執行個體的虛擬機器,並提供可擴展性。您可以隨時根據需求調整磁碟空間、CPU 效能、記憶體等資源。您可以選擇已預先安裝所需作業系統(如 Linux 或 Windows)的基礎映像,隨後配置大部分作業系統設定,並安裝自訂應用程式。 您擁有 Amazon EC2 執行個體的 root 存取權限,並可建立額外使用者。您可以管理所有所需事項,並完全掌控您的 EC2 執行個體,包括重新啟動和關閉執行個體。AWS EC2 網路服務的類別被稱為"基礎架構即服務"(IaaS)。AWS EC2 可用於雲端主機託管——您可以在雲端中將伺服器部署為虛擬機器(執行個體)。
什麼是 AWS Lambda?
AWS Lambda 是一個運算平台,當與某個事件關聯的觸發器被觸發時,您即可執行以受支援的程式語言(Java、JavaScript 或 Python)所撰寫的程式碼。您無需配置虛擬伺服器和環境來執行自己編寫的應用程式。只需插入您的程式碼(稱為 Lambda 函式 在 AWS Lambda 介面中(在此情況下),將 Lambda 函式與事件關聯,並在需要時於雲端執行應用程式,無需處理伺服器管理與環境設定。如此一來,您便能專注於應用程式開發,而非伺服器管理——這正是 AWS Lambda 被稱為 無伺服器。
觸發應用程式執行的事件可能包括:將檔案上傳至 Amazon S3 儲存桶、修改 DynamoDB 資料表、接收傳送至 API Gateway 服務的 HTTP 請求等。在設定好函式於事件發生時執行後,每當有新事件發生,您的應用程式就會自動執行。
就分類而言,Lambda 是 Amazon 所實現的"函式即服務"(FaaS)。在下表中,您可以從使用實體伺服器開始,比較各服務類型的管理層級。最低層級(需使用者自行管理)以綠色標示,較高層級(由供應商提供管理)則以藍色標示。因此,當使用實體伺服器時,您可以管理硬體以及所有較高層級。 當使用基礎架構即服務(IaaS)如 AWS EC2 時,您可以管理所提供虛擬機器(EC2 執行個體)上的作業系統。在平台即服務(PaaS)層級,您可以執行您的應用程式,但該應用程式必須在執行前進行編譯。 當使用功能即服務(FaaS)例如 AWS Lambda 時,您無需編譯應用程式——只需將程式碼插入 MSP(託管服務供應商)提供的介面中即可。表格中為對比而提及的軟體即服務(SaaS),僅允許您透過輕量級客戶端或網頁瀏覽器,在雲端上使用現成的應用程式(由供應商開發的應用程式)。
AWS EC2 與 Lambda:使用情境
由於使用此服務時幾乎所有設定皆可自訂,AWS EC2 擁有廣泛的使用情境。AWS EC2 最常見的使用情境包括:
- 網站託管
- 開發與測試應用程式或複雜環境
- 高效能運算
- 災難還原
AWS Lambda 的常見使用情境:
- 任務自動化
- 處理上傳至 Amazon S3 的物件
- 即時日誌分析
- 即時過濾與轉換資料
讓我們來探討一個具體的例子。假設您的網站使用 Amazon S3 儲存桶來儲存網站內容,包括圖片、影片、音訊檔案等。當上傳新的圖片或影片檔案時,您需要為網頁建立預覽圖,作為連結至原始尺寸圖片或影片檔案的入口。手動建立預覽圖是一項既枯燥又耗時的任務。 在這種情況下,您可以建立一個 Lambda 函式,使其能根據上傳的圖片自動調整圖片大小、重新命名該圖片,並將目標圖片儲存至適當的目錄中。您可以設定 Lambda 函式,使其在原始圖片檔案上傳至網站所使用的 Amazon S3 儲存桶後立即執行。
AWS EC2 與 Lambda:運作原理
EC2. 您可能還記得,在使用 AWS EC2 時,您操作的是稱為 EC2 執行個體的虛擬機器 (VM)。您可以向 EC2 執行個體新增虛擬硬體(虛擬磁碟、網路介面、處理器、記憶體),並可啟動、停止及重新啟動虛擬機器執行個體。EC2 執行個體可搭配兩種儲存類型使用——彈性區塊儲存 (EBS) 和 S3 儲存桶。 您可以使用預先配置且已安裝作業系統的映像檔,或建立自訂的 Amazon EC2 機器映像檔 (AMI)。Amazon EC2 雲端服務提供自動縮放與負載平衡功能。Amazon EC2 執行個體可與大多數其他 Amazon 網路服務協同運作,例如 S3、ECS、Route53、CloudWatch 等.
Lambda. 使用 AWS Lambda 時,您的應用程式(Lambda 函式)會在一個對您而言完全無縫的容器中執行。該容器包含程式碼和函式庫。Amazon 會根據應用程式的需求提供資源,且縮放是自動且無縫的。您無法控制執行應用程式的容器,也無法控制容器所運行的 Amazon EC2 執行個體(您對它們一無所知,因為 Amazon Lambda 使用者無法存取底層基礎架構)。 請參閱上表。
AWS Lambda 可視為 EC2 Container Service (ECS) 的框架,它利用容器來執行代表您應用程式的程式碼片段。每個容器的生命週期都很短暫。正在執行的 Lambda 函式不會保存其狀態。若您想儲存結果,應將其存放在某種資料儲存空間中,例如 Amazon S3 儲存桶。 您可以為 Lambda 函式配置虛擬網路,例如用於連線至 Amazon RDS(Amazon Relational Database Service)。Lambda 由多個部分組成:層、函式環境以及處理程序。觸發器是 Lambda 的啟動機制。Lambda 是一項由觸發器查詢所執行的函式。
可用觸發器的完整清單:
- API 閘道
- AWS IoT
- Alexa 技能套件
- Alexa 智慧家庭
- 應用程式負載平衡器
- CloudFront
- CloudWatch Events
- CloudWatch Logs
- CodeCommit
- Cognito 同步觸發器
- DynamoDB
- Kinesis
- S3
- 社交媒體
- SQS
API Gateway 是一項特殊服務,可讓開發人員將各式各樣的非 AWS 應用程式與 AWS 應用程式及其他資源相互連接。
AWS EC2 與 Lambda:版本/快照
EC2. 一套複雜的系統 快照 此功能適用於 AWS EC2 執行個體的 EBS(彈性區塊儲存)儲存區。您可以建立增量快照並 還原至所需狀態 EC2 執行個體的快照。多卷快照可用於關鍵工作負載,例如使用多個 EBS 卷的資料庫。
Lambda. 系統支援便捷的版本控制機制,以便更有效地管理 Lambda 函式。您可以為每個上傳的程式碼副本指派版本號,並建立指向特定程式碼版本的別名。每個版本號從 1 開始,並依序遞增。例如,您可以將 Lambda 函式分類為 alpha、beta 和生產環境版本。在發佈時,系統會為每個 Lambda 函式版本指派一個 Amazon Resource Name(AMR),此名稱日後無法變更。
AWS EC2 與 Lambda:安全性
EC2. 您應妥善管理您的 Amazon EC2 執行個體及其內部的所有元件。您可以手動為 Amazon EC2 執行個體設定防火牆——Amazon 提供 VPC(虛擬私有雲)防火牆,用於控制流量並確保雲端中 Amazon EC2 執行個體的安全性。 您可以手動為 EC2 執行個體設定並配置防毒軟體、建立 IAM 角色、指定權限、建立安全群組等。AWS Systems Manager Patch Manager 可讓您自動安裝作業系統更新與安全性修補程式。您可設定 AWS 在安裝修補程式或更新前先建立快照,以防範可能發生的問題。如有需要,請建立金鑰對以存取 EC2 執行個體。相較於使用 AWS Lambda,在使用 AWS EC2 時應更加注重安全性。
Lambda. Lambda 預設具有存取 AWS 服務的權限。IAM 角色是用來定義 Lambda 函式必須能夠存取的服務。 對於每個 Lambda 函式,您應設定代表該 Lambda 函式啟動的 IAM 角色。這意味著在設定 IAM 角色後,您將能夠將 Lambda 函式連接到已定義的 Amazon 服務,而無需使用金鑰或其他授權參數。
您可以使用 KMS 金鑰設定 Lambda 函式與 S3 之間的加密,以及 API Gateway 與 Lambda 之間的加密。 建立 Lambda 函式時,系統會自動建立一個預設加密金鑰。不過,建議您自行建立 KMS 金鑰。
相較於 Amazon EC2 執行個體,Lambda 函式無需進行安全性更新與修補。底層的容器與作業系統會由 Amazon 自動更新。這正是使用 Lambda 函式在安全性方面的優勢。
AWS EC2 與 Lambda:效能與可用性
EC2. 啟動 EC2 執行個體後,該執行個體會持續運行,直到您手動停止它或排程關機任務為止。當 EC2 執行個體正在運行時,應用程式幾乎可以立即在該執行個體上執行。只要您的 EC2 執行個體效能允許,您可以同時執行任意數量的應用程式。若應用程式必須在全天定期運行,在 EC2 執行個體上執行應用程式是一個很好的解決方案。
LambdaLambda 函式始終可用,但並非持續運行。預設情況下,Lambda 函式處於非活動狀態。當與某個事件關聯的觸發器被激活時,您的應用程式(Lambda 函式)便會啟動。Lambda 函式的最大執行時間(超時)限制為 900 秒(15 分鐘)。 因此,在 AWS Lambda 中執行長時間運行的應用程式並非明智之舉。若您需要執行需超過 900 秒才能成功完成的應用程式,或執行時間不固定的應用程式,請考慮使用 AWS EC2。Lambda 函式運行的另一項限制是最大記憶體用量,上限為 3008 MB。
視區域而定,最多可同時執行 1000 至 3000 個 Lambda 執行個體。 若您希望同時執行更多執行個體,請聯絡 AWS 支援服務。
與在 EC2 執行個體上執行且無此類延遲的應用程式不同,AWS Lambda 在傳送請求與應用程式執行之間會有最多 100 毫秒的延遲。100 毫秒雖不算長,但對於某些類型的應用程式而言,這段時間可能至關重要。 若您的應用程式必須從 Amazon S3 儲存桶下載資料,應用程式執行前可能需要額外 1 至 3 秒。在規劃使用 AWS Lambda 執行應用程式時,請務必留意此延遲時間。
冷啟動時間是 Lambda 函式的缺點。 當函式長時間未被執行時,便會產生延遲,因為在 Amazon 雲中啟動容器並執行函式需要時間。若您面臨工作負載不均勻的情況,且應用程式必須在一天中的不同時段執行,且執行間隔較長,使用 AWS Lambda 來執行應用程式可能是一個不錯的解決方案。
AWS Lambda 與 EC2:定價模式
EC2 和 Lambda 這兩項雲端服務均採用"隨用隨付"的計費原則。不過,讓我們來探討兩者的細節與差異。
EC2. 無論函式或應用程式是否執行,您都需為 AWS EC2 執行個體的運行時間付費。每小時的費用取決於 EC2 執行個體所使用的 CPU 效能、記憶體容量、顯示卡效能以及儲存容量。若因定期請求量龐大,需要函式或應用程式始終保持可用狀態,從成本角度來看,使用 AWS EC2 執行個體可能更為合理。
Lambda. 您需支付應用程式執行次數及執行所需的時間費用。應用程式每秒的運行價格取決於為該應用程式配置的記憶體量,每 GB·秒為 $0.00001667。應用程式的執行時間從應用程式啟動開始計算,直至返回結果或因超時而停止。 時間將四捨五入至最接近的 100 毫秒倍數。若您需要隨需可用性,使用 AWS Lambda 執行函式/應用程式的費用可能更為划算。
結論
AWS EC2 是一項代表傳統雲端基礎架構(IaaS)的服務,讓您能夠將 EC2 執行個體作為虛擬機器(VM)運行、配置環境,並執行自訂應用程式。
AWS Lambda 是 Amazon 推出的"函式即服務"(FaaS)解決方案,讓您無需擔心底層基礎架構即可運行應用程式。AWS Lambda 提供無伺服器架構,並允許您在事件觸發器被激活後,在雲端執行一段程式碼。 使用 AWS Lambda 時,您將擁有具備版本控制功能、可擴展、輕量且經濟實惠的函式。您可以專注於編寫程式碼,而非配置基礎架構。
如果您計算出應用程式在持續運行的 EC2 執行個體上存在大量閒置時間,請考慮使用 AWS Lambda,因為在沒有請求執行應用程式時,您無需為閒置時間付費。 若您的應用程式有大量定期請求,將其部署在持續運行的 EC2 執行個體上可能更為合適。
使用 AWS EC2 適合執行高效能應用程式、長期運行的應用程式,以及啟動時絕不能有延遲的應用程式。若您使用 AWS EC2 執行個體,請務必進行備份,以避免資料遺失。 NAKIVO Backup & Replication 這是一套全方位的資料保護解決方案,除了 VMware vSphere 虛擬機器、Hyper-V 虛擬機器和實體伺服器外,還能保護 EC2 執行個體。
