AWS Lambda - 从Lambda队列中删除重复发生的失败事件

时间:2016-01-31 09:20:34

标签: amazon-web-services lambda amazon-dynamodb amazon-cloudwatch

所以我有一些由DynamoDB流触发的AWS lambda函数。我已经使用了几次“配置测试”功能,并且我自己通过手动将伪数据添加到DynamoDB表来触发了该功能。

我的问题是,现在我已经有了工作代码,但是因为我首先插入了错误的测试数据(与流入时的实际事件数据的外观不匹配),每个当我更新一个表或lambda函数本身时,它不会处理其他事件,因为它会挂在我糟糕的旧测试数据上。作为一个较小的问题,它会使CloudWatch变得混乱。

理论上,我可以更改我的Lambda函数,使它们不能使用实际数据,只能处理我的错误测试数据,然后一旦我的真实数据开始显示,我就可以将我的Lambda函数切换回正常,但我觉得必须有一个更好的方法来做到这一点,我只是没有意识到。

所以我想知道是否有办法:

1 - 查看Lambda中失败并等待重新处理的事件队列?

2 - 删除该队列中的特定事件,以便Lambda不对它们进行重新处理?

1 个答案:

答案 0 :(得分:4)

两者的答案基本上都没有。 Lambda函数被卡住了,因为它无法解析流并且AWS重试失败的函数(无法将其关闭)。

您可以从dynamodb中删除测试数据。或者,在对Lambda函数执行任何操作之前,请对实际的event执行一些验证检查。总是做到这一点的好习惯,所以作为奖励,你会获得更加面向未来的Lambda函数:)

如果验证检查失败(在测试数据上),则只返回context.succeed();(Lambda函数现在可以继续而不是重试)。如果验证通过,它就会发挥作用。

支票可能是这样的:

exports.handler = function(event, context) {
    if (typeof event.somethingNotAvailableInTestAndAvailableOnLive === 'undefined') {
        context.succeed('Parsed test event...');
    }

    // Actual code...
}

您应该检查这个特定于Dynamodb的语法。