AWS Lambda 爬蟲建置

TONY
TONY
Aug 22, 2017 · 5 min read

簡介

時間

2016.08

目標

將原本AWS EC2上的爬蟲轉為使用AWS Lambda的服務(聽說省下很多開機器的錢~

流程

主要為三部分的 Lambda function,下方流程圖請把桶子看成路徑XD

簡易的架構圖(這邊的桶子請忽略它, 指的是路徑)
  • 第一部分

主要負責定時(每小時為單位)去檢查目標網站並爬取及清洗更新過的資料

  • 第二部分

主要也為定時去合併,將合併過後的檔案存入備份的路徑下及第三部分所監聽的路徑下

  • 第三部分

當監聽的路徑下有出現監聽的任務出現,就會採取動作。任務是將資料做tagging、情緒分數…,並且存入ES


實作

Lambda Function

Lambda function code

程式碼設置有分三種方法

  1. 直接code inline

其中,對於 python 打包的方式,必須將相依套件一起加入.zip檔內,import的根目錄為主程式的資料夾下

⚠️ 需要注意幾件事情

  • lambda 同時存在的數量有著軟限制

Configuration

Lambda function handler and role

Handler預設為 lambda_function.lambda_handler

前面的lambda_function 是主程式.py檔的名稱

後面的lambda_handler 則是需要調用的主要方法 ( 會傳入兩個參數 event, context )

Advanced settings

  • 需注意 Timeout要依照Function的用途設定,時間到Function會直接跳掉,錯誤訊息如下

Trigger Events

點擊 Add trigger 可以調整觸發 lambda function 的方法。

S3

由s3來觸發,我們可以選定觸發的bucket、event type、prefix和suffix來指定特定區域和檔案種類的觸發

Schedule

我們先在CW內建立好Rules,接著在此選定( 也可直接在 CW 內設定完成 ),此功能為排程。

此外,CW Schedule 還提供自定義的event傳入,非常好用。


Lambda Event

lambda function 可以接受觸發的event資訊。在這裡可以自訂義event所帶的資訊

  • 範例一 ( s3 put )

我們以s3 put為範例,當物件被put到lambda function所偵測的路徑下,lambda function則會被啟動,以下是 S3 Put 的 template,如此可以針對觸發 event 物件的bucket和key做應用

  • 範例二( 自定義event )

在Cloud Watch中,我們使用的Schedule排程,我們可以對驅動的lambda給予參數。

{"name": "Mary","age": 18,}

接著,在我們程式碼中就可以使用這個自定義的event

def lambda_handler(event, context):    name = event['name']    age= event['age']

Lambda Context

在Context中,我們可以得到lambda運行的訊息。

def lambda_handler(event, context):    get_rt = context.get_remaining_time_in_millis()    log_gn = context.log_group_name    log_sn = context.log_stream_name

所遇到的問題

  • 須確保 RSS seeds 內的網站能否在一隻 lambda 中掃完

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade