Самый лучший способ получить метаданные объектов S3 (NodeJS API)

Я сохранил пользовательские метаданные в своих объектах S3 (я сохранил описание файла в мета-описании метаданных x-amz).

Я хочу получить список файлов со свойствами объектов S3, включая метаданные.

Я думал, что s3.listObjectsV2 может мне помочь, но похоже, что этот метод не может получить метаданные (см. Официальный документ здесь)

Я видел, что могу получить эти меданные с помощью getObjects, но это значительно увеличит количество вызовов и задержку запроса.

Есть ли у вас идея массового получения метаданных списка объектов?

Спасибо, Ромен.


person romain-nio    schedule 05.10.2016    source источник


Ответы (2)


вам нужен aws s3api head-object, который делает именно то, что вы хотите

Операция HEAD извлекает метаданные из объекта, не возвращая сам объект. Эта операция полезна, если вас интересуют только метаданные объекта. Чтобы использовать HEAD, у вас должен быть доступ на ЧТЕНИЕ к объекту.

aws s3api head-object --bucket <mybucket> --key <value>

Он также доступен в API nodeJS, см. http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#headObject-property

Метод вызывается один раз для каждого ключа, если вам нужно вызвать несколько элементов, которые вам нужно объединить с другим методом, скажем, в качестве примера вам нужны все метаданные для всех ваших файлов csv из вашего ведра, которое вы должны запустить

aws s3 ls --recursive <mybucket> \
| grep ".csv$" | cut -c 32- \
| xargs -I {} aws s3api head-object --bucket <mybucket> --key {}

В первой части команды перечислены все файлы из вашего ведра, вы используете grep только для определенного расширения, удаляете символы, чтобы получить только ключ, и передаете этот ключ в качестве аргумента команды head-object.

person Frederic Henri    schedule 05.10.2016
comment
Привет ! Благодарю. Можно ли использовать этот метод в массовом режиме? Если ответ отрицательный, мне придется совершать много звонков. - person romain-nio; 06.10.2016
comment
привет, нет, вы не можете позвонить массово, это работает для данного ключа (что имеет смысл), если вам нужно позвонить массово, вам сначала нужно выбрать все элементы, которые вы хотите выполнить, - приведя пример - person Frederic Henri; 06.10.2016

S3 не предназначен для массового запроса метаданных объектов. Вам нужно следовать ответу @ Frédéric Henri, если у вас меньше файлов в вашей корзине, иначе вам нужно хранить метаданные в другом хранилище данных, например DynamoDB, всякий раз, когда вы помещаете файл в корзину S3, вы можете запускать Lambda для копирования метаданных в таблицу DynamoDB, а затем вы можете запрашивать метаданные в DynamoDB любым способом.

person Dilip Kola    schedule 12.06.2018