【发布时间】:2020-04-27 09:52:18
【问题描述】:
我有一个从 SQS 队列触发的简单 lambda 函数,我正在使用新的 Lambda Destinations 功能。
设置为从QUEUE_A触发,对payload主体做一些修改,然后成功发送给QUEUE_B,失败发送给QUEUE_ERRORS强>。
QUEUE_B 和 QUEUE_ERRORS 在 lambda 函数上设置为 Destination。
当我从 CLI 触发 lambda 时,我在 QUEUE_B 上获得了良好记录,在 QUEUE_ERRORS 上获得了不良记录。所以,它似乎正在工作。
但是,当从 SQS 触发 lambda 时,我从未在 QUEUE_B 或 QUEUE_ERRORS 上获得记录。好的记录会运行 lambda,如果记录不好,它会转到 QUEUE_A_DEADLETTER,这是我不想要的。
我已尝试将 QUEUE_A 配置为没有重试/死信 - 如果我这样做,如果记录不好,它将永远重试(无论我将可见性/重试设置得有多低)。
接下来我可以尝试什么?
编辑:
CloudWatch 准确地向我展示了我希望看到的内容 - 我在“好”记录上看到了良好的日志,在“坏”记录上看到了堆栈跟踪/异常,所以这在函数本身 AFAIK 中不是问题。
编辑: 用 SNS 触发器和目标替换 SQS 触发器和目标正在工作。那么,我认为这与 SQS 同步和 SNS 异步有关吗?有人知道吗?
【问题讨论】:
-
听起来您在 Lambda 函数中遇到了错误。您是否查看过 CloudWatch Logs 以查看 Lambda 函数的日志输出?您还可以添加一些额外的调试来查看
SendMessage()调用是否成功。 -
CloudWatch 在我的“好”记录上显示良好的日志,在我的“坏”记录上显示异常。
SendMessage()在哪里定义?我不想在功能代码中推送到SQS,只是作为一个目的地。我还希望QUEUE_ERRORS出现“坏”记录,但事实并非如此。 -
啊!它使用新的AWS Lambda Destinations 功能。抱歉,你不需要
SendMessage()。
标签: amazon-web-services aws-lambda amazon-sqs