2016年5月23日 星期一

研究Amazon AWS Lambda: (一)Overview

前言

參加AWS Commit Taipei 2016 時第一次接觸到AWS Lambda 這個產品,直覺這個服務可以做的應用非常的多,但一切的一切有些模糊,於是想要花點時間來研究整理一下這個服務的操作流程、有哪些使用情境、跟其他服務有什麼差別,以及使用這個服務需要多少錢,有什麼限制等等這些資訊。此外想寫這個系列文章的主要動機也是發覺網路上沒有太多用中文寫的AWS Labmda介紹,於是也想要寫下並分享相關知識的記錄。

AWS Lambda是什麼?

save your time:watch Introduction to AWS Lambda@youtube first

使用者可以上傳程式碼(目前支援node.js, JAVA, 以及python),以及"Lambda function "到Lambda上,而AWS Lambda會負責管理好server端如何運作這些程式碼[1]。如下圖,Lambda在 Amazon 雲端運算服務(AWS)中是屬於"運算"服務中的其中一項。

使用者可以在以下情況中使用AWS Lambda:
1. 把Lambda當作一個事件處理的幫手(event-driven compute service):比如說當存放在AWS S3 bucket的資料有變動時,Lambda就會自動被喚起去執行使用者囑附的工作。
2. 使用者透過Amazon API Gateway或API calls等方式發送命令(HTTP requests)給Lambda,讓Lambda去執行指定的動作

Lambda只有在需要的時候才會被執行(特定事件或使用者下指令),並且會根據流量auto-scale。使用者不太需要擔心需要實作適用小流量的版本(few requests per day),或大流量的版本(thousands per second)因為auto-scale也是Lambda提功服務的feature之一。

Lambda跟EC2的差別

比較明瞭的區分方式是在於使用者需要面對什麼。

EC2,使用者面對的是一台電腦,一台重灌好的電腦,但是什麼都沒有,所以今天如果使用者想要把這台電腦當成是網站的server,那使用者知道要怎麼安裝apache或是nginx等hosting service,或是當使用者想要在這個電腦上學習怎麼用linux環境寫C的程式,那使用者就要先確認好compiler的指令、參數等。換句話說,如果使用EC2,使用者除了自己要用程式實現的功能外,也需要熟悉怎麼去架設正確的環境。另一個角度去思考這件事情呢,就是使用EC2,使用者保有很大的空間去調校系統,比如環境的語言啦,網路設定啦,儲存運算要用多少資源等等比較系統層面的設定。

Lambda,使用者面對的是怎麼用指定的語言去做自己想要的功能,並且需要閱讀相關的開發指南,去把指定的程式(lambda function, and node.js/JAVA/python file)在AWS console中設定以及上傳。所以說使用Lambda的話,在環境架設方面需要花費的心力就省去很多。總的來說,因為Lambda的使用環境是限制的,所以只要是環境限制的範圍內(在develope guide中可以找到的功能),使用者都可以專心在怎麼實作出想要的功能,而系統層面的問題,Lambda會處理掉

"AWS Lambda manages the compute fleet that offers a balance of memory, CPU, network, and other resources. "[1]

題外話,筆者很喜歡AWS Commit 中聽到的一句話,是關於Amazon的企業文化:只要一件事情被重複做了兩次,那這件事情就需要/可以被自動化。也許Lambda會被推出,也是工程師因為不停的調校系統環境搞得煩死了,索性設計出一個服務來自動調校系統環境而衍生出來的服務呢!

相關應用

以下是筆者想到使用AWS Lambda的服務(草稿中)
(1) 固定每天去擷取open-data並產出當天版本的api,相關技術可以參考将 AWS Lambda 用于计划的事件
(2) 前端每五秒拍下一張影像並上傳到AWS S3,而Lambda在AWS S3資料有新增的時候被啟動,運行讀取影像,影像辨視人臉,並將人臉存入資料庫的動作,再把資料庫的更新顯示在前端的介面上(AWS Commit 現場DEMO Case)

References: