Из 1С в S3 и обратно. Работа с объектным хранилищем

06.02.24

Интеграция - Облачные сервисы, хостинг

В данной статье демонстрируется работа с объектным хранилищем 1С с использованием подписанных (pre-signed) ссылок. Загрузка, скачивание и удаление реализованы на "чистом" языке 1С без внешних компонент и сервисов. В качестве провайдера хранилища S3 будем использовать Яндекс.Облако

Об S3 (Simple Storage Service)

S3 (Simple Storage Service) — это сервис облачного хранения данных от компании Amazon. Он позволяет хранить и получать данные в любом объеме и в любое время.

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

Для работы с S3 используются специальные API, которые позволяют загружать, скачивать и удалять файлы, а также управлять доступом к ним. Также S3 интегрирован с многими другими сервисами Amazon, что позволяет использовать его в комплексе с другими облачными сервисами.

 

Как работает S3

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

Объект в S3 — это двоичные данные, которые хранятся в бакете (backet). Каждый объект имеет свой уникальный ключ, который используется для доступа к нему. Ключи объектов могут быть любой длины и содержать любые символы, кроме ‘/’, '' и ‘+’.
Кроме того объект содержит метаданные - прочие значимые атрибуты объекта (размер, тип и другие пользовательские данные для отбора и сортировки). Они нужны, чтобы находить однотипные объекты и работать с ними.

 

Инструменты для работы

Для работы с хранилищем S3 существует несколько инструментов: консольные клиенты (AWS CLIS3cmd), файловые браузеры (CyberduckWinSCP), а так же SDK для популярных языков программирования - JavaJavaScriptPython.NETC++PHPGo.
Для 1С готовых решений нет. Однако, поскольку 1С:Предприятие 8.3 поддерживает выполнение HTTP запросов из коробки, можно реализовать основные функции с использованием механизма подписанных (pre-signed) ссылок.

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

Подписанная ссылка — это URL, содержащий данные для авторизации запроса в своих параметрах. Составить подписанный URL может пользователь, владеющий статическими ключами доступа.  Описание создание подписанной ссылки для Amazon Simple Storage Service можно изучить по ссылке.

В качестве примера для практической реализации механизма мы будем использовать ресурсы Object Storage Яндекс.Облако.

 
 Общий вид подписанной ссылки в Яндекс.Облако

 

 

Создание бакета и получение ключей доступа.

Для работы вы должны предварительно авторизоваться в консоли управления и создать платежный аккаунт. При первой регистрации выдается стартовый грант, который действует в течении 60 дней и позволит использовать ресурсы без оплаты. Подробнее о начале работы в облаке можно прочитать по ссылке.

Далее выберите каталог, в котором хотите создать бакет и нажмите кнопку Создать ресурс и выберите Бакет. Укажите имя бакета, которое должно быть уникальным для всего Object Storage. Это имя используется как часть URL для доступа к данным и его будут видеть пользователи. При необходимости можно ограничить размер. Обратите внимание, что на данный момент первый гигабайт хранения не тарифицируется. В качестве класса хранилище укажите Стандартное. Подробнее о классах хранилищ можно прочитать тут.

Для для доступа к бакету и формирования подписанных ссылок следует получить статические ключи доступа. Для этого в консоли управления в верхней части экрана перейдите на вкладку Сервисные аккаунты. Выбираем аккаунт с нужными правами и жмем кнопку Создать новый ключ на верхней панели и выбираем Создать статический ключ доступа. Копируем ключи из диалогового окна в надежное место, так как после закрытия диалога значение ключей уже будет недоступно. С помощью них мы будем подписывать ссылки для доступа к хранилищу.

 

Реализация.

Подписанная ссылка для работы с Object Storage Яндекса должна иметь следующие параметры:

  • X-Amz-Algorithm - идентифицирует версию подписи и алгоритм ее вычисления. Это константа, значение AWS4-HMAC-SHA256.
  • X-Amz-Date - время в формате ISO8601, например, 20180719T094539Z. Указанная дата должна по значению (не по формату) совпадать с датой в параметре X-Amz-Credential.
  • X-Amz-Expires - время в секундах, в течение которого ссылка действительна. Начало отсчета — момент, указанный в параметре X-Amz-Date. Максимальное значение — 2592000 секунд (30 дней).
  • X-Amz-SignedHeaders  - заголовки запроса, которые вы хотите подписать. Обязательно следует подписать заголовок Host и все заголовки X-Amz-*, которые используются в запросе, в том числе заголовки метаданных X-Amz-Meta-*.  Другие заголовки подписывать не обязательно, однако чем больше вы подпишете заголовков, тем безопаснее будет запрос. Заголовки запроса отделяются символами ;.
  • X-Amz-Credential - идентификатор для подписи. Строка формата <идентификатор_ключа_доступа>/<дата>/ru-central1/s3/aws4_request, где <дата> (в формате YYYYMMDD — год, месяц, день) должна совпадать с датой, установленной в заголовке X-Amz-Date.
  • X-Amz-Signature - подпись запроса, формирование которой будет описано далее.

