【问题标题】:Kinesis with SQS DLQ missing event data带有 SQS DLQ 的 Kinesis 缺少事件数据
【发布时间】:2020-02-10 15:28:54
【问题描述】:

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

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

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

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

【问题讨论】:

  • 面临同样的问题。

标签: aws-lambda amazon-sqs amazon-kinesis


【解决方案1】:

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

实际记录不包括在内,因此您必须处理此记录并在它们过期和丢失之前从流中检索它们。

根据上述,事件负载不会被发送到 DLQ 事件,因此此处预计会出现“缺少事件数据”。

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

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

{
  "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

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2021-11-06
    • 2021-10-07
    • 2018-12-28
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2021-05-29
    相关资源
    最近更新 更多