AWS Lambda詳解

文章的翻譯是專門為課程的學生準備的 「雲端服務」。 有興趣往這個方向發展嗎? 觀看 Egor Zuev(InBit 團隊負責人)的大師班 “AWS EC2 服務” 並加入下一個課程小組:26 月 XNUMX 日開始。

AWS Lambda詳解

越來越多的人正在遷移到 AWS Lambda,以獲得可擴展性、效能、節省以及每月處理數百萬甚至數萬億請求的能力。 為此,您無需管理運行服務的基礎架構。 自動縮放可讓您每秒處理數千個並發請求。 我認為 AWS Lambda 堪稱最受歡迎的 AWS 服務之一。

AWS Lambda

AWS Lambda 是一種事件驅動的無伺服器運算服務,可讓您在不預置或管理伺服器的情況下執行程式碼,並使用自訂邏輯擴充其他 AWS 服務。 Lambda 會自動回應各種事件(稱為觸發器),例如透過 Amazon API Gateway 的 HTTP 請求、Amazon S3 儲存桶或 Amazon DynamoDB 表中資料的變更; 或者,您可以使用 AWS 開發工具包透過 API 呼叫以及 AWS Step Functions 中的狀態轉換來執行程式碼。

Lambda 在高度可用的運算基礎架構上運行程式碼,並全面負責管理底層平台,包括伺服器和作業系統維護、資源配置、自動擴展、程式碼監控和日誌記錄。 也就是說,您只需上傳程式碼並配置執行方式和時間。 反過來,該服務將負責其啟動並確保應用程式的高可用性。

何時切換到 Lambda?

AWS Lambda 是一個方便的運算平台,適用於各種用例,只要服務支援程式碼的語言和執行時間即可。 如果您想專注於程式碼和業務邏輯,同時以合理的成本外包伺服器維護、配置和擴展,AWS Lambda 絕對是您的最佳選擇。

Lambda 非常適合創建編程接口,與 API Gateway 結合使用時,您可以顯著降低成本並更快地進入市場。 使用 Lambda 函數和選項來組織無伺服器架構有多種不同的方法 - 每個人都可以根據自己的目標選擇合適的方法。

Lambda 讓您可以執行廣泛的任務。 因此,借助 CloudWatch 支持,您可以建立延遲任務並自動化各個流程。 服務的使用性質和強度沒有任何限制(考慮記憶體消耗和時間),也沒有什麼可以阻止您系統性地開發基於 Lambda 的成熟微服務。

您可以在此處建立不連續運行的服務導向的操作。 一個典型的例子是影像縮放。 即使在分散式系統中,Lambda 函數仍然具有相關性。

因此,如果您不想處理分配和管理運算資源的問題,請嘗試 AWS Lambda; 如果您不需要繁重的資源密集型運算,也可以嘗試AWS Lambda; 如果您的程式碼定期運行,那麼您應該嘗試 AWS Lambda。

安全

到目前為止,沒有收到任何有關安全的投訴。 另一方面,由於該模型的許多內部流程和實作功能對 AWS Lambda 託管運行時環境的使用者隱藏,因此一些普遍接受的雲端安全規則變得無關緊要。

與大多數 AWS 服務一樣,Lambda 是在 AWS 和客戶之間共享安全性和合規性的基礎上提供的。 這項原則減輕了客戶端的營運負擔,因為 AWS 承擔了維護、管理和監控服務元件的任務——從主機作業系統和虛擬化層到基礎設施資產的實體安全。

具體來說AWS Lambda,AWS負責管理底層基礎設施、相關底層服務、作業系統和應用平台。 客戶負責其程式碼的安全性、儲存機密資料、控制對其以及 Lambda 服務和資源(身分和存取管理,IAM)的訪問,包括在所使用的功能的限制範圍內。

下圖顯示了適用於 AWS Lambda 的責任共擔模型。 AWS 責任為橘色,顧客責任為藍色。 如您所見,AWS 對服務上部署的應用程式承擔更多責任。

AWS Lambda詳解

適用於 AWS Lambda 的責任共擔模型

Lambda 運行時

Lambda 的主要優點是,透過代表您執行功能,服務本身會分配必要的資源。 您可以避免在系統管理上浪費時間和精力,而專注於業務邏輯和編碼。

Lambda服務分為兩個平面。 第一個是控制平面。 根據維基百科,控制平面是網路中負責傳輸訊號流量和路由的部分。 它是做出有關配置、服務和分配工作負載的全域決策的主要元件。 此外,控制平面充當解決方案提供者的網路拓撲,負責路由和管理流量。

第二個平面是資料平面。 它和控制平面一樣,有自己的任務。 控制平面提供用於管理函數(CreateFunction、UpdateFunctionCode)的 API,並控制 Lambda 與其他 AWS 服務的通訊方式。 資料平面控制運行 Lambda 函數的 Invoke API。 函數呼叫後,控制平面會指派或選擇一個為該函數預先準備好的現有運行環境,然後執行其中的程式碼。

AWS Lambda 透過各自的執行環境支援多種程式語言,包括 Java 8、Python 3.7、Go、NodeJS 8、.NET Core 2 等。 AWS 會定期更新它們、分發安全性修補程式並在這些環境中執行其他維護活動。 Lambda 還允許您使用其他語言,前提是您自己實作適當的執行時間。 然後您必須負責其維護,包括監控其安全性。

這一切是如何運作的以及該服務將如何履行您的職能?

