自從 2014年尾的AWS re:Invent 推出 Lambda 至今也兩年多了, 最近覺得Serverless 的概念是未來有潛力的東西,而不是個流行詞彙而已。 所以最近的短期目標就是抽空把 re:Invent 2016 的 Serverless Computing Mini Con 這個主題的十幾個影片盡量看完, 順便做點筆記。

--

由於 Lambda 有一個「最多300秒便會強迫timeout」的設計, 所以一旦拆成許多小型的程式, 到最後可能會變成圖中複雜組成的樣子. 而且現實生活的問題比較複雜.所以假如想讓許多的Lambda function 有秩序的處理問題,例如:

  • I want to sequence functions : 想要循序的執行
  • I want to run functions in parallel : 想要平行的執行許多functions
  • I want to select functions based on data
  • I want to retry functions: Retry功能
  • I want try/catch/finally: Try/Catch功能
  • I have code that runs for hours : 長時間的執行,最久可以執行一年

想像一下一個系統是許多Lambda function一條龍串起來的情形, 雖然看似簡單, 其實假如開始考慮到 retry/timeout 等等各種錯誤處理之類的就會很麻煩.

所以需要一個協調者角色的產品, 它必須要有的功能: Scales out Doesn't lose state Deal with errors/timeouts Easy to build & operate * Auditable

AWS Step Functions

--

AWS Step Functions 就是這樣的產品, 在影片裡都以 State Machine(狀態機) 來稱呼它, 它可以讓用戶規劃圖型化的工作流程,來控制你寫的Lambda function.

Amazon States Language

  • 使用方式是上傳一個特定規則的 JSON 檔案 , 叫做 Amazon State Language :

--

https://states-language.net/spec.html

  • 開發期間如果需要一個語法檢查器, 有個 ruby 寫的叫做 statelint 可以使用.

https://github.com/awslabs/statelint

收費

依"狀態轉換"收費, 比方說一個完整 Start -> 執行一個Lambda Function -> End 的流程, 跑完一趟就算兩次的"狀態轉換".

  • 每1000次的"狀態轉換" 收費 $0.025
  • 每月4000次的免費額度(新舊客戶皆適用)

參考資料