本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
Serverless 使用版本:1.0.0-rc.2
這點要先提的原因是框架還在開發中,這版本已經與之前的版本也有不少差異,但似乎簡化不少。
Serverless 的概念是把專案重點強調在開發實作,而非複雜的管理,網站標語也是滿清楚的描述「Build more, manage less」,不是減少伺服器而是不需要擔心伺服器的技術整合框架。
這類框架主要是面對各家(Amazon, Microsoft, Google, IBM)推出雲端服務項目中的程序模組化執行服務而出現,概念如同瀏覽器版本很多,兼顧同樣的操作行為卻要寫不同版本的程式,這樣會有管理上的問題,所以類似 jQuery 這種的整合兼容技術也隨之誕生。
目前大部分的測試資料都還是針對 AWS 的服務,其他文件也許之後會完整些吧!
前置準備
- AWS 登入帳號
- 使用 IAM 服務申請新的使用者(一組金鑰),並授權(attach)
AdministratorAccess
- 將取得的ID跟KEY export
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
- 使用 npm 安裝 serverless (NodeJS的安裝建議可以使用nvm)
npm install -g serverless
- 建立專案 flexform (專案名稱自訂),使用 NodeJS 當專案的範本
serverless create --template aws-nodejs --name flexform --path=flexform
- 到專案目錄(flexform)下部署上AWS來看看結果
serverless deploy -v
-
部署完成後測試預設專案的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還有附帶運算時間跟使用的記憶體資源還有輸出的資料量,如此斤斤計較的情況,開發者也要對自己的需求非常明確,其實真的是一個不錯的服務!
請問IAM跟Lambda那邊有要怎麼設定嗎
照我上面說的取得 AdministratorAccess 權限的 IAM後在設定 Serverless 就好囉! 對了,如果慣用 nodejs 可以試試這款新的 https://claudiajs.com/ serverless 工具