AWS Lambda 與 Amazon EC2:該選擇哪一個?
亞馬遜是提供多元雲端服務的領導者之一,其服務項目已達數十種且持續增加中。Amazon EC2 是亞馬遜最受歡迎的服務之一,也是 2006 年推出的亞馬遜雲端運算平台的核心組成部分。如今 Amazon EC2 已被廣泛採用,但另一項名為 Lambda(2014 年推出)的亞馬遜服務人氣也正持續攀升。 今天的部落格文章將比較 AWS Lambda 與 EC2 這兩大平台,協助您根據自身環境做出正確的選擇。
< span data-sheets-value=”{” 1 “:2,” 2 “:”
“}” data-sheets-userformat=”{” 2 “:17089,” 3 “:{” 1 “:0},” 9 “:1,” 10 “:1,” 12 “:0,” 17 “:1}”>
</span>
什麼是 AWS EC2?
AWS EC2(Amazon Web Services Elastic Compute Cloud)是一項服務,可讓您在雲端使用稱為 EC2 執行個體的虛擬機器,並提供可擴展性。您可以隨時根據需求調整磁碟空間、CPU 效能、記憶體等資源。您可以選擇已預先安裝必要作業系統(OS)的基礎映像檔(例如 Linux 或 Windows),接著配置大部分的作業系統設定,並安裝自訂應用程式。 您擁有 Amazon EC2 執行個體的 root 存取權限,並可建立額外使用者。您可以管理所需的一切,並完全掌控您的 EC2 執行個體,包括重新啟動和關閉執行個體。AWS EC2 網路服務歸類於”基礎架構即服務”(Infrastructure as a Service)。 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 擁有廣泛的使用情境。 Amazon 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 Gateway
- AWS IoT
- Alexa Skills Kit
- Alexa Smart Home
- Application Load Balancer
- CloudFront
- CloudWatch Events
- CloudWatch Logs
- CodeCommit
- Cognito Sync Trigger
- DynamoDB
- Kinesis
- S3
- SNS
- SQS
API Gateway 是一項特殊服務,可讓開發人員將各種非 AWS 應用程式與 AWS 應用程式及其他資源相互連接。
AWS EC2 與 Lambda 比較:版本/快照
EC2 。AWS EC2 執行個體的 EBS(彈性區塊儲存)卷可使用一套複雜的 快照 機制。您可以為 EC2 執行個體建立增量快照及 回滾至所需狀態 。多卷快照可用於關鍵工作負載,例如使用多個 EBS 卷的資料庫。
Lambda 。 為更妥善管理 Lambda 函式,系統支援便捷的版本控制機制。您可以為每個上傳的程式碼副本指派版本號,並建立指向相應程式碼版本的別名。每個版本號從 1 開始,並依序遞增。例如,您可以將 Lambda 函式分類為 alpha、beta 和生產環境。 在發佈時,系統會為每個 Lambda 函式版本指派一個 Amazon 資源名稱 (ARN),此名稱日後無法變更。
AWS EC2 與 Lambda 比較:安全性
EC2 。您應妥善管理您的 EC2 執行個體及其內部所有元件。您可以手動為 EC2 執行個體設定防火牆——Amazon 提供 VPC(虛擬私有雲)防火牆來控制流量,並確保雲端中 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 函式在安全性方面的優勢。
Amazon EC2 與 Lambda 比較:效能與可用性
EC2 。啟動 EC2 執行個體後,該執行個體將持續運行,直到您手動停止它或排程關機任務為止。 當 EC2 執行個體正在運行時,應用程式幾乎能立即在該執行個體上執行。只要您的 EC2 執行個體效能允許,即可同時執行任意數量的應用程式。 若應用程式必須在全天定期執行,於 EC2 執行個體上運行是理想的解決方案。
Lambda 。Lambda 函式始終可用,但並非持續運行。預設情況下,Lambda 函式處於非活動狀態。當與某個事件關聯的觸發器被啟動時,您的應用程式(Lambda 函式)便會開始執行。Lambda 函式的最大執行時間(超時)上限為 900 秒(15 分鐘)。 因此,在 AWS Lambda 上執行長時間運行的應用程式並非明智之舉。若您需要執行需超過 900 秒才能成功完成的應用程式,或執行時間不固定的應用程式,請考慮使用 AWS EC2。Lambda 函式運行的另一項限制是最大記憶體用量,上限為 3008 MB。
視區域而定,可同時執行 1000 至 3000 個 Lambda 執行個體。 若您希望同時執行更多執行個體,請聯絡 AWS 技術支援。
對於 AWS Lambda 而言,從傳送請求到應用程式執行的延遲最長可達 100 毫秒,這與在 EC2 執行個體上執行的應用程式不同,後者並無此類延遲。100 毫秒雖非漫長的時間,但對於某些類型的應用程式而言,這段時間可能至關重要。 若您的應用程式必須從 Amazon S3 儲存桶下載某些資料,在應用程式執行前可能需要額外 1 至 3 秒的時間。在規劃使用 AWS Lambda 執行應用程式時,請務必將此延遲時間納入考量。
冷啟動時間是 Lambda 函式的缺點之一。當函式在一段較長的時間內未被執行時,便會產生延遲,因為在 Amazon Cloud 中啟動容器並執行函式需要一定時間。 當您面臨工作負載不均勻的情況,且應用程式必須在一天中的不同時段執行,且執行間隔較長時,使用 AWS Lambda 來執行應用程式可能是一個不錯的解決方案。
AWS Lambda 與 EC2:定價模式
EC2 和 Lambda 這兩項雲端服務均採用”隨用隨付”的原則。不過,讓我們來探討其細節與差異。
EC2 。 無論函式/應用程式是否執行,您都需為 AWS EC2 執行個體的運行時間付費。 每小時的價格取決於 EC2 執行個體所使用的 CPU 效能、記憶體容量、顯示卡效能以及儲存容量。當您因定期請求量龐大而需要讓函式/應用程式保持隨時可用時,使用 AWS EC2 執行個體在財務上可能更為合理。
Lambda 。您需根據應用程式執行次數及完成執行所需的時間付費。應用程式每秒的運行費用取決於為該應用程式配置的記憶體量,每吉字節秒(GB/s)為 $0.00001667。應用程式執行時間的計算起點為應用程式啟動時刻,至返回結果或因超時而停止為止。 時間會向上取整至最接近的 100 毫秒倍數。當您需要隨需應變的可用性時,使用 AWS Lambda 執行函式/應用程式的費用可能更為划算。
結論
AWS EC2 是一項代表傳統雲端基礎架構(IaaS)的服務,讓您能夠將 EC2 執行個體作為虛擬機器(VM)運行、配置環境,並執行自訂應用程式。
AWS Lambda 是亞馬遜實現的”函式即服務”(Function as a Service),讓您無需擔心底層基礎架構即可執行應用程式。AWS Lambda 提供無伺服器架構,並允許您在事件觸發器被激活後,於雲端執行一段程式碼。使用 AWS Lambda 時,您將擁有具備版本控制功能、可擴展、輕量且經濟實惠的函式。 您可以專注於編寫程式碼,而非配置基礎架構。
若您經計算發現,應用程式在持續運行的 EC2 執行個體上存在大量閒置時間,請考慮使用 AWS Lambda;如此一來,當沒有請求執行應用程式時,您無需為閒置時間付費。若應用程式有大量定期請求,則將應用程式部署在持續運行的 EC2 執行個體上可能更為合適。
AWS EC2 非常適合執行高效能應用程式、長期運行的應用程式,以及啟動時絕不能有延遲的應用程式。若您使用 AWS EC2 執行個體,請務必進行備份,以免資料遺失。 NAKIVO Backup & Replication 是一套全方位的資料保護解決方案,除了能保護 EC2 執行個體外,還能保護 VMware vSphere 虛擬機器、Hyper-V 虛擬機器以及實體伺服器。
