Классы хранения S3

Объектное хранилище S3 — это сервис для работы с неструктулированными данными, где информация хранится не в виде привычных папок на дисках, а как объекты внутри «корзин» (бакетов). Такой подход обеспечивает высокую масштабируемость, удобную интеграцию по API и идеально подходит для резервных копий, архивов, медиафайлов и рабочих документов.

Однако хранить любые данные в одном режиме экономически нецелесообразно. Чтобы найти баланс между скоростью доступа и стоимостью, в S3 используются классы хранения. Их логика проста: чем «теплее» класс, тем быстрее доступ к объектам, но выше цена хранения. Чем «холоднее» класс, тем дешевле обходится хранение больших объемов.

В облачной платформе пользователям доступны два основных режима:

  • Standard (тёплый класс). Базовый режим по умолчанию, предназначенный для данных, к которым нужен частый и быстрый доступ. Это рабочие документы, общие файлы, фото, видео, данные приложений и операционные выгрузки. Для пользователя это самый простой сценарий: вы загружаете объект и сразу работаете с ним без дополнительных условий.
  • TYPE_1 (холодный класс). Режим для данных, к которым обращаются редко. Он позволяет хранить большие объемы информации значительно дешевле, но не рассчитан на постоянную активную работу с файлами. Идеально подходит для долговременных архивов и бэкапов.
Важная информация к ознакомлению!

Standard (Тёплое) и TYPE_1 (Холодное) — это не два отдельных хранилища, а классы хранения внутри единого S3-сервиса. Вы выбираете подходящий класс для объекта или бакета в зависимости от бизнес-задачи: для часто используемых данных — более быстрый и доступный класс, для иных— более экономичный.
Класс хранения задаётся в момент загрузки объекта и сохраняется как его атрибут. Это не «счётчик по времени суток» и не отдельный режим работы сервиса, а свойство самого объекта.
Важно учитывать ограничения S3-совместимых приложений.
Некоторые приложения, например S3 Browser, Veeam, MSSQL, поддерживают классы хранения (Standard, Infrequent Access, Glacier и др.) только для нативных облачных провайдеров, таких как Amazon S3, Azure Blob, IBM Cloud. В режиме S3 Compatible эта функция может быть недоступна или существенно ограничена.
• Если используемое Вами ПО не поддерживает выбор нестандартных классов хранения, все данные при работе с сервисом будут сохраняться в классе по умолчанию — Standard (Тёплое).

Примеры использования Холодного класса хранения TYPE_1

Ниже приведены практические примеры работы с S3-хранилищем через AWS CLI, S3CMD и Rclone. Эти инструменты удобно использовать, когда нужно быстро проверить содержимое бакета, загрузить или скачать файлы, автоматизировать резервное копирование либо подключить S3 как диск в файловой системе. В контексте класса TYPE_1 они особенно полезны для сценариев, где данные загружаются редко, но должны храниться экономично и быть доступны по требованию. Важно учитывать, что при работе через S3-совместимые утилиты часть функций может зависеть от того, поддерживает ли конкретное приложение выбор класса хранения. Если выбор класса в интерфейсе недоступен, объект будет сохраняться в классе по умолчанию — Standard. Поэтому в примерах ниже мы показываем не только загрузку данных, но и типовые операции, которые помогают использовать TYPE_1 как архивный или резервный слой хранения.

Примеры AWS CLI

AWS CLI подходит для базовых операций с бакетами и объектами: просмотр, загрузка, скачивание, удаление и синхронизация файлов. Подробнее о работе через AWS CLI Вы можете в статье https://cloud.softline.ru/faq/s3-hranilische-faq/osnovnye-operatsii/#aws-cli Для S3-совместимого хранилища обычно указывается --endpoint-url, а сами команды остаются такими же, как в Amazon S3.

Для демонстрации создадим 2 новых бакета «bucket-demo-class-heated» - для теплого хранения объектов, «bucket-demo-class-cold» - для холодного хранения объектов. Соответственно оба бакета будут иметь класс хранения STANDARD — Тёплое, по умолчанию, и изменить его нельзя, но вот сами объекты при загрузке — можно.

         aws s3api create-bucket --bucket bucket-demo-class-heated
         aws s3api create-bucket --bucket bucket-demo-class-cold

