AWS Lambda для вывода списка объектов и подкаталогов S3 внутри с контролем версий файлов - PullRequest
0 голосов
/ 02 ноября 2018

Я новичок в лямбде и пытаюсь перечислить объекты корзины S3, которые имеют вложенные подкаталоги, вот структура:

- mybucket/folder1/project1/samplev1.txt
- mybucket/folder1/project1/sampleVer2.txt
- mybucket/folder2/
- mybucket/folder3/

вот мой лямбда-код:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
  const allKeys = [];
  await getKeys({ Bucket: 'ru-mybucket' }, allKeys);
  console.log(allKeys)
  return allKeys;
};

async function getKeys(params, keys){
  const response = await s3.listObjectsV2(params).promise();
  response.Contents.forEach(obj => keys.push(obj.Key));

  if (response.IsTruncated) {
    const newParams = Object.assign({}, params);
    newParams.ContinuationToken = response.NextContinuationToken;
    await getKeys(newParams, keys); // RECURSIVE CALL
  }
}

Функция перечисляет все ключи объектов внутри моего сегмента с их вложенными подкаталогами и файлами. Проблема в том, как составить список вложенных объектов, включая их версию, как я могу этого добиться? где добавить (listObjectVersions) в моем коде, чтобы можно было зацикливаться на объектах, которые имеют версии?

1 Ответ

0 голосов
/ 03 ноября 2018

Я сделал для вас этот код , в этом примере вы можете увидеть модульный тест и его реализацию (apigateway).

По сути, я извлек все ключи из своего ведра, а затем перебрал их. Наконец я получил все объекты, и я запрашиваю s3.listObjectsV2 , передавая два параметра - корзину и ключ.

Ниже псевдокода:

s3.listObjectsV2({ Bucket: your_bucket, MaxKeys: 1000 }).forEach( element => {
   s3.listObjectVersions({ Bucket: your_bucket, Prefix: element.Key})
})

Для этого вы можете запустить пример кода, вы должны выполнить следующую команду:

npm install
npm run deploy

Для этого вы можете проверить код:

npm run test

Не забудьте поставить ведро:

./package.json
./tests/test.js

Важно: я использовал безсерверный фреймворк для этого решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...