Aws lambda代码解释

时间:2018-03-29 10:54:42

标签: aws-lambda

任何人都可以解释下面代码的工作原理。

"def lambda_handlerOut(event, context):
        if len(event) > 0:  
            success=1
            print("length of event outside for--"+str(len(event)))
            for record in event['Records']: 
                print("length of event--"+str(len(event)))
                bucket=record['s3']['bucket']['name']
                key=record['s3']['object']['key']
                print("Bucket--"+bucket)
                print("File that triggered this event--"+key)

提前致谢。

此致

Eleena Jose

1 个答案:

答案 0 :(得分:1)

这是一个接收S3事件的Lambda - 例如创建新文件的PutObject请求。

该方法是标准的Python函数 - 有关更多详细信息,请查看Lambda Function Handler Docs

事件的结构定义为here,但基本上有一些记录正在迭代,并且,对于每个记录,正在提取和打印存储桶和密钥。

因此,更详细(他们引用的行上方的注释):

# standard lambda event handler definition
def lambda_handlerOut(event, context):

    # make sure that something was given - likely unneeded
    if len(event) > 0:  
        success=1
        print("length of event outside for--"+str(len(event)))

        # loop through each record in Records
        for record in event['Records']: 
            print("length of event--"+str(len(event)))

            # take a look at the event structure - just extracting parts
            bucket=record['s3']['bucket']['name']

            # key is the object name - that is, the file
            key=record['s3']['object']['key']

            print("Bucket--"+bucket)
            print("File that triggered this event--"+key)

修改

正如我上面所述,event对象中的数据类似于:

{  
   "Records":[  
      {  
         "eventVersion":"2.0",
         "eventSource":"aws:s3",
         "awsRegion":"us-east-1",
         "eventTime":"1970-01-01T00:00:00.000Z",
         "eventName":"ObjectCreated:Put",
         "userIdentity":{  
            "principalId":"AIDAJDPLRKLG7UEXAMPLE"
         },
         "requestParameters":{  
            "sourceIPAddress":"127.0.0.1"
         },
         "responseElements":{  
            "x-amz-request-id":"C3D13FE58DE4C810",
            "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"testConfigRule",
            "bucket":{  
               "name":"mybucket",
               "ownerIdentity":{  
                  "principalId":"A3NL1KOZZKExample"
               },
               "arn":"arn:aws:s3:::mybucket"
            },
            "object":{  
               "key":"HappyFace.jpg",
               "size":1024,
               "eTag":"d41d8cd98f00b204e9800998ecf8427e",
               "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
               "sequencer":"0055AED6DCD90281E5"
            }
         }
      }
   ]
}

因此,举例来说,bucket=record['s3']['bucket']['name']首先从数据中获取s3记录,然后离开:

"s3":{  
    "s3SchemaVersion":"1.0",
    "configurationId":"testConfigRule",
    "bucket":{  
        "name":"mybucket",
        "ownerIdentity":{  
            "principalId":"A3NL1KOZZKExample"
         },
         "arn":"arn:aws:s3:::mybucket"
     },
     "object":{  
         "key":"HappyFace.jpg",
         "size":1024,
         "eTag":"d41d8cd98f00b204e9800998ecf8427e",
         "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
         "sequencer":"0055AED6DCD90281E5"
     }
}

从那里,它获得bucket节:

"bucket":{  
    "name":"mybucket",
     "ownerIdentity":{  
         "principalId":"A3NL1KOZZKExample"
      },
      "arn":"arn:aws:s3:::mybucket"
}

最后,name

"name":"mybucket"

这被分配给稍后打印出来的变量桶。 key(此示例中的文件名)以相同的方式工作,但获取event的不同部分。

这现在有意义吗?