Перейти к содержимому

Управление метаданными объектов

Ко всем объектам, помещаемым в Object Storage, можно добавлять метаданные — дополнительную информацию об объекте, описывающую его свойства.

Все метаданные подразделяются на системные (задаются на стороне Object Storage) и пользовательские (определяются пользователем).

Метаданные определяются в виде пар “ключ – значение” и передаются в HTTP-заголовках.

Системные метаданные — это дополнительная служебная информация о свойствах объекта, которую добавляет storage. Например, когда вы загружаете объект, к нему автоматически добавляется информация о дате и времени загрузки.

Системными метаданными можно управлять ограниченно: не всю информацию о свойствах объекта можно изменять.

ЗаголовокОписаниеМожет ли пользователь изменять значение?
DateДата и время загрузки объектаНет
Content-LengthРазмер объекта в байтахНет
Last-ModifiedДата создания или последнего изменения объектаНет
Cache-ControlHTTP-заголовок, содержащий директивы по управлению кешем. Клиент передает директивы в заголовке Cache-Control при загрузке объекта в бакет. Затем этот заголовок возвращается в ответе на запрос объекта или его метаданных. Подробнее о заголовке Cache-Control и управлении кешированием см. в RFC 7234.Да
Content-TypeТип объектаДа
ExpiresДата и время, при наступлении которых объект считается устаревшим. Клиент передает их при в заголовке Expires при загрузке объекта в бакет. Затем этот заголовок возвращается в ответе на запрос объекта или его метаданных.Да
x-amz-storage-classКласс хранения объектаДа
x-amz-version-id Идентификатор версии объектаНет
x-amz-delete-markerУказывает, является ли объект маркером удаленияНет

При загрузке объекта вы можете добавить к нему любую дополнительную информацию, актуальную в контексте ваших сервисов и приложений. Пользовательские метаданные передаются в специальных заголовках, которые Object Storage возвращает в ответ на запросы к объекту.

  • В метаданных должны использовать только допустимые символы UTF-8.
  • Ключ пользовательских метаданных обязательно должен начинаться с символов x-amz-meta-, например x-amz-meta-user-id или x-amz-meta-user-type.
  • Максимальный размер пользовательских метаданных ограничен.
  • AWS CLI
  • Python
  • Go
bash
aws s3api put-object \
--bucket <имя бакета> \
--key <ключ объекта> \
--body <путь к локальному файлу \
--metadata "<ключ 1>"="<значение 1>","<ключ 2>"="<значение 2>"
  • AWS CLI
  • Python
  • Go
bash
aws s3api head-object \
--bucket <имя_бакета> \
--key <ключ_объекта> \

Если команда выполнена успешно, вы получите JSON-объект, содержащий метаданные объекта:

json
{
"AcceptRanges": "bytes",
"LastModified": "2024-12-02T09:01:52+00:00",
"ContentLength": 143,
"ETag": "\"2b605dba83a2be027b3ebcee1033b950\"",
"ServerSideEncryption": "AES256",
"Metadata": {
"x-am-meta-key2": "value2",
"x-amz-meta-key1": "value1"
}
}
  • AWS CLI
  • Python
  • Go

В Object Storage невозможно напрямую изменить метаданные объекта. Чтобы метаданные объекта изменились, нужно сделать копию объекта с таким же именем, но с новыми метаданными.

bash
aws s3api copy-object \
--bucket <имя_бакета> \
--key <ключ_объекта> \
--copy-source <имя_бакета>/<ключ_объекта> \
--metadata "<ключ_1>"="<значение_1>","<ключ_2>"="<значение_2>" \
--metadata-directive REPLACE \