我有一个由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类型。
答案 0 :(得分:1)
听起来好像根本没有调用lambda。假设队列和lambda之间的EventSourceMapping已正确配置,则可能是权限问题。
确保分配给lambda的角色已附加 AWSLambdaSQSQueueExecutionRole 策略。这将赋予lambda轮询队列的权限。