2016年5月24日 星期二

研究Amazon AWS Lambda: (二)新手資源的筆記

AWS Lambda官網建議新手先閱讀的資料,在這篇做些筆記。

References
[1] AWS Lambda webpage: Landing page of official AWS Lambda,基本概念
[2] AWS Lambda: How It Works.:工作原理
[3] programming-model:與實作語言(node.js, JAVA, python)相關的程式結構


Lambda的基本概念[1]

首先是lambda的操作流程

  1. 使用者上傳程式碼到AWS Lambda
  2. 設定Lambda在什麼情況下被喚醒
  3. Lambda開始運作,使用者可以轉身去做其他事
  4. 使用者付費:Lambda被喚醒做事情的這段時間工資由使用者付擔




Lambda可以做什麼事?


  1. 資料處理
    1. 即時檔案處理:資料上傳後,立即被Lambda處理。比如建立圖片縮圖,影片轉碼、檔案編索、驗證內容、篩選資料。
      可以參考The Seattle Times使用Lambda來調整影像的大小,以符合手機/電腦不同的螢幕大小
    2. 即時串流處理:可以用來追蹤應用程式活動,相關應用應與社群行為分析有關。這部份關聯到AWS KINESIS這個服務,目前還不熟悉,在這篇文章先跳過這個部份。
  2. 作為後端程式:處理web, 行動、物聯網及第三方api的request
    1. 行動後端
      使用情境:當使用者在前端上傳一個近況,透過API通知Lambda,Lambda找到使用者的朋友清單,並發出SNS訊息給朋友們
    2. Web application
      使用情境:AWS S3上架設了一個天氣查詢網站,當使用者按下查詢當地天氣的按鈕時,透過API通知Lambda,Lambda在database中取得當地天氣的資料並將該資料回傳給使用者。
這些應用與使用情境其實都是遵行Serverless的概念,程式設計師沒有調校server的需求,只需要設定Lambda這個助手要做什麼事,以及什麼情況下要做這件事。


Lambda的工作原理[2]


  1. lambda的核心:lambda function and event source
  2. lambda function 可以透過 HTTPS or AWS SDKs 喚醒
  3. lambda function由code, configuration information組成。configuration information包含了你想要用多少計算資源(記憶體的量),lambda 存取AWS 資料的權限。在configuration中,使用者也需要去設定一個handler function來處理event data 
  4. Lambda使用的記憶體由programmer指定,而CPU方面,AWS Lambda會自動根據記憶體的大小去分配,基本上是等比例增加的,比如說使用256MB記憶體空間的Lambda function,比起使用128MB記憶體空間的Lambda function的CPU大小是兩倍。
  5. Event Sources: 在以下情況時,可以作為讓Lambda 執行的事件
    1. AWS services 選項非常的多,只能先選幾個介紹

      Amazon S3 是Amazon提供的雲端空間服務,使用者可以上傳檔案到這個空間中,而S3內部資料的增減,也可以作為trigger Lambda 的事件

      Amazon DynaoDB是AWS 的雲端資料庫服務,資料庫的更新也可以作為trigger event

      其他還有Amazon Kinesis, Amazon SNS, Amazon SES, Amazon Cognito, Amazon CloudWatch Logs, AWS CloudFormation, Amazon CloudWatch Events, AWS Config
    2. Scheduled Event
      AWS除了是event-driven的方式被呼叫,他同時也可以作為一個有固定行程的服務,programmer可以設定Lambda function被固定執行的頻率(比如每天執行、每小時執行,或每週執行)。
    3. Other Amazon services (Amazon Echo)
      這是一個很酷的功能,Amazon Echo是包含喇叭、mic的硬體,而Alexa是搭載在上面的語言助理軟體,Alexa有提供一個APIs,去呼叫Lambda進行客製的功能。
    4. On-Demand Lambda Function Invocation: Over HTTPS
      使用Amazon API Gateway將GET, PUT這些request傳給Amazon API Gateway service,然後喚起Lambda function,參考Amazon API gateway
    5. On-Demand Lambda Function Invocation: Build Your Own Event Sources
      使用AWS SDKs or AWS Mobile SDKs 就可以產生Lambda 可以接收的事件

Programming Model[3]

Lambda function 包含這些核心:

  1. Handler:當Lambda function被喚醒時,會馬上呼叫Handler。AWS Lambda將event data作為第一個參數給handler。
  2. The context object and how it interacts with Lambda at runtime :AWS Lambda傳送給handler的第二個參數是context object。簡單來說,context object是用來當Lambda function與AWS Lambda之間handshake的溝通介面
  3. Logs
  4. Exceptions