В первую очередь следует отметить то, что механизм подписания ссылок использует HMAC с хэширующей функцией SHA256. Данный механизм был реализован средствами 1С:Предприятие 8.3.

 
 Реализация HMAC с SHA256

Опишем вспомогательные функции для формирования подписанной ссылки:

 
 Служебные функции

И собственно сама функция.

 
СоздатьСсылку(КлючДоступа, СекретныйКлюч, Бакет, Путь, Метод="GET", ВремяЖизни=300, Заголовки=Неопределено)

В качестве параметров принимает следующие аргументы:

  • КлючДоступа, СекретныйКлюч - ключи, полученные в консоли управления Яндекс.Облако
  • Бакет - имя бакета, который Вы создали в консоли.
  • Метод:
    • GET - получение данных из хранилища
    • PUT - отправка данных в хранилище
  • ВремяЖизни - время жизни ссылки, максимальное значение — 2592000 секунд (30 дней).
  • Заголовки - заголовки метаданных. Ключи всегда должны начинаться на X-Amz-Meta-. Например X-Amz-Meta-Author, X-Amz-Meta-KratkoeOpisanie.

По описанию на Amazon, стандарт позволяет производить загрузку данных частями. Т.е. можно обрабатывать большие файлы частями - последовательно или параллельно. Однако у Яндекса я не нашел описания в документации, поэтому не пробовал это реализовать. А с иностранными облаками сейчас проблемы.

 

Примеры использования

 
 Отправка данных
 
 Получение данных

 

Выводы

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

Описанный вариант интеграции с 1С можно использовать, например, для отправки данных в облачные СУБД (YDB, ClickHouse) для последующего доступа к ним из BI-систем (Datalens).

Или просто для хранения резервных копий информационных баз.

S3 Яндекс.Облако AWS-S3 Хранилище Интеграция

См. также

Интеграция 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и др.)

Облачные сервисы, хостинг 8.3.14 Конфигурации 1cv8 Россия Платные (руб)

Готовое решение по интеграции 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и любое совместимое объектное хранилище). Решение даёт возможность осуществлять как основные операции (получить список, закачать, скачать, удалить и т.д.), так и расширенные (работа с бакетами, генерация ссылок, работа с правами и т.д.) с объектным хранилищем S3 прямо из 1С.

31200 руб.

27.04.2021    18537    24    70    

39

Облачная АТС Билайн - интеграция с 1С

Управление взаимоотношениями с клиентами (CRM) Телефония, SIP Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Продукт интеграции возможностей Облачной АТС Билайн в систему 1С Предприятие 8. Звонки прямо из программы 1С, уведомления о текущих звонках, регистрация пропущенных и завершенных вызовов, ведение журнала, анализ данных об использовании мобильной связи.

12000 руб.

20.03.2019    22372    52    0    

35

В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана

Облачные сервисы, хостинг Linux Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В публикации рассматриваются все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Как случаи, когда сервер 1С авторизирует веб и обычных клиентов 1С в active directory, так и когда сам сервер является клиентом, например при HTTP запросах выполняемых сервером 1С.

18.03.2024    526    capitan    0    

9

Готовое облако или выделенный сервер? Экономика владения 1С

Облачные сервисы, хостинг Бесплатно (free)

Если вы работаете с 1С, то, скорее всего, используете для этого собственный сервер. Это решение дает больше гибкости: железо всегда под рукой, в любой момент можно поменять конфигурацию или установить дополнительное ПО. Например, чтобы организовать бухгалтеру удаленный рабочий стол. Но насколько этот вариант экономически выгоден для компании? Мы сравнили три варианта развертывания 1С: на собственном сервере, на арендованном в Selectel и в готовом облаке. Какие есть преимущества и недостатки у каждого варианта и что выгоднее — разбираем в статье.

13.03.2024    596    doctor_it    6    

0

Три пингвина под окном… Точки над Ё. Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux

Облачные сервисы, хостинг Linux Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Прошлая публикация "Три пингвина под окном… Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux" набрала более 20К просмотров. В моем случае это абсолютный рекорд. Как и обещал в ней, рассказываю, как установить неподдерживаемый дистрибутив ОС у облачного провайдера.

25.02.2024    2230    capitan    0    

6

Бесплатный митап “1С в облаке: возможности и риски, решения и кейсы”

Облачные сервисы, хостинг Мероприятия Бесплатно (free)

