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部分改為

exports.handler = function(event, context) {
  context.succeed("你好!");
};

有關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,如下圖

點選左側Resource在點選Action即可修改API gateway

記得之後如果修改要重新再deploy

查看Logs

到AWS 的cloudwatch點選左側的Logs即可看到

使用serverless的Node.js第三方模組

https://serverless.com/framework/docs/

之後資料夾內新增了兩個檔案handler.jsserverless.yml

之後回到aws 然後點選service中的IAM,左側點選Users,之後選Add user然後往下拉兩個打勾,之後下一步

選Attach existing policies 然後下方勾選 AdministratorAcces 然後點選 next 之後選Create User

按下Create Access Key按鈕

這邊記得把Access key IDSecret access key記下來

然後到terminal將這兩個加入電腦環境變數

(windows須把export改為set)

如果忘記可在建立一個

然後點選左側選單Users點擊剛創建的user,然後選擇Permissios Tab 點選Add permissions 然後選擇Attach existing policies directly

在輸入框輸入AdministratorAccess然後把他加入

然後修改serverless.yml 把region的#拿掉,後面改為

並且把function下面的event註解拿掉

(yml等描述檔很注重對齊與空格,如果看到indent相關錯誤可以先去查範例然後來檢查)

完整版

最後

成功後會給你一個可以去request的連結

回到AWS lambda上看到多出一個function

API gateway也會多出一個

測試

於terminal輸入

測試本地

Last updated

Was this helpful?