Kinesis with SQS DLQ 丢失事件数据

Kinesis with SQS DLQ missing event data

我正在尝试为 Kinesis 设置 DLQ。 我使用了 SQS 并将其设置为故障目的地的 Kinesis。

Kinesis 附加到始终抛出错误的 lambda,因此事件将立即转到 SQS DLQ。

我可以在 SQS 中看到事件,但如果我在抛出异常之前打印事件,则在 lambda 中缺少事件的有效负载(json 我作为事件的一部分发送) ,我可以看到 base64 编码的数据,但在我的 DLQ 中看不到。

有没有办法将事件数据也发送到 DLQ?我希望能够正确检查错误的原因,并在我完成 lambda 中的问题修复后将事件放回 Kinesis。

https://docs.aws.amazon.com/lambda/latest/dg//with-kinesis.html#services-kinesis-errors

The actual records aren't included, so you must process this record and retrieve them from the stream before they expire and are lost.

根据上面的内容,事件负载不会发送到 DLQ 事件,因此此处应为 "missing event data"。

因此,为了取回实际记录,您可能想尝试类似

的操作

1) 假设我们有以下运动批处理信息

{
  "KinesisBatchInfo": {
    "shardId": "shardId-000000000001",
    "startSequenceNumber": "49601189658422359378836298521827638475320189012309704722",
    "endSequenceNumber": "49601189658422359378836298522902373528957594348623495186",
    "approximateArrivalOfFirstRecord": "2019-11-14T00:38:04.835Z",
    "approximateArrivalOfLastRecord": "2019-11-14T00:38:05.580Z",
    "batchSize": 500,
    "streamArn": "arn:aws:kinesis:us-east-2:123456789012:stream/mystream"
  }
}

2) 我们可以通过类似

的方式取回记录
import AWS from 'aws-sdk';

const kinesis = new AWS.Kinesis();

const ShardId = 'shardId-000000000001';
const ShardIteratorType = 'AT_SEQUENCE_NUMBER';
const StreamName = 'my-awesome-stream';
const StartingSequenceNumber =
  '49601189658422359378836298521827638475320189012309704722';

const { ShardIterator } = await kinesis
  .getShardIterator({
    ShardId,
    ShardIteratorType,
    StreamName,
    StartingSequenceNumber,
  })
  .promise();

const records = await kinesis
  .getRecords({
    ShardIterator,
  })
  .promise();

console.log('Records', records);

注意:不要忘记确保您的进程有权 1) kinesis:GetShardIterator 2) kinesis:GetRecords

希望对您有所帮助!