在Kinesis EventSourceMapping上禁用Lambda重试

时间:2018-12-05 16:45:04

标签: node.js aws-lambda amazon-kinesis

我只是想简单地禁用kinesis触发器启动的lambda重试。如果lambda失败或退出,我不希望它重试。

3 个答案:

答案 0 :(得分:0)

来自AWS Lambda Retry Behavior - AWS Lambda

  

基于流的基于轮询(或拉模型)的事件源:这些事件源由Kinesis Data Streams或DynamoDB组成。当Lambda函数调用失败时,AWS Lambda会尝试处理错误的记录批,直到数据过期为止(最多7天)。

     

该异常被视为阻塞,并且AWS Lambda不会从分片读取任何新记录,直到失败的记录批次过期或成功处理为止。这样可以确保AWS Lambda按顺序处理流事件。

似乎没有任何配置选项可以更改此行为。

答案 1 :(得分:0)

如何正确处理错误,以使调用仍然成功并且Lambda不再重试呢?

在NodeJS中,应该是这样的……

export const handler = (event, context) => {
    return doWhateverAsync()
        .then(() => someSuccessfulValue)
        .catch((err) => {
            // Log the error at least.
            console.log(error)

            // But still return something so Lambda won't retry.
            return someSuccessfulValue
        })
}

答案 2 :(得分:0)

如果您使用 Lambda 事件源映射通过来自 kinesis 流分片的一批记录触发您的 Lambda,那么您可以配置事件源映射将进行的最大重试次数。

另一个选项是配置发送到函数的记录的最大年龄。

<块引用>

重试次数——当函数返回错误时,Lambda 重试的最大次数。这不适用于批处理未到达函数的服务错误或限制。

<块引用>

Maximum age of record – Lambda 发送到您的函数的记录的最大年龄。

一个好的做法是配置故障目标。这通常是 SQS 队列或 SNS 主题。导致调用失败的批次的详细信息存储在此处。

https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-errors 了解更多信息。