Руководство по запуску Serverless-приложений
![Тирекс](https://selectel.ru/blog/wp-content/uploads/2023/05/T-Rex_Autor-3-400x400.png)
В конце прошлого года мы запустили в бета-тестирование нашу Serverless-услугу Облачные функции. В этом коротком руководстве на примере Flask-приложения расскажем, как начать использовать новый сервис. Это сервис бессерверных вычислений, который позволяет создавать приложения, не заботясь о поддержке инфраструктуры. То есть вам не нужно настраивать сервер — нужно просто писать код. Новый сервис отлично справится с […]
![Изображение записи](https://selectel.ru/blog/wp-content/uploads/2020/01/PR-11735_555x278_blog_preview_fb_tw2x.png)
В конце прошлого года мы запустили в бета-тестирование нашу Serverless-услугу Облачные функции. В этом коротком руководстве на примере Flask-приложения расскажем, как начать использовать новый сервис.
Это сервис бессерверных вычислений, который позволяет создавать приложения, не заботясь о поддержке инфраструктуры. То есть вам не нужно настраивать сервер — нужно просто писать код.
Новый сервис отлично справится с автоматизацией фоновых задач (отправкой писем, генерацией скриншотов или работой с API), вычислениями на статичных сайтах, ETL-процессами и бэкендом для API и мобильных приложений.
Подготовка окружения
Все нижеперечисленные команды нужно выполнять на виртуальной машине.
Подготовьте виртуальную машину с CouchDB и тестовым приложением в контейнере, используя Docker.
Готовим виртуальную машину
Установка и запуск Docker
Обновите репозитории:
sudo apt-get update
Удалите пакеты Docker, установленные по умолчанию:
sudo apt-get remove docker docker-engine docker.io
Инсталлируйте Docker:
sudo apt install docker.io
Запустите Docker в качестве демона:
sudo systemctl start docker
Установка образа
Скачайте Docker образ CouchDB:
docker pull couchdb
Скачайте наш пример Flask-приложения:
docker pull selectel/shiny-flask-app
Запустите контейнер с CouchDB:
docker run -e COUCHDB_USER=user -e COUCHDB_PASSWORD=password -p0.0.0.0:5984:5984/tcp -d couchdb
Запустите контейнер с shiny-flask-app:
docker -v run --rm -e server_url=XXX.XXX.XXX.XXX:5984 -e admin_username=user -e admin_password=password -p0.0.0.0:2020:2020/tcp -d selectel/shiny-flask-app
Где server_url — это Floating IP вашей виртуальной машины и порт, на котором слушает CouchDB, а admin_username и admin_password эквиваленты COUCHDB_USER и COUCHDB_PASSWORD соответственно.
Готовим базу данных
Создайте в CouchDB новую базу данных под названием Products, для чего используйте следующую команду:
curl -u user:password -X PUT http://<couchdb_ip>:5984/products
Где couchdb_ip — Floating IP виртуальной машины, на которой запущены контейнеры.
Используя API приложения создайте в CouchDB запись:
curl -v -X POST -d '{"_id": "xxxx", "name": "product1"}' -H "Content-Type: application/json" -u user:password XXX.XXX.XXX.XXX:2020/v1.0/products/createProduct
Где XXX.XXX.XXX.XXX — IP адрес виртуальной машины, на которой поднят Docker контейнер.
Проверить, что запись в базе создана, можно используя этот запрос:
curl -v -H "Content-Type: application/json" XXX.XXX.XXX.XXX:2020/v1.0/products/xxxx
Работа с проектом
Создайте новый проект в Облачной платформе или используйте существующий.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image2.png)
Назовите проект.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image9.png)
Перейдите в созданный проект.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image15.png)
Перейдите на вкладку Функции.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image13.png)
Нажмите Создать функцию.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image14.png)
Укажите имя функции и нажмите Создать функцию.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image5.png)
Нажмите Редактировать, чтобы загрузить код и настроить функцию.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image12.png)
Скачайте репозиторий с кодом.
Создайте архив с кодом функции, находясь в корневой директории репозитория:
tar -cvf shiny_flask_app.tar
Загрузите архив с кодом приложения из нескольких файлов или файл с кодом функции.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image10.png)
Укажите путь к файлу с кодом в архиве: /shiny_flask_app/api/products.py
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image1.png)
Укажите название вызываемой функции.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image4.png)
Добавьте переменные окружения с помощью кнопки Добавить.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image7.png)
Первая переменная, которая нам необходима, admin_username. Присвойте ей значение user.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image11.png)
Таким же образом присвойте еще две необходимые переменные: admin_password и server_url со значениями password и XXX.XXX.XXX.XXX:5984 соответственно.
Остановимся подробнее на server_url — это IP-адрес виртуального сервера с запущенным CouchDB и порт, на котором CouchDB слушает запросы.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image8.png)
Далее сохраните введенную информацию и разверните функцию с помощью кнопки Сохранить и развернуть.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image17.png)
Чтобы вызвать функцию с помощью HTTP-запроса, сделайте ее публичной.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image3.png)
Скопируйте URL.
![](https://selectel.ru/blog/wp-content/uploads/2020/01/COOPERATION-38451_image6.png)
Вызовите функцию, добавив к запросу URL из панели.
curl -k -X POST --data '{"args": ["xxxx"], "kwargs": {}}' -H "Content-Type: application/json" URL
Где хххх такой же, как в запросе в начале руководства, а URL взят из настроек функции.
Готово, вы запустили свое первое Serverless-приложение!