首页 > 解决方案 > AWS - 如何将 DynamoDb 表数据传递给 Lambda 函数

问题描述

下面是我的table客户DynamoDb

name: string

我已经链接了一个触发器,该触发器将调用 Lambda 函数,该函数又调用我的应用程序端点,该端点将进行数据转换并保存在 SQL DB 中

每当我在上表中添加任何记录或更新记录时,我都可以看到 Lambda 函数被调用。但不确定如何捕获表数据。

我需要通过 Lambda 函数捕获 dynamoDb 表的name值,我可以将其传递给我的端点。customer

新手对此。所以如果太简单请原谅。但找不到可以为我推动这一点的信息。

谢谢!

标签: amazon-web-servicesasp.net-coreaws-lambdaamazon-dynamodb

解决方案


您的 Lambda 函数将收到一个DynamoDB 流记录事件(有关示例事件,请参阅将 AWS Lambda 与 Amazon DynamoDB 结合使用)。

您将在键上映射/循环Records,您将在其中找到带有eventName: INSERT. 在dynamodb键中,您将找到应在您的 lamdba 函数代码中处理的表数据。

{
  "Records": [
    {
      "eventID": "1",
      "eventVersion": "1.0",
      "dynamodb": {
        "Keys": {
          "Id": {
            "N": "101"
          }
        },
        "NewImage": {
          "Message": {
            "S": "New item!"
          },
          "Id": {
            "N": "101"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES",
        "SequenceNumber": "111",
        "SizeBytes": 26
      },
      "awsRegion": "us-west-2",
      "eventName": "INSERT",
      "eventSourceARN": eventsourcearn,
      "eventSource": "aws:dynamodb"
    }
  ]
}

在您的情况下,数据应位于Records[0].dynamodb.NewImage.name.S

如果在表中使用 Node.js 和混合类型,我建议使用AWS.DynamoDB.Converter.unmarshall将 DynamoDB 记录转换为 JavaScript 对象的方法。它允许您执行以下操作:

const newImage = DynamoDB.Converter.unmarshall(event.Records[0].dynamodb.NewImage);

推荐阅读