Запись ndjson в сегмент S3 с использованием Lambda

#node.js #amazon-web-services #amazon-s3

#node.js #amazon-веб-сервисы #amazon-s3

Вопрос:

Мне нужно загрузить ndjson данные в корзину S3. Но я изо всех сил пытаюсь передать это в S3.putObject()

Ниже приведены мои данные JSON:

 const responseData = uploadData.data.map((upData) => ({
 date: upData.date,
 time: upData.time,
 url: upData.url,
 test1: test1.id,
 test2: test2,
}));
  

Я преобразую вышеуказанное JSON в ndjson :

 const transformStream = ndjson.stringify();
const outputStream = transformStream.pipe(
 fileSystem.createWriteStream(__dirname   '/data.ndjson')
);
responseData.forEach(function iterator(record) {
 transformStream.write(record);
});
transformStream.end();
  

Теперь, как мне загрузить эти данные в мою корзину S3, пожалуйста, помогите, спасибо

Комментарии:

1. Для этого необходимо использовать AWS SDK, вы можете найти примеры здесь .

Ответ №1:

Я смог найти аккуратное решение без использования ndjson библиотеки

Приведенный ниже код преобразует ваши JSON данные в ndjson формат (если данные следующего типа):

 [
  {
    "f1": "somedata",
    "f2": "somedata",
    "f3": "somedata"
  },
  {
    "f1": "somedata",
    "f2": "somedata",
    "f3": "somedata"
  }
]

const transformData = (jsonData) => {
 let res = ''
 for (let i = 0; i < jsonData.length; i  ) {
   res  = `${JSON.stringify(jsonData[i])}n`
 }
 return res
}
  

Затем вы можете просто вызвать AWS.S3 PutObject функцию, чтобы поместить ndjson данные в S3 (ниже):

 const result = transformData(Data)

const params = {
  Bucket: bucketName,
  Key: keyName,
  Body: result
}

s3.putObject(params, function () {})
// If you need to get the version ID of the Object (only if versioning is Enabled)
// const verID = (await s3.putObject(params, function () {}).promise()).VersionId