由SQS触发的lambda,尝试重新排队,但未触发的lambda

时间:2020-01-13 23:06:23

标签: aws-lambda amazon-sqs

我有一个由SQS消息触发的lambda,我的问题是,由于某种原因该消息的处理失败,应该重新排队此消息。

现在我一直在调试,但仍然不知道为什么会这样: 假设我发送了一条SQS消息,但它失败了,lambda会尝试重新排队到相同的SQS队列,但这正是我的问题所在:根据日志,消息已发送但未触发相同的lambda ,我也没有在队列中看到SQS消息。

 # code for processing the message, we call some API and we get the response

 if response.status_code not in [200, 201] and  body["retryTime"] <= 5:
            # if the API response didn't went ok
            # update the number of tries
            body["retryTime"] += 1
            # we resend message to be requeued
            sqs_response = upload_to_sqs_fifo(
                sqs,
                json.dumps(body),
                message_attributes,
                message_deduplication_id,
                message_group_id,
            )

        elif response.status_code not in [200, 201] and  body["retryTime"] > 5:
            exception_message = "Maximum tries to re-send SQS message"

            raise Exception(exception_message)

我从来没有看到“最大尝试重新发送SQS消息”的消息,即使我故意返回了另一个响应代码200或201。

SQS是FIFO类型。

1 个答案:

答案 0 :(得分:1)

听起来好像根本没有调用lambda。假设队列和lambda之间的EventSourceMapping已正确配置,则可能是权限问题。

确保分配给lambda的角色已附加 AWSLambdaSQSQueueExecutionRole 策略。这将赋予lambda轮询队列的权限。