Запуск 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    16031    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    18067    10    15    

15

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

28000 25200 руб.

28.05.2015    85268    26    51    

50

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12967    32    8    

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    89528    163    217    

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

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

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

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

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

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