AWS Lambda w/ SQS 触发器、SQS Lambda 目标,永远不会添加到目标队列

2023-11-22

我有一个简单的 lambda 函数,它是从 SQS 队列触发的,我正在使用新的拉姆达目的地功能。

它被设置为从以下位置触发QUEUE_A,对payload body做一些修改,然后发送到QUEUE_B on success, or QUEUE_ERRORS on failure.

QUEUE_B and QUEUE_ERRORS设置为目的地关于 lambda 函数。

当我从 CLI 触发 lambda 时,我得到一条记录QUEUE_B拥有良好的记录,并且继续QUEUE_ERRORS有不良记录。所以,它似乎正在发挥作用。

但是,当从 SQS 触发 lambda 时,我never获得记录QUEUE_B or QUEUE_ERRORS。好的记录会运行 lambda,而坏的记录则会运行QUEUE_A_DEADLETTER,这是我不想要的。

我尝试过配置QUEUE_A没有重试/死信 - 如果我这样做,在坏记录上它将永远重试(无论我将可见性/重试设置得有多低)。

接下来我可以尝试什么?


EDIT:
CloudWatch 准确地向我展示了我期望看到的内容 - 我在“好”记录上看到了良好的日志,在“坏”记录上看到了堆栈跟踪/异常,因此据我所知,这不是函数本身的问题。


EDIT: 使用 SNS 触发器和目标替换 SQS 触发器和目标是有效的。那么,我认为这与 SQS 同步和 SNS 异步有关?有人知道吗?

enter image description here


如果您同步调用 Lambda 函数,则不会触发目标。

Destinations 的主要用例是了解 Lambda 函数的异步执行结果,主要是为了更好地了解执行细节,例如请求和响应上下文、有效负载、异常堆栈跟踪等。因此,如果同步调用 Lambda(例如,使用 cli 或通过 SQS 触发器),不会将任何消息传递到目标端点。

当您使用 CLI 时,您会使用aws lambda invoke-async。相反,如果你使用aws lambda invoke(同步执行 Lambda),您将看到相同的问题,您的目标端点将不会收到消息。

您可以将您的目标端点保持为 SQS(您将在上面的文章中看到一个工作示例),但您的 Lambda 触发器必须更改为异步触发器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Lambda w/ SQS 触发器、SQS Lambda 目标,永远不会添加到目标队列 的相关文章

随机推荐