AWS-Lambda 从传入的 S3 Event 里获取信息

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

参考:
配合使用 AWS Lambda 和 Amazon S3 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值