我只是想简单地禁用kinesis触发器启动的lambda重试。如果lambda失败或退出,我不希望它重试。
答案 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 了解更多信息。