自從 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次的免費額度(新舊客戶皆適用)