使用SNS的AWS Lambda运动触发器错误处理

2024-09-27 00:14:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我已在Lambda函数中的Kinesis数据流触发器失败时将SNS附加为目标。对于任何类型的故障,我都会收到以下格式的电子邮件:

{"requestContext":{"requestId":"xxx","functionArn":"xxx","condition":"RetryAttemptsExhausted","approximateInvokeCount":2},"responseContext":{"statusCode":200,"executedVersion":"$LATEST","functionError":"Unhandled"},"version":"1.0","timestamp":"2021-06-30T15:19:20.847Z","KinesisBatchInfo":{"shardId":"shardId-xxx","startSequenceNumber":"xxx","endSequenceNumber":"xxxx","approximateArrivalOfFirstRecord":"xxx","approximateArrivalOfLastRecord":"xxx","batchSize":100,"streamArn":"xxx"}}

在这里,我将functionError作为Unhandled接收。然而我想知道Lambda失败的确切原因。此SNS消息既不包含错误消息,也不包含lambda执行ARN或日志流,我可以查看这些日志流以了解错误详细信息。在我的Lambda代码中,我正在执行以下操作:

def lambda_handler(event, context):
    try:
        for record in event['Records']:
            #Kinesis data is base64 encoded so decoding here
            payload = base64.b64decode(record["kinesis"]["data"])
            
    except Exception as e:
        print(e)
        raise e

堆栈跟踪/错误确实会打印在CloudWatch日志中,但SNS消息不包含任何错误信息。是否有人能指导我如何在这个SNS消息中包含错误详细信息,或者是否需要在代码中进行一些更改以在SNS消息中包含错误信息。谢谢你在这方面的帮助


Tags: lambda代码event消息data错误详细信息record
1条回答
网友
1楼 · 发布于 2024-09-27 00:14:57

你需要自己做这件事。您必须在代码中自己发送此类消息,而不是使用内置lambdas目的地。因此,在except块中,您必须向队列提供sns消息:

    except Exception as e:
        print(e)
        # "manually" publish msg with the error to your SNS. 
        raise e

相关问题 更多 >

    热门问题