我們寫 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 如:物件刪除、搬移的都忽略)
如此一來, 只要是爬蟲爬回來的, 或是你手動上傳到 S3 的資料, 都能觸發 trigger .
觀察 event 內容
以下是一個測試用的 lambda function. 只加了一行, 那就是 print(event) ,先全部倒出來看看.
def lambda_handler(event, context):
print(event)
return None
然後我們到 CloudWatch-Log 功能 , 看看剛才print()倒出來了什麼東西
格式整理一下:
{
'Records': [{
'eventVersion': '2.0',
'eventTime': '2017-02-13T10:14:13.925Z',
'requestParameters': {
'sourceIPAddress': '111.111.111.111'
},
's3': {
'configurationId': '38f2a1d6-3899-48aa-9b76-56989c44897b',
'object': {
'eTag': '96eb4b02334c278c2827caaf24078ad2',
'sequencer': '0058A186F5D93B3962',
'key': '1486553116992.htm',
'size': 41356
},
'bucket': {
'arn': 'arn:aws:s3:::test.fan',
'name': 'test.fan',
'ownerIdentity': {
'principalId': 'AUMOGSY6CG5VP'
}
},
's3SchemaVersion': '1.0'
},
'responseElements': {
'x-amz-id-2': 'SMcbhKhR9x/R7cKMWsYwA9xl+cXLHcfDNyO2uK24L1eaaFU+Mq8To2CUowPIfkUh',
'x-amz-request-id': '7702F37D2BEF90AB'
},
'awsRegion': 'ap-southeast-1',
'eventName': 'ObjectCreated:Put',
'userIdentity': {
'principalId': 'AUMOGSY6CG5VP'
},
'eventSource': 'aws:s3'
}]
}
這是 python 的 dict 資料結構格式, dict 又包著 list 又包著 dict 的結構有些複雜.. 不過我們只需目視就可以看到一些有用的資訊, 例如檔名, bucket名稱, size 等等.
以下是取出來的方法:
def lambda_handler(event, context):
dict_event = event['Records'][0]
s_eventName = dict_event['eventName']
s_eventTime = dict_event['eventTime']
s_object_name = dict_event['s3']['object']['key']
s_bucket = dict_event['s3']['bucket']['name']
print [s_eventName,s_eventTime,s_object_name,s_bucket]
return None
執行結果如下:
[u'ObjectCreated:Put', u'2017-02-13T10:14:13.925Z', u'1486553116992.htm', u'test.fan']
以上就是對於 event 內容的一些探索.