我们写 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 内容的一些探索.