Пример 1 Загрузка объекта в холодный класс хранения TYPE_1

Попробуем загрузить объект «Data1.txt» в бакет «bucket-demo-class-cold» с указанием «--storage-class TYPE_1»

         aws s3 cp "C:\Test\Data1.txt" s3://bucket-demo-class-
         cold/Data1.txt --storage-class TYPE_1

В результате будет получена ошибка. Так как высокоуровневые команды aws s3 (такие как cp, sync, mv) используют строгую клиентскую валидацию параметров на основе официальной модели API Amazon S3 (библиотека botocore). Поскольку TYPE_1 — это кастомное расширение конкретной S3-совместимой платформы, CLI просто не знает об этом значении и блокирует выполнение команды еще до отправки запроса в сеть.

Для обхода данного ограничения используем низкоуровневые команды aws s3api, которые являются прямыми объектами над REST API, а самое главное не имеют жесткой клиентской вариаций перечислений (enum) для таких параметров как «-storage-class», так как они просто передают указанную Вами строку напрямую в http-запрос.

Повторим попытку операции загрузки объекта, но вместо aws s3 cp используем aws s3api put-object:

         aws s3api put-object --bucket bucket-demo-class-cold --key
         Data1.txt --body "C:\Test\Data1.txt" --storage-class
         TYPE_1

Операция прошла успешно, проверим класс хранения загруженного объекта

         aws s3api head-object --bucket bucket-demo-class-cold --
         key Data1.txt --query StorageClass

Как видим значение атрибута «StorageClass» объекта «Data1.txt» приняло значение «TYPE_1» что и требовалось.

Пример 2 Смена класса хранения

Операция «put-object» является низкоуровневой, а также имеет некоторые ограничения и выполняется в один поток, что не позволит её использование в некоторых сценариях. Поэтому для загрузки данных чаще всего используют высокоуровневые команды типа «cp», которая при загрузке или копировании объекта запишет его в Теплое хранение — STANDARD. Соответственно если у Вас уже существуют или планируется загрузить объекты, класс хранения которых потребуется изменить на Холодное — TYPE_1, то для этого потребуется выполнить копирование объекта само на себя со сменой класса хранения через низкоуровневую команду «copy-object».

Выполним операцию загрузки объекта «Data2.txt» без явного указания класса хранения,

         aws s3 cp "C:\Test\Data2.txt" s3://bucket-demo-class-
         cold/Data2.txt

Операция прошла успешно, проверим класс хранения загруженного объекта

         aws s3api head-object --bucket bucket-demo-class-cold --
         key Data2.txt --query StorageClass

Как видим класс хранения STANDARD — Тёплое. Что бы сменить класс хранения на TYPE_1 — Холодное, скопируем объект сам на себя:

         aws s3api copy-object --bucket bucket-demo-class-cold --
         copy-source bucket-demo-class-cold/Data2.txt --key
         Data2.txt --storage-class TYPE_1

Операция прошла успешно, проверим класс хранения целевого объекта

         aws s3api head-object --bucket bucket-demo-class-cold --
         key Data2.txt --query StorageClass
Важно! Поскольку низкоуровневые команды aws s3api не имеют встроенной опции multipart — работают только в однопоточном режиме и только с одним объектом, то для массовых операций по работе с объектами (например, синхронизации папок) для смены или загрузки данных в не стандартный класс хранения, потребуется писать отдельные циклы. Поэтому, мы рекомендуем в контексте работы с классами хранения рассматривать AWS CLI либо для точечных операции или сбора с данных по объектам. Для массовых операций советуем рассмотреть работу через Rclone или S3CMD.

Примеры Rclone

Rclone удобен тем, что позволяет не только копировать файлы, но и подключать S3-бакет как виртуальный диск. Это особенно полезно, если пользователям нужно работать с объектным хранилищем почти так же, как с обычным диском в Windows или Linux. Подробнее о работе с Rclone в статье: https://cloud.softline.ru/faq/s3-hranilische-faq/podklyuchenie-s3-baketa-kak-diska-v-windows-i-linux-s-pomoschyu-rclone/

