【问题标题】: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由表名组成
谢谢