Добавление SaaS-приложенияBeta
Сервис Marketplace и SaaS-приложение взаимодействуют между собой через SaaS-брокер по протоколу VK OSB. Протокол предоставляется платформой VK Cloud.
Требования к SaaS-брокеру:
-
Брокер должен реализовывать методы, которые описывают жизненный цикл инстансов сервиса. Методы представлены на схеме.
-
В брокере должна быть настроена аутентификация по безопасному протоколу HTTPS c сертификатом, выданным доверенным центром сертификации.
Поставщик SaaS-приложения разрабатывает SaaS-брокер полностью самостоятельно либо на основе шаблона, который предоставляется платформой VK Cloud. В шаблоне уже реализовано взаимодействие между магазином и брокером. Его необходимо дополнить описанием взаимодействия брокера с конкретным SaaS-приложением. Шаблон разработан на языке Python на основе фреймворка FastAPI.
Эта инструкция предназначена для случая разработки SaaS-брокера на основе шаблона от VK Cloud.
-
Отправьте письмо на marketplace@cloud.vk.com. В письме запросите:
- протокол VK OSB;
- шаблон для разработки SaaS-брокера;
- имена тестовых и открытых пространств имен Marketplace и доступ к ним.
-
Отправьте на marketplace@cloud.vk.com письмо с вложенной в него иконкой в формате SVG размером не менее 62 × 62 пикселей. Размер файла с иконкой не должен превышать 1 МБ.
Иконка сервиса отображается в карточке сервиса:
- В каталоге магазина.
- На вкладке Описание сервиса на странице сервиса.
В ответном письме будет выслан URL иконки, который указывается в JSON-файле конфигурации сервиса.
-
Зарегистрируйтесь на VK Cloud. Учетная запись VK Cloud необходима для тестирования приложения в магазине.
-
Создайте файл
catalog_<ИМЯ_СЕРВИСА>.json. -
В JSON-файле опишите конфигурацию сервиса, используя следующую структуру:
{"services": [{<ПАРАМЕТРЫ_СЕРВИСА>,"preview": {"parameters": [{"name": "<ИМЯ_ОПЦИИ_1>" // Имя первой тарифной опции},{"name": "<ИМЯ_ОПЦИИ_2>" // Имя второй тарифной опции},...]},"plans": [{ // Описание первого тарифного плана<ПАРАМЕТРЫ_ПЛАНА>,"display": {},"billing": {},"schemas": {}},{ // Описание второго тарифного плана<ПАРАМЕТРЫ_ПЛАНА>,"display": {},"billing": {},"schemas": {}},...]}]}Здесь:
-
<ПАРАМЕТРЫ_СЕРВИСА>— параметры сервиса. -
Секции
previewиplansвместе определяют вид матрицы тарифных планов. В матрице будут отображаться все тарифные планы, указанные в секцииplans, и тарифные опции, указанные в секцииpreview. -
Массив
parametersсекцииpreviewсодержит имена тарифных опций, может быть пустым. Эти имена используются только в конфигурационном JSON-файле. В интерфейсе магазина тарифные опции будут отображаться с именами, заданными в секции schemas параметромdescriptionэтих опций. -
Секция
plansописывает тарифные планы и их опции и для каждого плана содержит следующие блоки:<ПАРАМЕТРЫ_ПЛАНА>— параметры плана.- Секция display описывает мастер конфигурации тарифного плана.
- Секция billing содержит информацию о стоимости и способе тарификации плана и его опций.
- Секция schemas перечисляет тарифные опции плана.
-
-
Разработайте клиент для взаимодействия с API вашего сервиса.
-
Разработайте сервисный менеджер, описывающий взаимодействие брокера и сервиса. Для этого реализуйте следующие методы:
Метод
Входные данные
Создание тенанта или аккаунта
- OSB ID инстанса сервиса, который формируется магазином при подключении сервиса. OSB ID передается в SaaS-приложение, чтобы SaaS-приложение сформировало ID инстанса сервиса. ID инстанса сервиса используется в методах, описанных ниже в таблице.
- ID тарифного плана.
- Тарифные опции плана, описанные в JSON-файле конфигурации сервиса в секции plans.schemas.service_instance.create.
- (Опционально) Контекст, содержащий информацию о пользователе: электронная почта, уникальный идентификатор проекта (PID)
Обновление тенанта или аккаунта
- ID инстанса сервиса.
- ID тарифного плана.
- Тарифные опции плана, описанные в JSON-файле конфигурации сервиса в секции plans.schemas.service_instance.update
Получение и удаление тенанта или аккаунта
ID инстанса сервиса
Создание сервисных привязок (bindings)
- ID инстанса сервиса.
- Параметры сервисных привязок, описанные в JSON-файле конфигурации сервиса в секции plans.schemas.service_binding.create.
- (Опционально) Контекст, содержащий информацию о пользователе: электронная почта, уникальный идентификатор проекта (PID)
Получение и удаление сервисных привязок
- ID инстанса сервиса.
- ID сервисной привязки
-
Интегрируйте клиент в сервисный менеджер.
-
Настройте аутентификацию в брокере.
-
Если в SaaS-приложении есть постоплатные тарифные опции и метрики по ним собираются по pull-модели, выполните дополнительные действия:
-
В сервисном менеджере реализуйте метод для получения отчета по фактически использованным ресурсам SaaS-приложения. В ответе на запрос брокер должен передать магазину отчет.
-
В сервисном менеджере реализуйте метод для сообщения брокеру о том, что отчет обработан (списание денежных средств по отчету произошло или запланировано).
-
-
Перейдите в директорию с брокером.
-
Поместите файл с конфигурацией сервиса
catalog_<ИМЯ_СЕРВИСА>.jsonв поддиректориюresources. -
В файле
resources/plan_mapping.jsonукажите:-
<ИМЯ_СЕРВИСА>— имя сервиса. -
<ID_ПЛАНА>— ID тарифных планов, указанных в файлеcatalog_<ИМЯ_СЕРВИСА>.json. -
<SAAS_ID_ПЛАНА>(форматstring) — ID тарифных планов на стороне сервиса, соответствующих ID тарифных планов<ID_ПЛАНА>.{"<ИМЯ_СЕРВИСА>": {"<ID_ПЛАНА>": <SAAS_ID_ПЛАНА>,"<ID_ПЛАНА>": <SAAS_ID_ПЛАНА>}}
Пример содержимого файла
plan_mapping.json:{"VKT": {"0dc54b75-XXXX-89d5a47eef71": 1,"312b628e-XXXX-080ab4ca3acb": 2,"e2ae1588-XXXX-3f5081a799a9": 3,"b54e7247-XXXX-7a9dccc22e7b": 4}} -
-
В директории с брокером переименуйте файл
.env.exampleв.env. -
В файле
.envукажите имя сервиса вBROKER_MODE:BROKER_MODE=<ИМЯ_СЕРВИСА>
-
В файле
.envв директории брокера опишите переменные окружения:BROKER_PROVIDER_CLIENT_ID— имя брокера для доступа к SaaS-приложению.BROKER_PROVIDER_SECRET— пароль для доступа брокера к SaaS-приложению.BROKER_PROVIDER_URL— URL SaaS-приложения.BROKER_USERNAME— имя магазина для межсервисного взаимодействия c брокером.BROKER_PASSWORD— пароль магазина для межсервисного взаимодействия с брокером.
-
В файле
.envв директории брокера укажите значения переменных для доступа к БД брокера. -
Установите Python-библиотеки, выполнив команду:
Linuxpip install -r requirements/prod.txt -
Запустите брокер, выполнив команду:
Linuxgunicorn app.main:app --log-file - --workers ${UVICORN_WORKERS:-1} --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:${BROKER_PORT:-8000} --timeout ${WORKER_TIMEOUT:-90}Пример ответа на команду запуска брокера:
INFO: Started server process [34934]INFO: Waiting for application startup.INFO: Application startup complete.INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) -
После установки брокера откройте в браузере страницу http://0.0.0.0:8000/docs.
Страница содержит описание API брокера в редакторе Swagger.
-
Выполните запросы API, используя следующие параметры:
- Значение версии протокола VK OSB
x-broker-api-version(например,"0.1"). - Значение
BROKER_USERNAMEиз файла.env. - Значение
BROKER_PASSWORDиз файла.env.
- Значение версии протокола VK OSB
Чтобы собрать образ, воспользуйтесь файлом Dockerfile в директории шаблона брокера.
Отправьте письмо на marketplace@cloud.vk.com. В письме укажите:
-
Информацию о компании:
- имя компании,
- контактное лицо,
- телефон.
-
Электронную почту пользователя, которому будут приходить уведомления об ошибках при создании инстансов сервиса.
-
Параметры брокера, приведенные в таблице.
Имя | Описание | Формат | Обязательный |
|---|---|---|---|
| Имя брокера | string | |
| URL, на который будут отправляться запросы от магазина | string | |
| Описание брокера | string | |
| Версия протокола VK OSB | string | |
| Имя магазина для межсервисного взаимодействия c брокером. | string | |
| Пароль магазина для межсервисного взаимодействия с брокером. | string |
После регистрации брокера SaaS-приложение будет доступно в тестовом пространстве имен магазина. В открытом пространстве имен магазина сервис будет доступен только после публикации.
Чтобы проверить, как сервис будет функционировать в VK Cloud, протестируйте его в тестовом пространстве имен магазина:
-
Отправьте письмо на marketplace@cloud.vk.com, чтобы получить грант на тестирование сервиса. Средства будут зачислены на бонусный счет вашего проекта в VK Cloud.
-
Если у вас нет доступа к тестовым пространствам имен, указанным в конфигурации сервиса, отправьте письмо на marketplace@cloud.vk.com. В письме укажите:
- Имена тестовых пространств имен Marketplace, заданных в параметре
metadataв JSON-файле конфигурации сервиса. - Электронную почту пользователя, которому необходим доступ в тестовые пространства имен Marketplace.
- Имена тестовых пространств имен Marketplace, заданных в параметре
-
Перейдите в раздел Магазин приложений личного кабинета VK Cloud.
-
Нажмите кнопку Все решения.
-
Нажмите на карточку вашего сервиса и перейдите на вкладку Тарифные планы.
-
Убедитесь, что мастер конфигурации каждого тарифного плана отображается корректно.
-
Подключите сервис.
-
Обновите инстанс сервиса:
- Поменяйте значения тарифных опций текущего тарифного плана.
- Перейдите на новый тарифный план.
-
Проверьте основные пользовательские сценарии сервиса.
-
Удалите инстанс сервиса.
-
При необходимости внесите изменения в конфигурацию сервиса:
- Перейдите в поддиректорию
resourcesдиректории с брокером. - Отредактируйте файлы
catalog_<ИМЯ_СЕРВИСА>.jsonиplan_mapping.json. - Повторите тестирование еще раз.
- Перейдите в поддиректорию
-
Если вы указали тестовые значения стоимости в конфигурации сервиса на время тестирования и отладки, отредактируйте файл
catalog_<ИМЯ_СЕРВИСА>.json, указав в нем реальные значения.
Отправьте письмо на marketplace@cloud.vk.com. В письме укажите ID сервиса и его ревизию.
Будет проведено модерирование конфигурации сервиса. После этого сервис будет опубликован в магазине.
Публикуемая ревизия сервиса переместится из тестового пространства имен магазина в открытое, указанное в параметре metadata JSON-файле конфигурации сервиса. Сервис будет доступен всем пользователям, имеющим доступ в это открытое пространство имен.