Для Rclone можно задать класс хранения либо на уровне конфигурации remote, либо прямо в команде. В документации rclone для S3 это делается через параметры storage class.

Пример 1 Загрузка файла\папки в холодный класс через параметр команды

Для демонстрации воспользуемся уже готовым подключением «backup_s3_CBC_1» бакета «test-rk-new-kiri1» Выполним загрузку файла «Data3.txt» в целевой бакет:

         ./rclone copy "C:\Temp\Data3.txt" backup_s3_CBC_1:test-
         rk-new-kiri1 --s3-storage-class TYPE_1

Проверим результат

         ./rclone lsjson backup_s3_CBC_1:test-rk-new-
         kiri1/Data3.txt --stat --metadata

Как видим файл появился в целевом бакете, а класс хранения отражен в атрибуте «tire».

Так же функционал Rclone позволяет эффективно работать с несколькими объектами, разместим в папку «Folder» несколько документов «Data4.txt» и «Data5.txt», а затем загрузим содержимое папки целиком в бакет:

         rclone copy "C:\Temp\Folder" backup_s3_CBC_1:test-rk-
         new-kiri1 --s3-storage-class TYPE_1

Проверим содержимое бакета

         rclone lsjson backup_s3_CBC_1:test-rk-new-kiri1 --
         metadata --recursive

Как видим, в бакете появилось еще 2 файла с холодным классом хранения.

Пример 2 Настройка холодного класса по умолчанию в конфигурации

Если задача требует размещать все объекты в бакете с использованием Холодного класса хранения, то можно зафиксировать данное свойство в конфигурации подключения. Откроем файл конфигурации подключения Rclone C:\Users\<User>\AppData\Roaming\rclone\rclone.conf добавим еще одно подключение к тому же пользователю S3 но уже со свойством storage_class = TYPE_1

         [backup_s3_CBC_1]
         type = s3
         provider = Other
         access_key_id = ************
         secret_access_key = ******************************
         region = Ru
         endpoint = https://s3-01.slcloud.ru/
         acl = private
         [backup_s3_CBC_2]
         type = s3
         provider = Other
         access_key_id = ************
         secret_access_key = ******************************
         region = Ru
         endpoint = https://s3-01.slcloud.ru/
         acl = private
         storage_class = TYPE_1

В итоге получим 2 варианта подключения «backup_s3_CBC_1» - будет использовать класс хранения по умолчанию Тёплое — STANDARD, «backup_s3_CBC_2» - будет использовать класс хранения по умолчанию Холодное — TYPE_1.

Загрузим в бакет «bucket-demo-class-cold» объекты «Data6.txt» и «Data7.txt» но через разные подключения, без прямого указания класса хранения:

         rclone copy "C:\Temp\Data6.txt" backup_s3_CBC_1:bucket-
         demo-class-cold
         rclone copy "C:\Temp\Data7.txt" backup_s3_CBC_2:bucket-
         demo-class-cold

Проверим содержимое бакета через любое подключение:

         rclone lsjson backup_s3_CBC_1:bucket-demo-class-cold --
         metadata --recursive

Как видим оба объекта появились в бакете но с разными классами хранения.


Примеры S3CMD

S3CMD — это консольная утилита для работы с S3-совместимыми хранилищами. Общая информация о работе S3CMD в статье: https://cloud.softline.ru/faq/s3-hranilische-faq/osnovnye-operatsii/#s3cmd Подходит для загрузки, скачивания, копирования и синхронизации объектов, а также удобна в тех сценариях, где нужен простой CLI без привязки к AWS CLI или подключению диска через mount. Для работы с S3CMD на ОС Windows потребуется установить Python и сам S3CMD, после чего выполнить первичную настройку подключения через конфигурационный файл.

Кратко об установке на OC Windows

  1. Установить актуальную версию Python c официального ресурса https://www.python.org/downloads/ (В данном примере использовалась версия python-3.15)
    Важно! Перед началом установки, рекомендуем активировать опцию «Add python.exe to PATH» для удобства вызова в консоли.
  2. Запустите консоль PowerShell от имени Администратора и выполните следующие команды

Установка s3cmd

         py -m pip install s3cmd

Вывести информацию по инсталляции s3cmd — позволит вывести информацию о версии и локации установки для прописывания в PATH

         py -m pip show s3cmd
  1. Для проверки корректности установки и корректности PATH выполните
         s3cmd --version

