私はAWSで新しく、Pythonでラムダ関数を作成しています。この関数はdynamodbテーブルストリームを取得し、s3のファイルに書き込みます。ここで、ファイルの名前はテーブルの名前でなければなりません。 誰かがラムダ関数を呼び出すトリガーにテーブル名を取得する方法を教えてもらえますか?AWS dynamodbトリガー関数でテーブル名を取得する方法は?
ありがとうございました。
私はAWSで新しく、Pythonでラムダ関数を作成しています。この関数はdynamodbテーブルストリームを取得し、s3のファイルに書き込みます。ここで、ファイルの名前はテーブルの名前でなければなりません。 誰かがラムダ関数を呼び出すトリガーにテーブル名を取得する方法を教えてもらえますか?AWS dynamodbトリガー関数でテーブル名を取得する方法は?
ありがとうございました。
あなたは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のファイルに同じ名前で書き込むことができます。
これが役に立ちます。それを行うには
一つの方法は、正規表現を使って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
}
}
それは役立ちます。ありがとう。 – AIR
@AIR Cool!それがあなたの問題を解決したと感じたら、答えとしてマークしてください。ありがとう。 – rk2
record.eventSourceARN.split( '/')[1] –