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
希望这可以帮到你!