Объект
Объекты размещаются в бакетах и содержат пользовательские данные произвольного формата в том виде, в котором они были загружены.
Идентификатор объекта — строковый ключ.
Вместе с объектом Object Storage хранит пользовательские и системные метаданные.
Object Storage позволяет сохранять объекты в хранилищах разных классов в зависимости от ваших требований к длительности хранения и частоте операций с объектами. Подробнее читайте в разделе Класс хранилища.
Object Storage поддерживает следующие операции с объектами:
- Загрузка объекта в хранилище.
- Скачивание объекта из хранилища.
- Копирование объекта внутри хранилища, например, из бакета в бакет.
- Удаление объекта.
- Частичное изменение объекта в хранилище.
Все остальные операции, которые можно выполнить с помощью инструментов, являются комбинациями из указанных выше.
Для объектов в бакете можно настраивать жизненные циклы.
Object Storage накладывает ограничения на размеры объектов и их метаданных. Подробнее смотрите в разделе Квоты и лимиты в Object Storage.
Ключ
Ключ — это идентификатор объекта в бакете.
Структура хранения объектов плоская, хотя инструменты с графическим интерфейсом предлагают работать с Object Storage как с иерархической файловой системой. Видимость иерархического хранилища достигается за счет того, что ключи можно записывать как пути в файловой системе, например, top_level_prefix/subprefix/text_data.txt
. В консоли управления Yandex Cloud префиксы называются папками.
Ключ должен:
- иметь кодировку UTF-8;
- быть меньше 1024 байт;
- не содержать символов
: * ? " < > | !
.
Для использования в ключе безопасны следующие символы: [a-zA-Z0-9]
, -
, _
, /
, \
. Другие символы могут вызвать различные проблемы при использовании Object Storage.
Папка
В Object Storage нет папок, однако графические файловые менеджеры, например, CyberDuck или интерфейс Object Storage в консоли управления Yandex Cloud имитируют папки. В роли папки выступает объект с нулевым размером, ключ которого входит в ключи других объектов как префикс. Например, объект с ключом x
и размером 0 в консоли управления будет папкой, а объект с ключом x/y.txt
— объектом y.txt
, лежащим в папке x
.
Каждый из инструментов управляет объектами и папками согласно своей логике, которая описана в документации на каждый из них.
Примечание
Удаление папки с объектами — асинхронная операция. В начале операции Object Storage готовит список объектов для удаления, затем удаляет их. Если в процессе удаления в Object Storage загрузить объект, который должен лежать в той папке, которая удаляется в текущий момент времени, то объект успешно загрузится. После завершения обеих операций в Object Storage останется папка, которая должна была быть удалена, с новым загруженным объектом.
URL объекта
Ссылку на объект в бакете можно указывать в одном из форматов:
- Для бакета с публичным доступом:
http(s)://<бакет>.storage.yandexcloud.net/<ключ>
https://storage.yandexcloud.net/<бакет>/<ключ>
- Для бакета с ограниченным доступом:
http(s)://<бакет>.storage.yandexcloud.net/<ключ>?<параметры>
https://storage.yandexcloud.net/<бакет>/<ключ>?<параметры>
Где:
<бакет>
— имя бакета.<ключ>
— ключ (путь к файлу).<параметры>
— дополнительные параметры, необходимые для доступа к бакету с ограниченным доступом. Например подпись и срок действия.
Из бакета с публичным доступом файлы можно получить по публичной ссылке как по протоколу HTTP, так и по протоколу HTTPS, даже если для бакета не настроен хостинг веб-сайта. В этом случае для доступа по протоколу HTTPS будет использован сертификат от GlobalSign
Для бакета с ограниченным доступом сервис генерирует временную подписанную ссылку, которая позволяет скачать объект даже из бакета с ограниченным доступом. Подробнее про подписанные ссылки, их генерацию и использование.
Примечание
При использовании URL в формате http(s)://<имя_бакета>.storage.yandexcloud.net
протокол HTTPS доступен для бакета только в том случае, если имя бакета не содержит точек. Например:
https://example.storage.yandexcloud.net
— для этого бакета протокол HTTPS доступен.http://example.ru.storage.yandexcloud.net
— для этого бакета HTTPS недоступен.
Это связано с тем, что в Object Storage используются сертификаты Wildcard
Чтобы поддержать для бакета с точкой в имени протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
Примечание
Если вы используете AWS SDK для .NET, обращайтесь к хосту s3.yandexcloud.net
.
Метаданные
С объектом хранятся метаданные в виде пар ключ-значение
.
Метаданные могут быть системными и пользовательскими.
Системные метаданные
Системные метаданные определяются Object Storage.
Ключ | Описание |
---|---|
Date |
Дата и время отправки запроса на загрузку объекта в Object Storage. |
Content-Length |
Размер объекта в байтах. |
Last-Modified |
Дата создания или последнего изменения объекта. |
Content-MD5 |
MD5 хэш объекта, закодированный в base64. |
Cache-Control |
Значение HTTP заголовка Cache-Control , который клиент передает при сохранении объекта в бакет. В дальнейшем, Object Storage возвращает этот заголовок клиентам при ответе на запрос объекта или его метаданных.Например, заголовок Cache-Control: max-age=200 обозначает, что объект устаревает через 200 секунд после того, как клиент получил его. Подробнее о заголовке читайте в RFC 7234 |
Expires |
Значение HTTP заголовка Expires , который клиент передает при сохранении объекта в бакет. В дальнейшем, Object Storage возвращает этот заголовок клиентам при ответе на запрос объекта или его метаданных.Например, заголовок Expires: Thu, 15 Apr 2020 20:00:00 GMT обозначает, что объект устаревает 15 апреля 2020 года в 20:00:00 по Гринвичу. Подробнее о заголовке читайте в RFC 7234 |
Пользовательские метаданные
При загрузке объекта в Object Storage, вместе с ним можно передать набор метаданных в виде пар ключ-значение
.
В HTTP API, совместимом с Amazon S3, метаданные передаются в виде HTTP-заголовков. Имя заголовка должно начинаться с X-Amz-Meta-
. При запросе объекта через HTTP API Object Storage возвращает метаданные в виде HTTP-заголовков с этим же префиксом.
Ключи метаданных должны состоять только из ASCII-символовX-Amz-Meta-foo-bar_baz
→ X-Amz-Meta-Foo-Bar_baz
. Здесь Foo-Bar_baz
– ключ метаданных, которые будут сохранены вместе с объектом.
Примечание
Заголовок PUT-запроса не должен превышать 8 КБ. Размер пользовательских метаданных в этом заголовке не должен превышать 2 КБ.
Подробнее см. в инструкции Управление пользовательскими метаданными объекта.