SQS 连续 5 分钟内不触发 Lambda

SQS does not trigger Lambda within 5 minutes in sequential

我是 AWS 的新手,正在使用 SQS 触发 lambda 函数。 函数的顺序是, Lambda A 并将队列传递给 SQS,然后 SQS 触发 Lambda B。

当我 运行 Lambda A 时,我看到 Lambda B 如我所料被触发。但是,当我 运行 Lambda A 在最后一个 运行 Lambda A 之后的 5 分钟内,Lambda B 没有被触发。我想知道是否有一个默认时间设置为“5 分钟”来使用 SQS 触发 Lambda 函数。如果可以,怎么改成“0分钟”?

有没有人遇到过类似的问题?谢谢,

// Lambda A
// sends multiple messages to an Amazon SQS queue
module.exports.handler = async (event, context, callback) => {
  try {
    // sendQueue function is imported in the head of the file
    await sendQueue({ queueMessage }, QUEUE_URL)
  } catch (e) {
    console.error(e)
  }

  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'Lambda A is done',
        input: event,
      },
      null,
      2
    ),
  }
}

// Lambda B
// After SQS receives queues from Lambda A, SQS triggers to invoke Lambda B
module.exports.handler = async (event, context, callback) => {
  // here calling Athena query with "await"
  return `Successfully processed a message.`;
}

在 Lambda B 中,每次函数从 SQS 接收到消息时都会获取消息内容,如下所示。

[
  {
    messageId: 'b4146e42-a542-4e0e-bff9-ba7f96xxxxxx',
    receiptHandle: 'xxxxxxxxxxxxxxx',
    body: '{"queueMessage": "queueMessage sample text"}',
    attributes: {
      ApproximateReceiveCount: '1',
      SentTimestamp: '1643094105466',
      SequenceNumber: '18867376164708847616',
      MessageGroupId: '123',
      SenderId: 'xxxxxxxx:lambda-function-name',
      MessageDeduplicationId: 'xxxxxx',
      ApproximateFirstReceiveTimestamp: '1643094105466'
    },
    messageAttributes: { ReceiveMessageWaitTimeSeconds: [Object] },
    md5OfMessageAttributes: 'aaaaaaaa',
    md5OfBody: 'bbbbbbb',
    eventSource: 'aws:sqs',
    eventSourceARN: 'arn:aws:xxx.fifo',
    awsRegion: 'ap-northeast-1'
  }
]

请确保您没有在 SQS 中进行以下设置。此设置可能会在 x 时间后将您的 Lambda 函数延迟到 运行。

经过AWS documentation后,我找到了下面这行

If a message with a particular message deduplication ID is sent successfully, any messages sent with the same message deduplication ID are accepted successfully but aren't delivered during the 5-minute deduplication interval.

基本上,使用SQS的FIFO队列,5分钟内发送的消息不会被传递,以避免发送重复消息。