Объект
Объекты размещаются в бакетах и содержат пользовательские данные произвольного формата в том виде, в котором они были загружены.
Идентификатор объекта — строковый ключ.
Вместе с объектом 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 КБ.
Подробнее см. в инструкции Управление пользовательскими метаданными объекта.
Условия записи (conditional writes)
Чтобы избежать случайной перезаписи и конфликтов при одновременных загрузках, можно определить условия записи объектов. Условия задаются с помощью заголовков S3 API:
-
Для методов upload и completeUpload:
If-Match— запись выполняется, только если по указанному ключу уже существует объект и его текущийETagсовпадает со значениями в заголовке.If-None-Match— запись выполняется, только если по указанному ключу в бакете нет объекта с таким же именем.
-
X-Amz-Copy-Source-If-Match— запись выполняется, только если по указанному ключу уже существует объект и его текущийETagсовпадает со значениями в заголовке.X-Amz-Copy-Source-If-None-Match— запись выполняется, только если по указанному ключу в бакете нет объекта с таким же именем.
Условия можно использовать при загрузке и составной загрузке объектов, копировании объектов целиком или по частям. Подробнее см. в инструкции Условная загрузка объекта.
Коды ответов:
404(Not Found) — объект по ключу отсутствует. Только дляIf-Match.409(Conflict) — условие выполнено, но во время загрузки ключ был изменен другой операцией записи.412(Precondition Failed) — условие не выполнено.
Особенности составной загрузки:
-
Инициация составной загрузки происходит без условий. Заголовки применяются на этапе
Complete Multipart Upload. -
При получении кода ответа
409необходимо самостоятельно прервать текущую составную загрузку и начать новую.Важно
Пока составная загрузка не прервана, загруженные части остаются в бакете и тарифицируются как хранение данных.
Примеры использования
- Получение статистики запросов к объекту с использованием S3 Select
- Получение статистики запросов к объектам Object Storage с использованием Yandex Query
- Автоматическое копирование объектов из одного бакета Object Storage в другой