Serverless 框架搭配 AWS Lambda 實作練習筆記

Serverless 使用版本:1.0.0-rc.2

這點要先提的原因是框架還在開發中,這版本已經與之前的版本也有不少差異,但似乎簡化不少。

Serverless 的概念是把專案重點強調在開發實作,而非複雜的管理,網站標語也是滿清楚的描述「Build more, manage less」,不是減少伺服器而是不需要擔心伺服器的技術整合框架。

這類框架主要是面對各家(Amazon, Microsoft, Google, IBM)推出雲端服務項目中的程序模組化執行服務而出現,概念如同瀏覽器版本很多,兼顧同樣的操作行為卻要寫不同版本的程式,這樣會有管理上的問題,所以類似 jQuery 這種的整合兼容技術也隨之誕生。

目前大部分的測試資料都還是針對 AWS 的服務,其他文件也許之後會完整些吧!

前置準備

  1. AWS 登入帳號
  2. 使用 IAM 服務申請新的使用者(一組金鑰),並授權(attach)AdministratorAccess
  3. 將取得的ID跟KEY export

    export AWS_ACCESS_KEY_ID=<key>

    export AWS_SECRET_ACCESS_KEY=<secret>

  4. 使用 npm 安裝 serverless (NodeJS的安裝建議可以使用nvm

    npm install -g serverless

  5. 建立專案 flexform (專案名稱自訂),使用 NodeJS 當專案的範本

    serverless create --template aws-nodejs --name flexform --path=flexform

  6. 到專案目錄(flexform)下部署上AWS來看看結果

    serverless deploy -v

  7. 部署完成後測試預設專案的hello方法

    serverless invoke --function hello

開發

以上的七個步驟就是一個serverless專案的過程,之後就是「開發->部署->測試」的流程,這邊就是先認識他的架構

版本初始化後只有三個檔案,event.js,handler.js,serverless.yml,分別是測試檔案、主程式、服務描述檔

服務描述那裡預設不會使用常見的http事件(event),所以build完測試完還一頭霧水,不知道是從哪開始!所以要去打開設定,部署完後會回傳一組服務請求的連結,使用curl或瀏覽器去測試。

至於怎麼開發呢?

其實就跟平時寫 NodeJS 專案的做法一樣,在 handle.js 中 require 你要使用的 library 或是文件,主程式中的 public 方法會寫成 module.exports.xxx xxx就是方法名稱,這名稱也需要定義在服務描述檔中才會可以被外部呼叫!

測試

這段落只是想說如果服務要公開,不想使用內建超長、醜的連結當連結的話可以到 API Gateway 中設定 Custom Domain ,但需要綁定 SSL ,這邊推薦使用免費的StartSSL

結論

觀察下來,最經濟實惠的自用組合會是:AWS Lambda+DynamoDB ,但偏偏實在沒有什麼 NoSQL 的需求,選 RDS 就太浪費了,自己主機用不完,還要去開個跟主機一樣貴的資料庫,外連資料庫也會增加計費時間,不是個CP高的執行選項。

原本還想寫個彈性的表單來每個活動案接,但後來想到 NoSQL 射後不理的特性來當關聯資料庫用太詭異,因此作罷~

觀察到滿多人使用它來當作對談式機器人的後台,可惜目前我機器人已經有串好資料庫用,硬轉過去也沒有意思,先觀望著吧!

最後,測試完了要移除就使用

serverless remove

結束這回合。

哦對了! Lambda跟API Gateway的計價方式都是根據請求,而Lambda還有附帶運算時間跟使用的記憶體資源還有輸出的資料量,如此斤斤計較的情況,開發者也要對自己的需求非常明確,其實真的是一個不錯的服務!

Facebook 外掛整合

Share:

  • lily

    請問IAM跟Lambda那邊有要怎麼設定嗎

    • 照我上面說的取得 AdministratorAccess 權限的 IAM後在設定 Serverless 就好囉! 對了,如果慣用 nodejs 可以試試這款新的 https://claudiajs.com/ serverless 工具