【问题标题】:DynamoDB Trigger Lambda Function Call FailedDynamoDB 触发器 Lambda 函数调用失败
【发布时间】:2023-01-02 00:50:51
【问题描述】:

我正在尝试跟踪 DynamoDB 表中的事件触发 Lambda 函数,该函数将事件移至 Kinesis Data Firehose。然后,Kinesis 对文件进行批处理并将它们发送到 S3 存储桶。我用作触发器的 Lambda 函数失败。

这是触发器的 Lambda 代码:


```
import json
import boto3


firehose_client = boto3.client('firehose')

def lambda_handler(event, context):
    resultString = ""
    for record in event['Records']:
        parsedRecord = parseRawRecord(record['dynamodb'])
        resultString =  resultString  + json.dumps(parsedRecord) + "\n"
    print(resultString)
    response = firehose_client.put_record(
        DeliveryStreamName="OrdersAuditFirehose",
        Record={
            'Data': resultString
        }
)

def parseRawRecord(record):
    result = {}
    result["orderId"] = record['NewImage']['orderId']['S']
    result["state"] = record['NewImage']['state']['S']
    result["lastUpdatedDate"] = record['NewImage']['lastUpdatedDate']['N']
    return result
```

目标是让 lambda 函数将事件移动到由 DynamoDB 中的事件触发的 Kinesis

【问题讨论】:

  • 您的 Lambda 函数日志说了什么?这就是写入错误的地方。

标签: amazon-web-services lambda amazon-dynamodb amazon-kinesis amazon-dynamodb-streams


【解决方案1】:

我将把它作为我的初始答案发布,并会在您返回时进行编辑,但您的 Lambda 日志除外。

当您想要在 DynamoDB 和 Firehose 之间进行集成时,无需使用 Lambda。除了 DynamoDB Streams,您还可以使用 Kinesis Data Streams,它将直接与 Firehose 集成,无需额外代码。

DynamoDB -> Kinesis Stream -> Kinesis Firehose -> S3

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html

如果你真的想使用 DynamoDB Streams,那么你也可以通过使用 EventBridge Pipes 来避免 Lambda 代码

DynamoDB -> EventBridgePipe -> Kinesis Firehose -> S3

https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html#pipes-targets

上述两种解决方案都会导致 DynamoDB 事件以无代码方式传送到 Firehose。

【讨论】:

    猜你喜欢
    • 2019-04-26
    • 2018-08-29
    • 2021-12-28
    • 2018-10-29
    • 2020-02-27
    • 1970-01-01
    • 2015-10-13
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多