2016年5月26日 星期四

研究Amazon AWS Lambda: (三)Lambda function如何被喚醒


pull events v.s. push events

Lambda是用什麼機制去偵測特定的事件是否發生的呢?比如說Lambda要怎麼知道Amazon S3 bucket中的資料是否變動?

答案是AWS Lambda採用了pull(拉)與push(推)這兩個方式(event modle),可以分別類比成主動與被動的行為。

push(Lambda是被動的)

有的事件產生者會主動將event 的發生push給AWS Lambda知道並使lambda function被執行,在這個情形下,AWS Lambda是處於一個被動的狀態;

pull(Lambda是主動的)

而另一種模式則是事件產生者只發佈目前有event發生,但需要AWS Lambda主動去將該event pull回來並使lambda function執行,這就是這兩種event model的基本概念。

當AWS Lambda需要使用AWS 其他資源(比如S3 bucket, 或讀取DynamoDB table),Lambda必須獲得該有的授權。更多資訊參考AWS Lambda Permissions Model

Event source mapping

因為我們不只會有一個event 與 Lambda function,因此他們之間需要存在一個對應關係

for "pull" case

在AWS Lambda,用相關的AWS Lambda API產生相關的mapping

for "push"case

在事件的產生者端,由事件產生者提供的APIs來產生相關的mapping

More About Pull Event Model

當event sources 是AWS Kinesis, AWS DynamoDB Streams時使用。
如下圖,這個例子[1]是一個App將資料寫入Amazon Kinesis,而Lambda會去偵測是否有資料增減的事件產生,若有,則呼叫Lambda function執行,這個主動將溪件取回(pull)來處理的動作就像圖示中的"手"一樣。

More About Push Event Model

有些event sources可以主動將event 送(i.e. "Push")給AWS Lambda,換句話說,AWS Lambda是一個被動的角色。所以Lambda function是由event source所直接喚醒的。

有push功能的event souces有Amazon S3, Amazon SNS, Amazon Cognito, Amazon Echo等。

舉其中Amazon S3的例子而言,Amazon S3有提供一個API讓使用者可以設定當特定的事件發生時,要引發哪一個Lambda function。更多說明請參考Configuring Amazon S3 Event Notifications.

如下圖,這個例子的使用情境是使用者在Amazon S3 Bucket中產生一個物件,當Amazon S3 偵測到這個事件時引發指定的Lambda function(i.e. Amazon S3 "push" event and "invoke" AWS Lambda function)。



references:
[1]http://docs.aws.amazon.com/lambda/latest/dg/intro-invocation-modes.html