iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

Lambda

隨著容器虛擬化技術的盛行,把一個 Application 封裝進容器內,特過容器的快速啟動、刪除的特性,讓每一次 Application 使用都是新的一個 Application,進而減少了系統長期運行的監控與恢復

基本上這句話就是使用容器化技術的原因。

Container 也具有 瞬間啟動完成任務後自動銷毀隨時都可以被關閉 / 取代 的特性。

容器化技術也是 Serverless 架構的精隨,你不再需要維護伺服器底層,把整個應用程式關注在資料的輸入以及輸出,程式碼的撰寫在於快速、精準的處理資料,減少底層硬體的影響。

Lambda 是一個水平擴充的服務。在 Day 10 - Auto Scaling 自動擴展 這個篇章有提到過。

它會增加服務器的數量來擴展系統效能。本身也就支援高併發的架構,可瞬間擴張到千個。

但是併發的數量有其上限,但是可以透過設定做調整

同時也具備著 Container 的特性,可以快速地啟用、隨後刪除,並且是隨開隨用,根據流量以及存取次數去計算費用,畢竟不是所有的服務都 24 小時有流量,流量也不是這麼高的情況下, Lambda 真的是一個不錯的選擇!

AWS Lambda 有提供每個月 100 萬次的啟動,一個 Function 最大能執行 15 分鐘。

Event、Trigger、Function

一句話說明三者的關係:

Trigger 會將收到的 Event 交給 Function 去做處理

Event 的來源有很多種,可能來自於 S3,也可能來自於 API Gateway,基本上 AWS 的服務都有可能有支援 Lambda,這些從各個地方啟動 Lambda 的來源,就是 Event。

Trigger 就是負責接收各地來源的 Event,收到後會把對應的 Function 給啟動起來。

Function 就是實際執行程式碼的地方。要注意若需要跟其他 AWS 服務進行溝痛,需要為其配置一個 IAM Role。

AWS-Lambda.drawio

Runtime、Layer

Runtime (運行環境) ,是運行程式碼的環境。

​ Runtime 是運行 Function 所需的程式語言所建立的基礎環境。

Layer (中繼的套件) ,當 Lambda Function 執行時,需要一些額外套件與環境,可考慮使用 Layer。

​ Layer 將會附加進 Runtime 裡面,不需要每次都將使用到的函式庫也納入部屬對象裡面。Layer 製作完成後會壓縮成 zip 檔,內容包含了 函式庫、自訂的執行時間、其它的依賴項目。

這邊可以參考 AWS Blog 官網畫的圖:

Figure 1: Architecture diagram - With vs. without Lambda layer

Version

可以說是 Lambda Function 的版本控制,是依附在 Lambda Function 上面,一個 Function 可以有很多個版號來進行迭代。

當發佈新版本,內容會包含以下:

  • Function 的代碼
  • 其它的依賴項目
  • 函數設定
  • 環境變數
  • 用於辨識各種 Function Version ,此版本在 AWS 唯一的 ARN

Alias

可針對 Lambda Function 建立一個或多個別名。

前面提到的 Function Version,單純的版號沒有任何意義,這時候就需要 Alias 來賦予 Version 意義了。類似於 Git 的 Tag 功能。

例如:

我們有 V1, V2, V3 三個 Version。

可以指定 Dev 這個 Alias 指到 V3 這個版本; UAT 這個 Alias 指到 V2 這個版本; PROD 這個 Alias 指到 V1 這個版本。

之後也可以使用 ARN 來存取 Lambda Function 特定的 Version 來進行各個環境的佈署了。

Warm Up

在 Serverless 架構中,AWS Lambda 是一個重要的服務,實際執行業務處理的重要任務。也因為其特性在於有需求才開啟,所以沒有使用自然也就會關閉。
當需要執行的時候,就會有啟動時間,這個 啟動時間也就是 Warm Up 的時間
Warm Up 的時間有長有短,主要用來建立 Runtime 環境,當使用者來存取你的服務的時候,這個 額外的 Warm Up 的時間就有可能會導致使用者體驗不佳。

我參考其他邦友提出來的解決方法:

Warm-up 的機制就是透過建立一個 Lambda 來打一個 flag 到其他 Lambda 來他們別進入睡眠模式

費用

運算時間越久,費用就越高。

參考資料


上一篇
Day 17 - API Gateway
下一篇
Day 19 - Serverless Framework
系列文
從 AWS 菜鳥敲敲雲端的大門37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言