每個函數都在一個或多個專用環境中運行,這些環境僅在該函數的生命週期內存在,然後被銷毀。 每個環境一次僅進行一次調用,但如果對相同函數進行多次串行調用,則可以重複使用該調用。 所有執行時間環境都在具有硬體虛擬化的虛擬機器(即所謂的 microVM)上運作。 每個 microVM 都會指派給一個特定的 AWS 帳戶,並且可以被環境重複使用以在該帳戶內執行不同的功能。 MicroVM 被打包成 Lambda Worker 硬體平台的建置塊,該平台由 AWS 擁有和營運。 不同的功能不能使用相同的執行時間,不同的 AWS 帳戶的 microVM 也不是唯一的。

AWS Lambda詳解

AWS Lambda 隔離模型

運行時環境的隔離是使用多種機制來實現的。 在每個環境的頂層,有以下組件的單獨副本:

  • 功能碼
  • 為函數選擇的任何 Lambda 層
  • 函數執行環境
  • 基於 Amazon Linux 的最小使用者空間

以下機制用於隔離不同的執行環境:

  • cgroups - 限制每個執行時間環境對CPU、記憶體、儲存和網路資源的存取;
  • 命名空間 - 將進程 ID、使用者 ID、網路介面和 Linux 核心管理的其他資源分組。 每個運行時都在自己的命名空間中運作;
  • seccomp-bpf - 限制運行時可以使用的系統呼叫;
  • iptables 和路由表 - 執行環境彼此隔離;
  • chroot - 提供對底層檔案系統的有限存取。

這些機制與 AWS 專有的隔離技術相結合,可確保可靠的運行時分離。 以這種方式隔離的環境無法存取或修改來自其他環境的資料。

儘管相同 AWS 帳戶的多個執行時間可以在單一 microVM 上執行,但在任何情況下都無法在不同 AWS 帳戶之間共用 microVM。 AWS Lambda 僅使用兩種機制來隔離 microVM:EC2 執行個體和 Firecracker。 Lambda 中基於 EC2 執行個體的訪客隔離自 2015 年以來就已出現。 Firecracker 是 AWS 專為無伺服器工作負載設計的新型開源虛擬機器管理程序,於 2018 年推出。 執行 microVM 的實體硬體在不同帳戶的工作負載之間共用。

保存環境和進程狀態

儘管 Lambda 運行時對於不同的函數來說是唯一的,但它們可以重複呼叫相同函數,這意味著運行時可以在被銷毀之前存活幾個小時。

每個 Lambda 運行時還有一個可透過 /tmp 目錄存取的可寫入檔案系統。 無法從其他運行時存取其內容。 就進程狀態持久性而言,寫入 /tmp 的檔案在執行時期環境的整個生命週期中都存在。 這允許累積多個呼叫的結果,這對於載入機器學習模型等昂貴的操作特別有用。

通話資料傳輸

Invoke API 可以在兩種模式下使用:事件模式和請求回應模式。 在事件模式下,呼叫將會新增到佇列中以供稍後執行。 在請求-回應模式下,使用提供的有效負載立即呼叫函數,然後傳回回應。 在這兩種情況下,函數都在 Lambda 環境中運行,但具有不同的負載路徑。

在請求-回應呼叫期間,負載從請求處理 API (API Caller)(例如 AWS API Gateway 或 AWS SDK)流向負載平衡器,然後流向 Lambda 呼叫服務(Invoke Service)。 後者確定執行函數的適當環境,並將有效負載傳遞到那裡以完成呼叫。 負載平衡器透過 Internet 接收受 TLS 保護的流量。 Lambda 服務內的流量(在負載平衡器之後)會通過特定 AWS 區域中的內部 VPC。

AWS Lambda詳解

AWS Lambda 呼叫處理模型:請求-回應模式

事件呼叫可以立即進行或新增到佇列。 在某些情況下,佇列是使用 Amazon SQS (Amazon Simple Queue Service) 實現的,它透過內部輪詢器程序將呼叫傳遞給 Lambda 呼叫履行服務。 傳輸的流量受 TLS 保護,且 Amazon SQS 中儲存的資料沒有額外的加密。

事件呼叫不會回傳回應 - Lambda Worker 只是忽略任何回應訊息。 來自 Amazon S3、Amazon SNS、CloudWatch 和其他來源的基於事件的呼叫由 Lambda 在事件模式下處理。 來自 Amazon Kinesis 和 DynamoDB 流、SQS 佇列、應用程式負載平衡器和 API 閘道呼叫的呼叫以請求-回應方式處理。

監控

您可以使用各種 AWS 機制和服務來監控和審核 Lambda 函數,包括以下內容。

亞馬遜CloudWatch
收集各種統計信息,例如請求數、請求持續時間以及失敗的請求數。

亞馬遜雲端追蹤
允許您記錄、持續監控和維護與您的 AWS 基礎架構相關的帳戶活動資訊。 您將擁有使用 AWS 管理主控台、AWS 開發工具包、命令列工具和其他 AWS 服務執行的操作的完整歷史記錄。

AWS X 射線
根據應用程式內部元件的映射,提供應用程式中請求處理的所有階段的完整可見性。 允許您在開發期間和生產環境中分析應用程式。

AWS 配置
您將能夠追蹤 Lambda 函數配置(包括刪除)和執行時間、標籤、處理程序名稱、程式碼大小、記憶體分配、逾時設定和並發設定的更改,以及 Lambda IAM 執行角色、子網路分割和安全性群組綁定。

結論

AWS Lambda 提供了一套強大的工具來建立安全且可擴展的應用程式。 AWS Lambda 中的許多安全性和合規性實踐與其他 AWS 服務中的相同,但也有例外。 截至 2019 年 1 月,Lambda 符合 SOC 2、SOC 3、SOC XNUMX、PCI DSS、健康保險流通和責任法案 (HIPAA) 合規性以及其他法規。 因此,當您考慮實施下一個應用程式時,請考慮 AWS Lambda 服務 - 它可能最適合您的任務。

來源: www.habr.com

添加評論