AWS SQS FIFO消息未触发Lambda且莫名消失问题排查
问题现象
向集成AWS Lambda触发器的AWS SQS队列发送多条消息后,AWS控制台确认消息已接收,但部分消息未送达Lambda(经Serverless应用监控系统确认),且这些消息被莫名删除。
消息发送代码
import * as AWS from "@aws-sdk/client-sqs"; import * as crypto from "crypto"; export class SqsService { private readonly sqsClient = new AWS.SQS({ region: "us-east-1" }); public async sendMessages( queueUrl: string, messageGroupId: string, messages: any[] ) { const params = { QueueUrl: queueUrl, Entries: [], }; const entries = []; let counter = 0; for (const message of messages) { const index = Math.floor(counter / 10); if (counter % 10 === 0) entries[index] = []; entries[index].push({ Id: crypto .randomBytes(32) .toString("hex") .replace(/[\W_]+/g, ""), MessageBody: JSON.stringify(message), MessageGroupId: messageGroupId, }); counter += 1; } for (const entry of entries) { params.Entries = entry; await this.sqsClient.sendMessageBatch(params); } } }
Serverless函数配置
schedulerListener: name: ${self:provider.stage}-scheduler-listener handler: src/handlers/sqsScheduler.handler events: - sqs: arn: xxxxx batchSize: 10
SQS设置

问题原因与修正
经排查,问题根源是该SQS队列同时触发了生产环境和开发环境的Lambda服务,导致消息被两个环境的Lambda消费,从而出现部分消息未在目标监控中出现且被删除的现象。
内容的提问来源于stack exchange,提问作者Gabriel Cunha
相关产品推荐
相关产品推荐