На митапе говорили о переносе 1С в облако: какие решения есть на рынке, их достоинства и недостатки. На примере реальных кейсов узнали особенности перехода, сроки, бюджеты, риски и возможности. В программе митапа 5 докладов и круглый стол.

06.02.2024    2869    0    Infostart    0    

18

В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)

Linux Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

На прошедшем вебинаре "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС" мы договорились, что продолжением будет установка соединения по HTTPS и архивирование. Это финальные штрихи в настройке рабочего места. Вот и оно (продолжение) или они (штрихи), прошу под кат...

29.01.2024    772    capitan    5    

6

Непрерывный сбор данных из торговых точек для визуализации в Yandex DataLens

Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Россия Управленческий учет Бесплатно (free)

В данной статье рассматривается пример непрерывного сбора данных о продажах со множества торговых точек и последующей визуализации через Yandex DataLens в режиме реального времени.

05.01.2024    2050    Sedaiko    23    

51
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Viktor_Ermakov 364 07.02.24 13:17 Сейчас в теме
спасибо за труд, хорошая статья
artbear; Sedaiko; +2
2. laperuz 46 07.02.24 17:54 Сейчас в теме
Для полноты статьи стоит упомянуть, что начиная с 8.3.24 в платформе реализована нативная поддержка S3, правда только с КОРП лицензией
https://its.1c.ru/db/v8324doc/bookmark/cs/TI000000349
Sedaiko; o.nikolaev; +2
4. Sedaiko 578 08.02.24 01:04 Сейчас в теме
(2) Спасибо, прозевал инфу. Давно делал реализацию.
Маловероятно, что в ПРОФ появится. Тем более что это фишка клиент-серверного инстанса
+
11. JohnyDeath 301 11.02.24 19:35 Сейчас в теме
(2) там немного про другое: дали возможность автоматом сохранять двоичные данные в S3, но кодом свой любой файл в нужное тебе хранилище ты никак не отправишь.
Я отправлял запрос в бота 1С, чтобы они дали возможность простым разработчикам удобно работать с S3 хранилищами, ведь внутри платформы всё уже есть, осталось пробросить это для нас наверх и описать в документации.
+
3. o.nikolaev 212 08.02.24 00:37 Сейчас в теме
5. baracuda 2 08.02.24 09:11 Сейчас в теме
А есть ли бесплатные варианты что у себя на сервере можно было поднять S3 подобное хранилище?
+
6. S_Vidyaev 08.02.24 11:46 Сейчас в теме
Тоже приходилось реализовывать когда-то. Хочу добавить, что AWS4 аутентификация очень удобно сделана в Коннекторе

(5) Есть, много. например, ceph
kasper076; baracuda; Sedaiko; +3
7. Sedaiko 578 08.02.24 13:54 Сейчас в теме
(5) MinIO
Но смысл все на одном сервере? сама фишка объектного хранилища - горизонтальное масштабирование и резервирование данных на разных узлах.
S_Vidyaev; +1
8. baracuda 2 08.02.24 14:21 Сейчас в теме
(7) политиками безопасности например может быть запрещено размещение данных на внешних ресурсах.
+
9. BlizD 1025 08.02.24 20:07 Сейчас в теме
Спасибо. За статью.

Несколько лет назад делал расширение для хранение файлов на s3 вместо томов на диске.

Возможно будет кому полезно.


https://github.com/BlizD/S3_SSL

Расширение для БСП для хранения файлов на s3 (minio, Amazon S3, Mail.Ru Cloud и т.п.)

Разработано совместно с @zotov-vs

Версия БСП: 3.1.2.343

Версия платформы: 8.3.17.1851

При обращении к API используется Connector @vbondarevsky

Спасибо malikov-pro за публикации external-storage-1c-ssl Хранение файлов томов БСП в хранилище с OpenStack API @malikov-pro
Sedaiko; +1
10. Sedaiko 578 09.02.24 03:42 Сейчас в теме
(9) Я, кстати, думал об этом. Но больше склоняюсь к монтированию через s3fs-fuse. Хотя в проде не запускал
+
12. LjeDmitrii 14.02.24 11:12 Сейчас в теме
Спасибо за статью! Очень помогло в построении обмена с Yandex Object Storage
Sedaiko; +1
13. magv 23 09.04.24 10:57 Сейчас в теме
Для Yandex Object Storage - заработало сразу
При проверке для провайдера Selectel - сразу не заработало.
Требуется в функции СоздатьСсылку() поменять строку:
Поля.Добавить("X-Amz-Signature=" + ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));

на строку:
Поля.Добавить("X-Amz-Signature=" + НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура)));

В описании на сайте Amazon для поля Signature было указано:
The 256-bit signature expressed as 64 lowercase hexadecimal characters.
+
Оставьте свое сообщение