这个问题发生在本地测试 AWS Firehose Lambda 的时候,当调用 Lambda 函数时,localstack 会报告“missing recordId”的错误。这是因为 Lambda 函数没有正确地处理 Firehose 传送的数据记录。
为了解决这个问题,需要在 Lambda 函数中编写代码以处理 Firehose 传送的记录。下面是一个示例代码片段,可以让您获取数据记录和记录 ID:
exports.handler = async (event) => {
console.log('Received event:', JSON.stringify(event, null, 2));
const records = event.records.map((record) => {
const payload = new Buffer(record.data, 'base64').toString('ascii');
console.log('Decoded payload:', JSON.stringify(payload, null, 2));
return {
recordId: record.recordId,
result: 'Ok',
data: new Buffer(payload).toString('base64'),
};
});
console.log(`Returning ${records.length} modified records.`);
return {
records,
};
};
在这个示例中,代码将event
对象中的records
列表映射到另一个列表records
中,并使用Buffer
对象将记录数据从 Base64 编码解码回载荷中。然后,代码创建一个包含记录 ID、结果和数据的记录对象,并将其添加到records
列表中。最后,代码将列表返回给 Firehose。
通过这种方法,就可以避免本地测试时的“missing recordId”错误。