Запуск 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", для того чтобы уменьшить порог нормального обмена каталогами и заказами между организациями

 

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

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2604    3    0    

10

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

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    34675    68    45    

27

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

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

57600 руб.

26.11.2024    2372    2    2    

4

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

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

36000 руб.

03.08.2020    19076    22    22    

19

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

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

12000 руб.

02.02.2021    18842    54    50    

30

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

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

14400 руб.

20.12.2024    844    4    1    

5

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    4060    3    2    

4

Обмен с ГосИС 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    93033    191    217    

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

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

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

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

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

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