2016-02-08 46 views
5

私はAWSで新しく、Pythonでラムダ関数を作成しています。この関数はdynamodbテーブルストリームを取得し、s3のファイルに書き込みます。ここで、ファイルの名前はテーブルの名前でなければなりません。 誰かがラムダ関数を呼び出すトリガーにテーブル名を取得する方法を教えてもらえますか?AWS dynamodbトリガー関数でテーブル名を取得する方法は?

ありがとうございました。

答えて

11

あなたはAWSの初心者だと言いましたので、私は記述的に答えていきます。

DynamoDBテーブルの 'Stream enabled'設定を 'Yes'に設定し、これをラムダ機能のイベントソースとして設定していることを前提としています。基本的には

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オブジェクト -

この

は、私は私のラムダ関数を呼び出し、ストリームからテーブル名を得た方法でありますファンクションの起動には、パラメータ eventSourceARNが含まれています。この eventSourceARNは、 eventが発生したDynamoDBテーブルを一意に識別するARN(Amazonリソース番号)です。

これはeventSourceARNのサンプル値である -

ARN:AWS:DynamoDBの:米国の東1:111111111111:テーブル/ 試験 /stream/2020-10-10T08:18:22.385

上記の太字のテキストには、のテストがあります。これはテーブル名です。

上記のddbTable = ddbARN.split(':')[5].split('/')[1]行では、最初に ':'、次に '/'でARNを分割して、のテストを取得しようとしました。この値を取得したら、S3 APIを呼び出して、S3のファイルに同じ名前で書き込むことができます。

これが役に立ちます。それを行うには

+0

それは役立ちます。ありがとう。 – AIR

+1

@AIR Cool!それがあなたの問題を解決したと感じたら、答えとしてマークしてください。ありがとう。 – 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 
    } 
} 
関連する問題