Как получить версии объекта S3 с метаданными? - PullRequest
1 голос
/ 06 июня 2019

Я использую управление версиями S3 и хотел бы добавить некоторые пользовательские поля к версиям и извлечь их самым дешевым способом.

В идеале пользовательские поля должны быть представлены в выходных данных команды aws-cli, напримерэто:

aws s3api list-object-versions --bucket mybucket --prefix myfile.md

без каких-либо дополнительных вызовов n API.Но я не могу найти, может ли эта конечная точка вернуть метаданные.

Я могу получить метаданные только по отдельному идентификатору версии:

aws s3api head-object --bucket mybucket --version-id YgLFqd3oM_JBd2Dmwszxy.Up.fFX3xzi --key myfile.md
{
    "VersionId": "YgLFqd3oM_JBd2Dmwszxy.Up.fFX3xzi",
    "ContentLength": 2030,
    "AcceptRanges": "bytes",
    "ContentType": "application/x-yaml",
    "ETag": "\"4e29f3565aca5bf8d196bfabac536f1d\"",
    "LastModified": "Thu, 06 Jun 2019 15:54:22 GMT",
    "Metadata": {
        "comment": "some text"
    }
}

Мой текущий подход заключается в хранении метаданных в DynamoDB с ключом объекта S3 и его версией в качестве первичного ключа.Но, возможно, это накладные расходы, и я могу делать все только с S3.

1 Ответ

1 голос
/ 07 июня 2019

S3 не имеет действия API, которое возвращает список объектов / список версий объекта , а также метаданные объекта / метаданные версии объекта.

Теоретически вы можете делать все с помощью S3,просто нужно перебрать список объектов и отправить запрос HEAD для каждой версии объекта - это проще с SDK, чем с CLI - но это не обходится без затрат в части затрат на каждый запрос и времени выполнения, поэтомуВнешняя база данных может быть предпочтительнее.(Я использую один, но он использует RDS MariaDB вместо DynamoDB). Уведомления о событиях S3 * Функции 1006 * и AWS Lambda могут поддерживать такой внешний индекс, чтобы вам не приходилось создавать его из кода, который изначально создает объекты.

...