使用 API Gateway製作一個股價查詢API

Amazon API Gateway 是一種全受管的服務,可讓開發人員輕鬆發佈、維護、監控和保護任何規模的 API. 它的角色有點像是我們一般的網頁程式中, 拿掉後段那些商業邏輯、查詢資料庫、字串處理所剩下的部份. 像是規劃 API網址格式、接傳參數處理, 存取控制這類的任務.

Serverless 架構的概念最近漸漸興起, 由於管理基礎建設始終就是需要心力去照顧的工作, 所以無伺服器架構這種新概念, 不用再管理Server, EC2也不開了, 那或許能再解放一些生產力出來, 讓大家的注意力更集中在有價值的地方.

--

初探 API Gateway

最近在玩 API Gateway 與後端串接 Lambda 吃了一些苦頭, 由於網路上能找到的文件資源大多以 NodeJS居多, 使用 Python 的就比較辛苦些.

以下推薦兩個連結, 能協助使用這樣組合的人迅速通過新手村的考驗:

more ...

使用AWS Lambda 製作一個氣溫資料爬蟲

AWS Lambda 玩了一個禮拜稍微摸熟特性之後, 就想找個小題目來做. 由於以前對於寫網路爬蟲有些經驗, 所以決定改用 Lambda來試試,資料是取材於中央氣象局的即時氣溫資料.

範例程式下載

github傳送門

程式說明

  • my_crawler_tw_temperature_downloader.py : 下載氣溫資料, 並將原始資料暫存於S3
  • my_crawler_tw_temperature_parser.py : 解析資料後,將結果存放於 DynamoDB
  • my_crawler_tw_temperature_process_data.py : 定期將DynamoDB的資料撈出來成為JSON檔案, 也就是上面曲線圖讀進來的資料

  • 前端繪圖Lib是 Flot

事件驅動來源

  • my_crawler_tw_temperature_downloader.py : 每10分鐘執行一次
  • my_crawler_tw_temperature_parser.py : S3產生Event 呼叫本程式(因為上面downloader將網頁存檔到S3)
  • my_crawler_tw_temperature_process_data.py : 每1分鐘執行一次

準備

  • S3:
  • 開一個新的bucket 準備放置許多抓下來的網頁.
  • 輸出的JSON網頁也會放於此, 由於 AJAX跨網域讀資料有些限制, 所以你要對Bucket的CORS做設定,允許其他網域來取資料.

  • DynamoDB 先建好以下Table …

more ...

AWS Lambda - 從傳入的 S3 Event 裡取得資訊

我們寫 Lambda Function的時候, 要實作 handler . 當事件驅動了這個 function 的時候, 相關資訊會經由 event 這個參數傳進來.

def handler_name(event, context): 
    ....
    return some_value  

接下來就探討一下, 我們會從 event 裡看到什麼樣的資訊.

準備動作

AWS Lambda 小練習: 氣溫資料爬蟲 為例, 我希望每當爬蟲把網頁抓回來丟上S3之後, S3的trigger 就能自動呼叫另一隻 Parser 用途的Lambda Function, . 所以至少我得知道來源是哪個檔案才能進行下一步.

以下是新增 trigger步驟:

對著你寫好的 parser lambda function, 新增一個由 S3 發動的 trigger. 這邊順便加了一些條件. 這邊只接受物件上傳 Put Event (其他的event …

more ...

初探 AWS Lambda

最近摸索了一陣子 AWS Lambda , 覺得這是個有潛力的新產品 , 所以來聊一下這個.

Lambda 是一種無伺服器(Serverless), 而且設計成事件驅動的運算服務. 白話一點來說, 你可以將你的 code 上傳, 當有事件產生(例如cronjob , 或者S3有新的檔案被上傳上來) , 你的code 就會在瞬間(零點幾秒以內)被叫起來執行. 由於你不用管 Server如何維護, 或者自動擴展之類的事, 所以叫做 Serverless ,這些都被處理了,我們只需搞定寫程式即可.

HelloWorld

AWS Lambda 目前支援 NodeJS,Java, Python2.7以及C# , 以 Python 為例, 這邊就是新Function的空白樣板, 程式進入點就在 lambda_handle(event,context)這邊.

--

按 Test 即可手動執行, 以下是執行結果:

--

以上是程式輸出, 最後記載了這程式執行的統計資料 …

more ...