Перейти к содержанию

Объектное хранилище S3

Общее описание

Объектное хранилище (S3) доступно на вкладке ОБЛАКО → Объектное хранилище S3. Это универсальное облачное решение для данных больших объёмов. S3 (от Simple Storage Service) представляет собой производительное и масштабируемое хранилище данных, лишенное иерархии. В рамках этой системы, все объекты обладают равными правами, что дает гибкость и позволяет удобно хранить разнообразную информацию длительное время и мгновенно получать к ней доступ.

Структура S3 максимально проста – есть всего три сущности (от большего к меньшему):

  • Хранилище – это место для хранения файлов. Доступ ко всему хранилищу предоставляется по набору ключей. Для большинства проектов достаточно одного хранилища. Но если у вас имеются разные продукты с разными командами, можете создать несколько хранилищ.
  • Бакет. Бакеты (buckets) в S3 представляют собой контейнеры, в которых вы можете хранить объекты (файлы с данными). Это основной уровень организации данных в S3. Бакеты уникальны в рамках всего хранилища. Длина имени от 3 до 63 символов. Используйте только строчные буквы, цифры, дефисы и точки (но не в начале или конце имени). Имейте в виду, что название бакета используется как часть URL для доступа к данным. См. также Модели адресации в S3, где указано, как именно можно сформировать URL для получения объекта (файла).
  • Объект – ключ и значение в виде файла с данными (видео, картинки и прочее).

В нашем кабинете вы можете сами создавать до 3-х хранилищ, видеть созданные вами бакеты, объем загруженных вами объектов и управлять доступом (создавать, удалять ключи и хранилища):

Для доступа к S3 необходим только набор ключей, а также сам адрес (endpoint), который фиксирован:

Доступ к S3 с клиентской стороны

S3 разработан на основе API, созданного в Amazon Web Services (AWS) и ставшего международным стандартом. Каждый объект (то есть произвольный файл с идентификатором), находящийся в этом хранилище, можно извлечь, используя уникальный идентификатор объекта, доступный по протоколам HTTP или HTTPS. Для работы с этими объектами (файлами) у вас есть две возможности: воспользоваться клиентом (как консольным, так и с графическим интерфейсом), либо обратиться к API, спецификация которого описана на сайте авторов протокола.

Рассмотрим подробнее работу с популярными клиентами для работы S3-хранилищами: графические CloudBerry, S3Browser и CyberDuck, а также консольные – Rclone и s3cmd.

С графическим интерфейсом:

С командной строкой:

Совместимые клиенты

CloudBerry

Базовые настройки

При открытии клиента для добавления пользователя выбираем Source -> New Storage Account:

Далее идёт предложение выбора типа хранилища, наше хранилище S3 Compatible:

Далее требуется задать имя пользователя, ввести Service point (это endpoint хранилища, например - https://s3c2.001.gpucloud.ru/ в зоне Москва) и ключи пользователя. После этого следует проверить соединение с хранилищем, при удачном соединении появится окно Connection success:

Создание бакета

Для создания бакета нужно перейти в созданный аккаунт и нажать иконку New Bucket и задать имя бакета:

Загрузка файлов

Для загрузки файла со своего компьютера в хранилище, в другой половине приложения можно выбрать Source -> My computer и нужный файл перетащить в бакет, либо сделать это напрямую перетаскивая файл из File Explorer'а:

Для изменения прав доступа к бакету / папке / файлу для пользователей, нужно нажать правой кнопкой мыши по объекту и выбрать ACL Settings:

Справа есть кнопки для выдачи всем пользователям права на чтение файла, либо сделать его приватным:

  • Read — чтение файла, его просмотр
  • Write — изменение файла
  • Read ACP — разрешение на чтение прав для различных пользователей
  • Write ACP — разрешение на изменение прав для различных пользователей

Ссылка на файл будет выглядеть следующим образом: https://testbucket.s3c2.001.gpucloud.ru/testpicture.jpg

S3Browser

Базовые настройки

При открытии клиент предлагает добавить пользователя, необходимо ввести имя, тип аккаунта (наш тип — S3 Compatible Storage), REST Endpoint (например - s3c2.001.gpucloud.ru), Access Key и Secret Access Key, нажать Add new account:

Создание бакета

Для создания бакета нужно перейти в созданный аккаунт и нажать иконку New bucket и задать имя бакета:

Загрузка файлов

Для загрузки файла со своего компьютера в хранилище, нужно выбрать Upload -> Upload file(s) и выбрать нужный файл(ы), либо сделать это напрямую, перетаскивая файл из File Explorer'а:

Для изменения прав доступа к бакету / папке / файлу для пользователей, нужно выделить нужный объект и в меню снизу перейти во вкладку Permissions.

Снизу есть кнопки для выдачи всем пользователям права на чтение файла, либо сделать его приватным:

  • Read — чтение файла, его просмотр
  • Write — изменение файла
  • Read Permissions — разрешение на чтение прав для различных пользователей
  • Write Permissions — разрешение на изменение прав для различных пользователей

Ссылка на файл будет выглядеть следующим образом: https://testbucket.s3c2.001.gpucloud.ru/testpicture.jpg

CyberDuck

CyberDuck – это клиент с открытым исходным кодом файловый менеджер для macOS, Linux и Windows. Программа поддерживает протоколы FTP, SFTP, OpenStack Swift и AmazonS3. Для установки CyberDuck скачайте дистрибутив на официальном сайте.

Подключение к бакету

  • Тип подключения: выберите Amazon S3.
  • Сервер: укажите <endpoint>. В качестве <endpoint> указывается адрес хранилища, например: s3c2.001.gpucloud.ru.
  • Порт: 443.
  • Access Key ID: идентификатор ключа Access Key.
  • Пароль: секретный ключ Secret Key.

С инструкциями по дальнейшей работе с CyberDuck вы можете ознакомиться на сайте разработчика.

Rclone

Установка

Вы можете скачать и установить Rclone с официального сайта.

Настройка конфигурации S3

Запустите команду rclone config в терминале, чтобы настроить подключение к вашему объектному хранилищу S3. Вам потребуется указать имя конфигурации, выбрать s3 в качестве типа хранилища и следовать инструкциям для ввода учетных данных и параметров доступа к S3. Когда будет спрашивать о типе Storage, выберите S3 (не Amazon S3) и укажите название.

Загрузка файлов

После настройки конфигурации S3, вы можете использовать команду rclone copy или rclone sync, чтобы загрузить файл в S3. Синтаксис команды будет следующим:

rclone copy /путь/к/локальному/файлу имя_конфигурации:название_бакета/путь_в_S3/

Здесь:

  • /путь/к/локальному/файлу - это путь к файлу, который вы хотите загрузить.
  • имя_конфигурации - это имя конфигурации S3, которое вы указали при настройке.
  • название_бакета - это имя бакета в вашем S3-хранилище, куда вы хотите загрузить файл.
  • путь_в_S3/ - это путь в S3, по которому будет размещен файл. Можете оставить его пустым, чтобы файл загрузился в корень бакета.

Пример команды загрузки файла:

rclone copy /путь/к/моему_файлу myS3Config:myBucket/

После выполнения этой команды, ваш файл будет загружен в указанный бакет в S3.

s3cmd

Клиент s3cmd – простой и удобный опенсорсный клиент, написанный на Python. Его можно установить на любую популярную ОС. Инструкция и сама программа доступны на официальном сайте. Рассмотрим установку и инструкцию по использованию на примере Ubuntu. Использование на других ОС выглядит так же, а про установку см. соответствующий раздел оф. сайта.

Установка

  1. Откройте терминал на вашем Ubuntu.
  2. Установите s3cmd с помощью следующей команды:
    sudo apt-get update
    sudo apt-get install s3cmd
    

Настройка

После установки, запустите настройку s3cmd с помощью команды:

s3cmd --configure

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

  • Access Key (ключ доступа).
  • Secret Key (секретный ключ).
  • Регион вашего S3 (например, "us-east-1").
  • Указание, следует ли использовать шифрование (yes/no).

Пример корректного конфига:

  Access Key: ***
  Secret Key: ***
  Default Region: us-east-1
  S3 Endpoint: s3c2.001.gpucloud.ru
  DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.s3c2.001.gpucloud.ru
  Encryption password: 
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: True
  HTTP Proxy server name: 
  HTTP Proxy server port: 0

Использование

После настройки, вы можете использовать s3cmd для выполнения различных операций с бакетами S3.

Примеры команд:

  • Загрузка локального файла в бакет S3:
    s3cmd put имя_локального_файла s3://имя_бакета/путь_в_бакете/
    
  • Загрузка бакета S3 на локальную машину:
    s3cmd get s3://имя_бакета/путь_к_файлу_в_бакете имя_локальной_директории/
    
  • Получение списка файлов в бакете S3:
    s3cmd ls s3://имя_бакета/
    
  • Удаление файла из бакета S3:
    s3cmd del s3://имя_бакета/путь_к_файлу_в_бакете
    

Это базовые команды для работы с s3cmd. Вы можете выполнить s3cmd --help, чтобы увидеть полный список команд и опций.

Дополнительная информация

Модели адресации в S3

Сейчас мы поддерживаем две модели адресации для доступа по HTTP(S) к хранилищу S3:

  1. Path-style — модель, при которой название бакета указывается в части пути до объекта в URI (URI path), например: https://s3c2.001.gpucloud.ru/some-bucket/some-text-file.txt
  2. Virtual-hosted style — модель, при которой название бакета включается в адрес хоста (hostname), например: https://some-bucket.s3c2.001.gpucloud.ru/some-text-file.txt

Рекомендуем использовать Virtual-hosted style, особенно – для доступа к файлам в связке с CDN при указании ориджина в ресурсе.

При создании источника данных с S3-доменом будет необходимо указать разрешенный бакет, для этого появится соответсвующее поле.

Файлы огромных размеров

Файлы размером более 5 Гб нельзя копировать внутри S3 из-за технических ограничений, связанных с кэшем. Для копирования больших файлов лучше использовать multi-part upload.