У меня есть функция node.js для AWS Lambda.Он читает файл JSON из корзины S3 в виде потока, анализирует его и выводит проанализированные объекты на консоль.Я использую модуль stream-json для анализа.
Он работает в моей локальной среде и выводит объекты на консоль.Но он не печатает объекты в потоках журналов (CloudWatch) на Lambda.Это просто время ожидания после максимальной продолжительности.Он печатает другие операторы журнала, но не значения объекта.
1. Using node.js 6.10 in both environments.
2. callback to the Lambda function is invoked only after the stream ends.
3. Lambda has full access to S3
4. Also tried Promise to wait until streams complete. But no change.
Чего мне не хватает?Заранее спасибо.
const AWS = require('aws-sdk');
const {parser} = require('stream-json');
const {streamArray} = require('stream-json/streamers/StreamArray');
const {chain} = require('stream-chain');
const S3 = new AWS.S3({ apiVersion: '2006-03-01' });
/** ******************** Lambda Handler *************************** */
exports.handler = (event, context, callback) => {
// Get the object from the event and show its content type
const bucket = event.Records[0].s3.bucket.name;
const key = event.Records[0].s3.object.key;
const params = {
Bucket: bucket,
Key: key
};
console.log("Source: " + bucket +"//" + key);
let s3ReaderStream = S3.getObject(params).createReadStream();
console.log("Setting up pipes");
const pipeline = chain([
s3ReaderStream,
parser(),
streamArray(),
data => {
console.log(data.value);
}
]);
pipeline.on('data', (data) => console.log(data));
pipeline.on('end', () => callback(null, "Stream ended"));
};