【问题标题】:AWS Lambda Error Handling for Kinesis Trigger using SNS使用 SNS 的 Kinesis 触发器的 AWS Lambda 错误处理
【发布时间】:2021-09-12 21:52:31
【问题描述】:

我已将 SNS 作为我的 Lambda 函数中 Kinesis 数据流触发器失败的目标。在任何类型的失败中,我都会收到一封格式如下的电子邮件:

{"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"}}

在这里,我以Unhandled 接收functionError。而我想知道 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 Logs 中,但 SNS 消息不包含任何错误信息。有人可以指导我如何在此 SNS 消息中包含错误详细信息,或者是否需要在代码中进行一些更改以在 SNS 消息中包含错误信息。感谢您在这方面的任何帮助!

【问题讨论】:

    标签: python amazon-web-services aws-lambda amazon-sns amazon-kinesis


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2015-11-08
      • 2021-10-25
      相关资源
      最近更新 更多