【问题标题】:Identify trigger or find dynamodb table name from lambda function code从 lambda 函数代码中识别触发器或查找 dynamodb 表名
【发布时间】:2021-02-28 10:34:11
【问题描述】:

我有一个 nodejs lambda 函数,其中包含三个通过触发器关联的 dynamodb 表。 我根据使用 lambda 函数代码触发的事件将记录索引到 elasticsearch。 基本上,我需要找出插入记录的表名,或者至少需要识别三者中已执行的触发器。 这是必需的,以便在索引时可以改变 elasticsearch 索引类型名称。

【问题讨论】:

    标签: aws-lambda aws-elasticsearch amazon-dynamodb-streams amazon-dynamodb-index


    【解决方案1】:

    发送到 Lambda 的 DynamoDB 流事件的架构包含 Streams Arn。 Here 是记录的示例 lambda。

    我们可以从eventSourceARN 中提取表名。在这个例子中是BarkTable

    {
        "Records": [
            {
                "eventID": "7de3041dd709b024af6f29e4fa13d34c",
                "eventName": "INSERT",
                "eventVersion": "1.1",
                "eventSource": "aws:dynamodb",
                "awsRegion": "us-west-2",
                "dynamodb": {
                    "ApproximateCreationDateTime": 1479499740,
                    "Keys": {
                        "Timestamp": {
                            "S": "2016-11-18:12:09:36"
                        },
                        "Username": {
                            "S": "John Doe"
                        }
                    },
                    "NewImage": {
                        "Timestamp": {
                            "S": "2016-11-18:12:09:36"
                        },
                        "Message": {
                            "S": "This is a bark from the Woofer social network"
                        },
                        "Username": {
                            "S": "John Doe"
                        }
                    },
                    "SequenceNumber": "13021600000000001596893679",
                    "SizeBytes": 112,
                    "StreamViewType": "NEW_IMAGE"
                },
                "eventSourceARN": "arn:aws:dynamodb:us-east-1:123456789012:table/BarkTable/stream/2016-11-16T20:42:48.104"
            }
        ]
    }
    

    【讨论】:

      【解决方案2】:

      我找到了另一种解决方法来确定表格。 声明了一个表名数组,并检查数组中的表名文本是否存在于 arn 中,并将相同的值设置为变量。下面是一个示例代码-sn-p

      var tables = ["table1", "table2"];
      
      module.exports.es = async(event, context) => {
        for (var i = 0; i < event.Records.length; i++) {
          const record = event.Records[i];
          const arnText = record.eventSourceARN;
          var indexName, x;
          for(x of tables) {
            if(arnText.includes(x)) {
              indexName = x;
              break;
            }
          }
      ....
      }
      

      变量indexName由表名组成

      谢谢

      【讨论】:

        猜你喜欢
        • 2021-12-28
        • 2018-08-29
        • 1970-01-01
        • 2021-01-24
        • 2023-01-02
        • 2020-02-27
        • 2019-04-26
        • 2019-11-19
        • 1970-01-01
        相关资源
        最近更新 更多