2016-02-08 33 views
5

我是AWS新成員,致力於在Python上創建lambda函數。該函數將獲得dynamodb表流並在s3中寫入文件。這裏文件的名稱應該是表的名稱。 有人可以告訴我如何獲取表名稱,如果調用lambda函數的觸發器?如何獲取AWS dynamodb觸發器函數中的表名?

感謝您的幫助。

回答

11

既然你提到你是AWS的新手,我會回答描述性的。

我假設您已將DynamoDB表的「流啓用」設置設置爲「是」,並將其設置爲您的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.' 

基本上包含所有有關負責特定拉姆達特定DynamoDB流的信息event對象函數調用,包含參數eventSourceARNeventSourceARN是ARN(Amazon資源編號),它唯一標識event發生的DynamoDB表。

這是爲eventSourceARN的採樣值 -

ARN:AWS:dynamodb:US-東-1:111111111111:表/ 測試 /stream/2020-10-10T08:18:22.385

注意上面的粗體文字 - test;這是您正在查找的表名

在上面的行ddbTable = ddbARN.split(':')[5].split('/')[1]中,我嘗試先用':'分割整個ARN,然後用'/'分割以獲得值test。一旦你有了這個值,你可以調用S3 API來寫入S3中具有相同名稱的文件。

希望這會有所幫助。

+0

它幫助。謝謝。 – AIR

+1

@AIR酷!如果您覺得它解決了您的問題,請將其標記爲答案?謝謝。 – rk2

+0

record.eventSourceARN.split('/')[1] –

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 
    } 
} 
相關問題