Руководство по запуску Serverless-приложений
В конце прошлого года мы запустили в бета-тестирование нашу Serverless-услугу Облачные функции. В этом коротком руководстве на примере Flask-приложения расскажем, как начать использовать новый сервис. Это сервис бессерверных вычислений, который позволяет создавать приложения, не заботясь о поддержке инфраструктуры. То есть вам не нужно настраивать сервер — нужно просто писать код. Новый сервис отлично справится с […]

В конце прошлого года мы запустили в бета-тестирование нашу 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
Работа с проектом
Создайте новый проект в Облачной платформе или используйте существующий.

Назовите проект.

Перейдите в созданный проект.

Перейдите на вкладку Функции.

Нажмите Создать функцию.

Укажите имя функции и нажмите Создать функцию.

Нажмите Редактировать, чтобы загрузить код и настроить функцию.

Скачайте репозиторий с кодом.
Создайте архив с кодом функции, находясь в корневой директории репозитория:
tar -cvf shiny_flask_app.tar
Загрузите архив с кодом приложения из нескольких файлов или файл с кодом функции.

Укажите путь к файлу с кодом в архиве: /shiny_flask_app/api/products.py

Укажите название вызываемой функции.

Добавьте переменные окружения с помощью кнопки Добавить.

Первая переменная, которая нам необходима, admin_username. Присвойте ей значение user.

Таким же образом присвойте еще две необходимые переменные: admin_password и server_url со значениями password и XXX.XXX.XXX.XXX:5984 соответственно.
Остановимся подробнее на server_url — это IP-адрес виртуального сервера с запущенным CouchDB и порт, на котором CouchDB слушает запросы.

Далее сохраните введенную информацию и разверните функцию с помощью кнопки Сохранить и развернуть.

Чтобы вызвать функцию с помощью HTTP-запроса, сделайте ее публичной.

Скопируйте URL.

Вызовите функцию, добавив к запросу URL из панели.
curl -k -X POST --data '{"args": ["xxxx"], "kwargs": {}}' -H "Content-Type: application/json" URL
Где хххх такой же, как в запросе в начале руководства, а URL взят из настроек функции.
Готово, вы запустили свое первое Serverless-приложение!