如何在 AWS Lambda 函数中获取 eventName?

GBM*_*BMR 1 python amazon-web-services aws-lambda

我对 AWS Lambda 很陌生。当我的表被修改时,我的 Lambda func 和 DynamoDB 表之间有一个触发器设置。Lambda 函数成功将事件打印到云监视日志。我有麻烦搞清楚如何检查事件是INSERTMODIFY在dynamoDB。我想检查一个if声明。当我刚print(event)得到

{
  "Records": [
    {
      "eventID": "26e6ac4f1c16fc40fd91536430c1ac72",
      "eventName": "MODIFY",
      "eventVersion": "1.1",
      "eventSource": "aws:dynamodb",
      "awsRegion": "us-east-1",
      "dynamodb": {
        "ApproximateCreationDateTime": 1612293148,
        "Keys": {
          "id": {
            "S": "d66ec59b-b807-4db9-96ed-3ebd3638779a450b7a75-6dce-4be9-babf-1077adb84b02"
          }
        },
        "NewImage": {
          "__typename": {
            "S": "Conversation"
          },
          "members": {
            "L": [
              {
                "S": "450b7a75-6dce-4be9-babf-1077adb84b02"
              },
              {
                "S": "d66ec59b-b807-4db9-96ed-3ebd3638779a"
              }
            ]
          },
          "isRead": {
            "BOOL": false
          },
          "recipient": {
            "S": "d66ec59b-b807-4db9-96ed-3ebd3638779a"
          },
          "latestMessage": {
            "S": "Hey man"
          },
          "id": {
            "S": "d66ec59b-b807-4db9-96ed-3ebd3638779a450b7a75-6dce-4be9-babf-1077adb84b02"
          },
          "latestMessageSenderSub": {
            "S": "450b7a75-6dce-4be9-babf-1077adb84b02"
          },
          "updatedAt": {
            "S": "02/02/2021 - 14:12:27"
          }
        },
        "OldImage": {
          "__typename": {
            "S": "Conversation"
          },
          "members": {
            "L": [
              {
                "S": "450b7a75-6dce-4be9-babf-1077adb84b02"
              },
              {
                "S": "d66ec59b-b807-4db9-96ed-3ebd3638779a"
              }
            ]
          },
          "isRead": {
            "BOOL": false
          },
          "recipient": {
            "S": "d66ec59b-b807-4db9-96ed-3ebd3638779a"
          },
          "latestMessage": {
            "S": "Yooooo"
          },
          "id": {
            "S": "d66ec59b-b807-4db9-96ed-3ebd3638779a450b7a75-6dce-4be9-babf-1077adb84b02"
          },
          "latestMessageSenderSub": {
            "S": "450b7a75-6dce-4be9-babf-1077adb84b02"
          },
          "updatedAt": {
            "S": "02/02/2021 - 12:40:09"
          }
        },
        "SequenceNumber": "47015900000000007518411700",
        "SizeBytes": 753,
        "StreamViewType": "NEW_AND_OLD_IMAGES"
      },
      "eventSourceARN": "arn:aws:dynamodb:us-east-1:69639064567851005:table/Conversation-jklhofiuhvouerhoh-dev/stream/2021-01-23T21:25:34.783"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

但是将我的if语句添加到我的 lambda func 我收到以下错误

[ERROR] KeyError: 'eventName'Traceback (most recent call last):  File "/var/task/lambda_function.py", line 6, in lambda_handler    if event['eventName'] == 'MODIFY':

拉姆达函数:

import json

def lambda_handler(event, context):
    # TODO implement
    print(event)
    if event['eventName'] == 'MODIFY':
        #Run some code
        print('MODIFY')
    elif event['eventName'] == 'INSERT':
        #Run some code
        print('INSERT')
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Run Code Online (Sandbox Code Playgroud)

我怎样才能获得事件名称?

zyd*_*zyd 5

您在 Lambda 函数中接收的事件在“记录”键下列为数组。因此,要找到事件名称,您需要执行以下操作:

for e in event['Records']:
    if e['eventName'] == 'MODIFY':
        print('MODIFY')
    elif e['eventName'] == 'INSERT':
        #Run some code
        print('INSERT')
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
Run Code Online (Sandbox Code Playgroud)