如何在AWS dynamodb触发器函数中获取表名?

时间:2016-02-08 20:39:33

标签: amazon-dynamodb aws-lambda

我是AWS新手并致力于在Python上创建lambda函数。该函数将获取dynamodb表流并写入s3中的文件。这里文件的名称应该是表的名称。 如果调用lambda函数的触发器,有人可以告诉我如何获取表名吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:18)

由于您提到您是AWS新手,我将以描述性方式回答。

我假设您已将DynamoDB表的“Stream enabled”设置为“Yes”,并将其设置为lambda函数的事件源。

这就是我从调用lambda函数的流中获取表名的方法 -

def lambda_handler(event, context):
   print(json.dumps(event, indent=2)) # Shows what's in the event object
   for record in event['Records']:
      ddbARN = record['eventSourceARN']
      ddbTable = ddbARN.split(':')[5].split('/')[1]
      print("DynamoDB table name: " + ddbTable)
   return 'Successfully processed records.'

基本上,包含有关特定lambda函数调用的特定DynamoDB流的所有信息的event对象包含参数eventSourceARN。此eventSourceARN是唯一标识发生event的DynamoDB表的ARN(Amazon资源编号)。

这是eventSourceARN -

的示例值
  

ARN:AWS:dynamodb:US-东-1:111111111111:表/的测试 /stream/2020-10-10T08:18:22.385

请注意上面的粗体文字 - 测试;这是您要查找的表名

在上面的ddbTable = ddbARN.split(':')[5].split('/')[1]行中,我尝试先将整个ARN拆分为':',然后再按'/'拆分,以获得值测试。获得此值后,可以调用S3 API以使用相同的名称写入S3中的文件。

希望这有帮助。

答案 1 :(得分:2)

请注意,并非始终提供eventSourceArn。从今天的测试来看,我没有看到eventSourceArn记录在案。您还可以参考链接:

答案 2 :(得分:0)

一种方法是使用正则表达式在Scala中进行模式匹配:

val ddbArnRegex: Regex = """arn:aws:dynamodb:(.+):(.+):table/(.+)/stream/(.+)""".r

def parseTableName(ddbARN: String): Option[String] = {
  if (null == ddbARN) None
  ddbARN match {
    case ddbArnRegex(_, _, table, _) => Some(table)
    case _ => None
  }
}