我有一个简单的 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 异步有关?有人知道吗?
如果您同步调用 Lambda 函数,则不会触发目标。
Destinations 的主要用例是了解 Lambda 函数的异步执行结果,主要是为了更好地了解执行细节,例如请求和响应上下文、有效负载、异常堆栈跟踪等。因此,如果同步调用 Lambda(例如,使用 cli 或通过 SQS 触发器),不会将任何消息传递到目标端点。
当您使用 CLI 时,您会使用aws lambda invoke-async
。相反,如果你使用aws lambda invoke
(同步执行 Lambda),您将看到相同的问题,您的目标端点将不会收到消息。
您可以将您的目标端点保持为 SQS(您将在上面的文章中看到一个工作示例),但您的 Lambda 触发器必须更改为异步触发器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)