Запуск FastAPI (Python) на Yandex Cloud Functions и Yandex Database

10.03.22

Интеграция - WEB-интеграция

Описание прототипа для запуска HTTP API сервиса на serverless технологии с применением фреймворка.

Вводные

Нужно

  • сервис для обработки HTTP запросов с записью в БД
  • с возможностью применения современных технологий
  • желательно бесплатный для небольшого количества запросов (при большем объеме компенсируется прибыльностью сервиса)

В статье описываю из каких компонентов собирал прототип и источники компонентов, готовую сборку со скриншотами буду описывать после доводки инструментов до стабильного состояния, детального разбора и рефакторинга кода.

Вариант решения

Из доступных в RU сегменте выделяется Yandex со связкой

Осваиваю Python, универсальность, нравится синтаксис. Понравилось работать с FastAPI https://fastapi.tiangolo.com/, минимум компонентов для старта и автодокументирования, возможность подключать компоненты с разной степенью сложности.

В качестве "обертки"  для работы с сервисом использую пакет Yappa https://github.com/turokg/yappa, ссылка на статью

Локальное место под Win10, PyCharm Community edition.

 

API Gateway

Из документации:

API-шлюз — это интерфейс взаимодействия с сервисами внутри Yandex.Cloud или в интернете.

API-шлюз задается декларативно при помощи спецификации. Спецификация — это файл в формате JSON или YAML с описанием API-шлюза по стандарту OpenAPI 3.0.

При создании точки подключения предоставляет HTTPS на техническом домене, можно подключить и свой.

Для перенаправления всех запросов на функцию используется шаблон

openapi: 3.0.0
info:
  title: my-project
  version: '0.1'
servers:
- url: https://d5d92t0l8j333u9rmmsk.apigw.yandexcloud.net
paths:
  /{url+}:
    x-yc-apigateway-any-method:
      parameters:
      - explode: false
        in: path
        name: url
        required: false
        style: simple
      x-yc-apigateway-integration:
        function_id: d4ej2iaao2mn8thstuhr
        tag: $latest
        type: cloud_functions

 

Блок servers заполняется сервисом при сохранении, в function_id указывается идентификатор функции

 

Cloud Functions

Из документации: "позволяет запускать ваш код в обслуживаемой среде в виде функции". Близок с "Serverless Containers" , документация "Контейнер позволяет запустить в Yandex.Cloud приложение, которое содержится в Docker-образе."

По сути предоставляется готовый контейнер с установленной исполняющей средой и возможностью установить доп. пакеты для этой среды (но не пакеты ОС).

Пример требуемого обработчика:

import json


def handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps({
            'event': event,
        }),
    }

Для HelloWorld нормально, для написания приложений неудобно (банально нет отладки). Виктор Кузенный, Старший разработчик 
Yandex.Cloud в "Веб-приложение на Serverless", рекомендует использовать Containers, для исключения привязки к вендору на уровне API функций. Видео только по ссылке, репозиторий с кодом (ссылка). Лезть в сборку Docker, отправку его в Registry пока желания нет.

Для того чтобы FastAPI заработал в Functions нужен handler который реализован в Yappa, заодно этот инструмент умеет деплоить локальный проект в Functions, использует oauth токен для основного пользователя директории Yandex.

Из важного для меня handler "пробрасывает" заголовок Authorization, что позволяет реализовывать аутентификацию на уровне FastAPI.

 

Локальная разработка

Для локального запуска приложения используется uvicorn https://www.uvicorn.org/. В корень проекта добавляю main.py

import uvicorn

if __name__ == "__main__":
    uvicorn.run("app.main:app", host="127.0.0.1", port=5000, log_level="info")

 

Yandex Database

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

Yandex предоставляет SDK https://github.com/ydb-platform/ydb-python-sdk, но по нему очень мало примеров использования. У DynamoDB, есть клиент boto3, по "fastapi boto3 dynamodb" нашел статьи 

  • https://medium.com/nerd-for-tech/introduction-to-fastapi-and-local-dynamodb-595c990ed0f8
  • https://medium.com/nerd-for-tech/python-fastapi-with-aws-dynamodb-931073a87a52

Уточнил параметры подключения по статье https://habr.com/ru/post/524082/. Параметры передал в коде, будет переделано перед публикацией.

 

Создал таблицу для API (скриптом из статьи), задеплоил через yappa, получил рабочее приложение, с документацией https://d5d92t0l8j333u9rmmsk.apigw.yandexcloud.net/docs, можно попробовать использовать.

 

 

Итог

Работающий прототип который умеет обрабатывать HTTP запросы с возможностью расширения.

 

Код выложу на github после того как приведу в порядок, статью обновлю.

На сервисе-прототипе стоит лимит, при его достижении пересоберу с другими идентификаторами.

Планы использования:

  • Проброс данных для Datalens, но YDB мало подходит для OLAP варианта, возможно буду использовать Postgres.
  • "miniEDI", для того чтобы уменьшить порог нормального обмена каталогами и заказами между организациями

 

Благодарю за внимание.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15936    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17891    6    15    

12

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88952    163    216    

318

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25874    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16480    42    49    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1524 10.03.22 10:39 Сейчас в теме
Технически интересно.

есть минус - совершенно не раскрыты назначение подобного сервиса!
для чего можно использовать такой "сторонний" облачный сервис?
- записи в БД недостаточно для использования такой непростой схемы

дай, пожалуйста, бизнес-примеры
2. malikov_pro 1293 10.03.22 11:16 Сейчас в теме
(1) То что сам буду делать, точнее переделывать, обмен между контрагентами каталогом товаров, остатками, ценами.
Достаточно часто встречаю обмен через Excel или костыли, при том что с обеих сторон системы умеющие работать через HTTP.

"для чего можно использовать такой "сторонний" облачный сервис?" - относительно просто разворачиваемый сервис, под который есть клиент для основных конфигураций 1С УТ УНФ Розница, как со стороны покупателя так и со стороны поставщика.

Есть опыт когда дистрибьютор на УТ 10, остальные на УТ 11/Розница. Под схему обмена пишется 1С-клиенты и запуск у покупателя занимает 15 мин с инструктажем.

Сейчас перед глазами кейс с обменом через самодельную очередь в формате похожем на CommerceML, когда каждый раз с документами передается информация о товаре, хотя обмен регулярный, была попытка перевода на PostREST, но уперся в сложность поддержки с RLS и записи составных объектов, типа Заказ.
svilsa; VKuser91710649; +2 Ответить
Оставьте свое сообщение