2016-02-08 20 views
5

AWS ile yeni ve Python üzerinde bir lambda işlevi oluşturma üzerinde çalışıyorum. Fonksiyon, dynamodb tablosu akışını alacak ve s3'te bir dosyaya yazacaktır. Burada dosyanın adı, tablonun adı olmalıdır. Birisi lambda işlevini çağıran tetikleyici tablo ismini nasıl alacağımı söyler misiniz?AWS dynamodb tetikleme işlevinde tablo adı nasıl alınır?

Yardımlarınız için teşekkürler.

cevap

11

AWS’de yeni olduğunuzu belirttiğinizden beri, tanımlayıcı olarak cevaplayacağım.

DynamoDB tablonuz için 'Aktarım etkin' ayarını 'Evet' olarak ayarladığınızı ve bunu lambda işlevinize bir olay kaynağı olarak ayarladığınızı varsayıyorum. Temelde

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.' 

, o belirli lambda sorumluydu belli DynamoDB akışla ilgili tüm bilgileri içerir event nesne -

Bu

benim lambda fonksiyonu çağrılan akışından tablo adını neden oluyor işlevi çağırır, eventSourceARN parametresini içerir. Bu eventSourceARN, event'un gerçekleştiği DynamoDB tablonuzu benzersiz olarak tanımlayan ARN'dir (Amazon Kaynak Numarası).

Bu

eventSourceARN için örnek bir değer -

arn: aws: dynamodb: us-doğu-1: 111111111111: Tablo/Test /stream/2020-10-10T08:18:22.385

Yukarıdaki kalın yazıya dikkat edin - testi; Bu, aradığınız tablo adı tablosudur. Yukarıdaki I ile tüm ARN bölünmüş çalıştık hattı ddbTable = ddbARN.split(':')[5].split('/')[1] olarak

':', önce ve sonra tarafından '/' değeri testi elde etmek için. Bu değere sahip olduğunuzda, aynı ada sahip S3'te bir dosyaya yazmak için S3 API'lerini çağırabilirsiniz.

Bu yardımcı olur umarım.

+0

O yardımcı olur. Teşekkürler. – AIR

+1

@AIR Cool! Sorunu çözdüğünü düşünüyorsanız, lütfen cevap olarak işaretleyebilir misiniz? Teşekkürler. – rk2

+0

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

0

bir yolu regex kullanarak Scala eşleşen deseni vasıtasıyla olacaktır yapmalı:

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 
    } 
} 
İlgili konular