(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(93790508, "init", { defer: true, clickmap:true, trackLinks:true, accurateTrackBounce:true }); ym(93790508, 'hit', window.location.href);

ИТ-гайд: как запустить первое приложение

Инструкция по запуску вашего первого мобильного приложения c автоматически масштабируемым бэкендом

Обратная сторона приложения — ИТ-инфраструктура. С бессерверными технологиями реально писать код, не думая о поддержке. Serverless-технологии помогают автоматизировать рутинные операции и быстрее производить вычисления. Редакция Selectel подготовила пошаговое руководство по запуску вашего первого приложения на базе Serverless-технологий, которые подходят для пиковых нагрузок и экономят средства в периоды спада активности, сокращая потребление ресурсов.

В чем особенность serverless-технологий? Бессерверные вычисления дают возможность создавать приложения, не заботясь о поддержке инфраструктуры. Не нужно настраивать сервер — можно просто писать код.

В инструкции расскажем, как на примере Flask-приложения начать использовать бессерверные технологии и запустить первое мобильное приложение.

Подготовка окружения

Все нижеперечисленные команды нужно выполнять на виртуальной машине.

Подготовьте виртуальную машину с CouchDB и тестовым приложением в контейнере, используя Docker.

С вас — код.

С нас — все остальное.

Selectel

Готовим виртуальную машину

Установка и запуск 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-приложение!

Пока мы готовим для вас новые материалы в блог Selectel, приходите обсуждать в комментарии. Запускали приложения? Как все прошло?

║Пробовали запускать приложения?
ⓎⒺⓈ, регулярно запускаю.
ⓃⓄ, а что так можно было?
👣 — теперь подумаю об этом.
Пробовал, но не все так ♯гладко.
Показать результаты
Переголосовать
Проголосовать
0
3 комментария
Selectel
Автор

Добрый день и спасибо за комментарий! Мы внесли некоторые правки в статью, чтобы более точно выразить её суть.
Хотелось дать универсальное решение, которое подойдёт стартапам. Поэтому выбрали CouchDB и простую инструкцию с докером. Хотя там может быть и MongoDB, и Postgres, и всё, с чем удобно работать.
Еще у нас есть DBaaS (https://selectel.ru/services/cloud/managed-databases/) с управляемыми базами в облаке. Тогда решением будет True Serverless.

Ответить
Развернуть ветку
Алексей Колупаев

Странно видеть в самом же начале инструкции бессерверного приложения  необходимость создавать виртуальную машину. Например, у Azure, AWS, AliCloud уже есть нужные сервисы в облаках, в том числе различные сервисы хранения данных.

Ответить
Развернуть ветку
Руслан Смирнов

)

Ответить
Развернуть ветку
0 комментариев
Раскрывать всегда