Если получена ошибка то воспользуйтесь вариантом

         py
         "C:\Users\<User>\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" --version

Если в абсолютном пути к приложению будут присутствовать кириллические элементы, то возможны ошибки.

  1. Настройка конфигурации
    Для инициации настройки конфигурации выполним команду
         py
         "C:\Users\<User>\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" --configure

После поэтапно внесем данные запрашиваемые конфигуратором (пример демонстрационной конфигурации):

         Access Key: ************
         Secret Key: ******************************
         Default Region [US]: Ru
         S3 Endpoint [s3.amazonaws.com]: s3-01.slcloud.ru
         DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]:          
         
bucket-demo-class-cold.s3-01.slcloud.ru
         Encryption password: (Опционально)
         Path to GPG program: (Опционально)
         Use HTTPS protocol [Yes]: yes
         HTTP Proxy server name: (Опционально)

Далее подтверждаем конфигурацию и фиксируем путь создания файла конфигурации, которую можно изменить позже, в данном примере:
Configuration saved to 'C:\Users\<User>\AppData\Roaming\s3cmd.ini'

  1. Проверим работоспособность, выполнив запрос о содержимом по целевому подключению
         py
         "C:\Users\<User>\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" ls

Если все настроено корректно, то получим список бакетов целевого пользователя S3

Далее, соответственно, если у Вас корректно настроен PATH и нет кириллицы в пути, то вместо конструкции

         py

         "C:\Users\<User>\AppData\Local\Programs\Python\Python315\Scripts\s3cmd"

будет работать просто s3cmd.

Пример 1. Загрузка файла\папки в холодный класс через параметр команды

S3CMD поддерживает указание storage class в вашей S3 Compatible-платформе, объект можно загрузить с явным классом хранения. Загрузим объект "Data8.txt" в бакет указав класс хранения в явном виде:

         py
         "C:\Users\Администратор\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" put                      
         "C:\Temp\Data8.txt" s3://bucket-demo-class-cold/Data8.txt --storage-class=TYPE_1

Проверим результат выведя информацию о целевом объекте:

         py
         "C:\Users\Администратор\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" info            
         s3://bucket-demo-class-cold/Data8.txt

Как видим, целевой объект был успешно загружен с холодным классом хранения

Теперь загрузим каталог «Folder» в целевой бакет через команду sync:

         py
         "C:\Users\Администратор\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" sync             
         "C:\Temp\Folder" s3://bucket-demo-class-cold/ --storage-class=TYPE_1

Проверим класс хранения в каждом из загруженных объектов

         py
         "C:\Users\Администратор\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" info            
         s3://bucket-demo-class-cold/Folder/Data4.txt
         
         py
         "C:\Users\Администратор\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" info             
         s3://bucket-demo-class-cold/Folder/Data5.txt

Как видим, все объекты целевой папки был успешно загружены с холодным классом хранения.

Пример 2 Настройка холодного класса по умолчанию в конфигурации

Что бы задействовать холодный класс хранения по умолчанию, обратимся к файлу конфигурации созданном ранее 'C:\<User>\Администратор\AppData\Roaming\s3cmd.ini' , в котором найдем пустое значение storage_class и присвоим ему значение TYPE_1 , после чего сохраним изменения и загрузим новый объект «Data9.txt» в бакет, без явного указания класса хранения:

         py
         "C:\Users\Администратор\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" put              
         "C:\Temp\Data9.txt"
         s3://bucket-demo-class-cold/Data9.txt

Проверим результат

         py
         "C:\Users\Администратор\AppData\Local\Programs\Python\Python315\Scripts\s3cmd" info            
         s3://bucket-demo-class-cold/Data9.txt

Объект успешно загрузился с холодным классом хранения по умолчанию.

Консультация Классы хранения S3

Не нашли инструкцию?

Заполните форму, и наш специалист свяжется с вами.

Мы дополним информацию и ответим на ваш вопрос.

Оставить заявку

Подключение S3-бакета как диска в Windows и Linux с помощью rclone

Основные операции

WORM политики

Основные возможности и ограничения

Введение в сервис S3 хранилище