Код ответа 499 в Serverless-функциях
В логах Serverless-функций вы можете увидеть код ответа 499. Что это значит и что делать, если вы видите его в логах?
В логах Serverless-функций вы можете увидеть код ответа 499. Что это значит и что делать, если вы видите его в логах?
У меня уже есть пост про то как запустить FastAPI в Serverless контейнере на Yandex Cloud, а также пост как в функции запустить популярные JS фреймворки. Пришло время взять понемногу из этих постов и запустить FastAPI в Serverless функции. Для этого нам понадобится python библиотека Mangum. Она не сказать что очень активно поддерживается. Это заметно и по истории коммитов и по тому что они упустили домен, где была документация и теперь там лежит рекламный блог. Недавно разработку подхватил другой разработчик. Восстановил документацию и это дает надежду на то что проект будет развиваться дальше.
То, что функция в один момент времени обрабатывает один запрос, а после выполнения инстанс функции подчищает все ресурсы, позволяет не задумываться о корректном закрытии таких ресурсов. Например, можно спокойно не закрыть открытый на чтение временный файл. И в этом действительно не будет никаких проблем, до тех пор пока в сервис не придет нагрузка.
В принципе тут все просто и логирование в облачных функциях работает «из коробки». Т.е. все что вы залогируете во время выполнения функции будет доступно в Cloud Logging. Но есть некоторые нюансы, о которых я хочу рассказать.
В прошлом посте на эту тему я рассказал о том, как можно использовать очереди сообщений для асинхронного вызова облачных функций в Яндекс Облаке. В этом посте я расскажу о том, как можно сделать это еще проще и удобнее.
В принципе весь процесс описан в документации, но там упомянут всего один фреймворк - Sanic, а тут мы разберем как запустить Fastapi.
Для начала создадим проект на основе примера Web API.
В прошлом Serverless Full Text Search я рассмотрел JavaScript библиотеку для in-memory полнотекстового поиска Lyra. Почему я выбрал именно ее? Во-первых, именно на доклад про неё я наткнулся на YouTube. Во-вторых, мне понравилась её универсальность и возможность притащить её в браузер.
Если вы для своего проекта выбрали serverless стек, то наверняка вы заметили, что в Яндекс Облаке для него нет решения обеспечивающего полнотекстовый поиск. Ну, то есть вы конечно можете поднять кластер ElasticSearch. Но при его минимальной стоимости и выделяемых ресурсах это наверняка будет стрельбой из пушки по воробьям.
Но что же делать, если хочется сохранить низкие расходы на инфраструктуру и получить быстрый полнотекстовый поиск?
Итак, у вас есть цель выполнять какую-то задачу внутри serverless контейнера по расписанию. К сожалению, вы не сможете просто взять положить в контейнер ваш код и надеяться что все заработает просто так.