Serverless 架構實作
使用 Bitcoin 節點 API 時,我們可以使用 serverless 架構,來省去維護 server 的部分。
我們會使用到 AWS Lambda 與 API Gateway。
以下內容為 2017 年寫的,部分可能需修正。
前言
兩個的用途分別為,Lambda 可以讓我們寫 function,API Gateway 用來寫 path 與 http method讓別人發出某個對應request時去執行Lambda function
實作
1.前往 AWS Lambda
2.選左上的Create a Lambda function
,之後選擇右上的 Author from scratch
3.填寫function名稱,runtime選擇Node.js
將code部分改為
有關handler function的說明 http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
如還沒建立IAM須先建立
4.拉到下面Role選單選擇Create a custom role
然後會跳出一個視窗點選Allow
,這樣Role即是lambda_basic_execution
如還沒建立IAM須先建立
5.點選Next並建立,之後可點擊Test
6.再來前往AWS 的API gateway服務,點選get start
,之後選擇New API
選項,並填寫名稱
7.點選Actions
的下拉選單,選擇Create resource
,輸入path與名稱後按確定
8.點選Actions
的下拉選單,選擇Create method
,然後下拉選單選擇POST
,然後勾選Lambda Function
,之後往下選擇Lambda Region
,輸入剛才的Lambda Function name
即可選擇Save
9.點選閃電圖案的Test
然後下拉點選Test
修改Lambda function
回到aws 的 Lambda 點選剛才創建的function兩下,進入修改code的地方
即可使用node.js模組
或是可使用第三方的模組,並且與資料庫溝通
這時先開啟terminal
index.js
然後輸入
記得把上面new Server的URL與 改為自己的 client.authenticate 改為mLab上的user密碼
如果還沒申請mLab帳戶可以先去https://mlab.com/home,然後註冊帳號並且新增使用者帳號以及資料庫,然後點擊進去新增一個collection插入一個document為以下資料
可以先本地端測試,把exports.handler與context.succeed(doc); 註解掉即可
之後輸入open .
把資料夾的內容index.js和node_modules壓縮成zip
注意:不可直接壓縮資料夾,要進入資料夾後選擇index.js和node_modules再按壓縮,因為index.js必須在zip檔案的根目錄
回到AWS Lambda上的function,將Code entry type
旁的選單選擇為Upload a ZIP file
然後把剛才的ZIP檔案拉上去
之後點選TEST即可下拉看結果
如果下方出現Timeout 3s 可把程式碼中的console拿掉 或是修改configure的Advance的 setting 中 timeout時間
再來前往API Gateway
點選藍色的Create API
點選Actions
選單,點選Create Method
然後選單選擇GET
,右方選擇Lambda Function,選擇地區,輸入function名稱,然後點選save
選擇Deploy API
,選擇new stage然後輸入名稱
過幾秒他會跳出invoke url
,如下圖
記得之後如果修改要重新再deploy
查看Logs
到AWS 的cloudwatch點選左側的Logs
即可看到
使用serverless的Node.js第三方模組
https://serverless.com/framework/docs/
之後資料夾內新增了兩個檔案handler.js
與serverless.yml
之後回到aws 然後點選service
中的IAM
,左側點選Users
,之後選Add user
然後往下拉兩個打勾,之後下一步
選Attach existing policies 然後下方勾選 AdministratorAcces 然後點選 next 之後選Create User
按下Create Access Key
按鈕
這邊記得把Access key ID
跟Secret access key
記下來
然後到terminal將這兩個加入電腦環境變數
(windows須把export改為set)
如果忘記可在建立一個
然後點選左側選單Users
點擊剛創建的user,然後選擇Permissios
Tab 點選Add permissions
然後選擇Attach existing policies directly
在輸入框輸入AdministratorAccess
然後把他加入
然後修改serverless.yml
把region的#
拿掉,後面改為
並且把function下面的event註解拿掉
(yml等描述檔很注重對齊與空格,如果看到indent相關錯誤可以先去查範例然後來檢查)
完整版
最後
回到AWS lambda上看到多出一個function
API gateway也會多出一個
測試
於terminal輸入
測試本地
Last updated