Рейтинг
0.00

Rusonyx Хостинг

2 читателя, 6 топиков

Make your ideas come app. Serverless приложение — пошаговая инструкция



В 2018 году serverless это самый быстрый способ сделать бекенд приложения, даже если вы никогда их не делали. Да, я знаю про бесчисленное множество конструкторов приложений, MBaaS или BaaS, но мне хочется показать, что serverless подходит не только для элементарных приложений, но и для масштабируемых сложносочиненных бекендов, которые не получится сделать на конструкторе.

На днях мы запустили первое в России serverless облако — Rusonyx Serverless на базе платформы Swifty. Первые три месяца использования платформой бесплатны, так что все желающие могут попробовать serverless подход в деле.

В статье я расскажу, как создать простое todo приложение с аутентификацией, профилем пользователя, хранением картинок и, собственно, управлением задачами используя serverless подход. Мы, естественно, будем делать это на Swifty, но подход здесь примерно одинаков для всех serverless решений. Пример готового приложения можно посмотреть здесь. Фронтенд написан на vue.js, запускать который мы будем на встроенном Object Storage (S3), бекенд будем делать на функциях на Go и Python.

Вам не нужны знания JavaScript, гошечки и питона, чтобы пройти этот гайд. Source code приложения можно взять здесь.

Аутентификация пользователей
На первом этапе займемся созданием самих функций для бекенда приложения. Прежде всего вам нужен аккаунт в Swifty, который можно создать здесь. После логина в дашборд у вас должен открыться вот такой экран.


Теперь, когда у вас есть аккаунт можно приступать к созданию самих функций. Swifty включает сервис аутентификации — Authentication, который дает базовые операции signup, signin и logout, а также возможность создавать, изменять, получать и удалять профиль пользователя. В нем есть также интеграция с Facebook и возможность связывать уже созданный профиль с профилем Facebook. Но они нам пока не понадобятся. Maybe later.

Создаем сервис аутентификации:
  • Открываем Swifty -> Authentication Services.
  • Нажимаем Create Auth Database и называем базу todoapp. Я в дальнейшем буду использовать это название, но вы можете назвать свою базу по-желанию.

В результате будет создано много чего:
  • Функция todoapp.base — делает signup, signin и logout пользователей, реализует OAuth 2.0 протокол.
  • Функция todoapp.fb — позволяет аутентифицировать пользователей через fb.
  • Функция todoapp.link — связывает аккаунты уже созданных пользователей с их аккаунтами на fb.
  • Функция todoapp.profiles — создает, обновляет, удаляет профили пользователей в MongoDB.
  • БД todoapp_mgo — Mongo для хранения аккаунтов пользователей.
  • БД todoapp_profiles — Mongo для хранения профилей пользователей.
  • Authentication Middleware (AuthMW) — прокси, который позволяет при обращении к API функции проверять аутентификацию пользователя через проверку его JWT токена, который ему выдала функция todoapp.base. Нет токена или он не верен — запрос к API будет отброшен.

Мы используем “.” в наименовании функций для разделения их по папкам. Поэтому если вы создадите новую функцию с именем todoapp.newfunction, то она автоматически попадет в папку todoapp и отобразится там с именем newfunction. Ваш список функций теперь должен содержать следующий набор (см.картинку).


Можно пропустить, но лучше прочитать
Этот параграф, в принципе, можно пропустить. Или нет, если вы хотите понять, как работает наш сервис аутентификации и чуть больше понять о принципах работы Swifty. Функция todoapp.base, написанная на Go, дает базовые возможности аутентификации, но ничто не мешает вам расширить ее возможности в соответствии с потребностями вашего приложения. Как бы вы ее не меняли, не трогая signin и signout, она все-равно будет делать свою работу. В функции есть переменная SWIFTY_AUTH_NAME, которая хранит название AuthMW. Функции также нужен доступ к MongoDB и собственно AuthMW, которые прописаны на вкладке Access в свойствах функции. Также у нее есть REST API триггер у которого есть ссылка, которую и нужно вызывать, чтобы получить доступ к функции.

Функция todoapp.base ожидает, что вы передадите ей userid и password в виде аргументов запроса. При этом пароль шифруется.

Вот примеры таких запросов:
* Sign up:
https://api.swifty.cloud:8686/call/012.../signup&userid=user@yourmail.com&password=xxxxxxxx
* Sign in:
https://api.swifty.cloud:8686/call/012.../signin&userid=user@yourmail.com&password=xxxxxxxx
* Log out:
https://api.swifty.cloud:8686/call/012.../leave&userid=user@yourmail.com


Если, например, signin был успешен (функция успешно проверила переданный пароль), то вы получите JSON с JWT токеном, который нужно будет использовать каждый раз при обращении к функциям, для которых включена аутентификация. JWT токен создается на базе Bearer Authentication схемы. Подробнее про OAuth 2.0 и Bearer cхему можно прочитать тут.

Если аутентификация не успешна, то вызываемая функция не запускается и запрос возвращает код 401.

Управление профилем пользователя
Итак, у каждой функции есть REST API url, ссылка, которую нужно вызвать, чтобы запустить функцию. Чтобы получить эту ссылку для функции аутентификации, откройте функцию todoapp.base, перейдите на вкладку Triggers, скопируйте REST API url и сохраните его как AUTH_URL где-нибудь. Чуть дальше нам потребуется вставить эту ссылку в конфигурационный файл фронтенда нашего приложения.


Также нам нужен API URL для todoapp.profiles, чтобы наше приложение могло управлять профилями пользователей. Откройте эту функцию, перейдите на вкладку Triggers, скопируйте REST API url и сохраните его как PROFILE_URL.

Управление аватаром пользователя
Наше приложение также позволяет загрузить аватар пользователя и продемонстрировать, как можно хранить файлы на встроенном Object Storage. Картинка пользователя загружается с помощью специальной функции и хранится на встроенном Object Storage. Доступ к картинке можно получить через функцию или с помощью стандартного S3 API, ключи доступа к которому можно получить на вкладке управления Object Storage в UI.

Чтобы создать функцию управления картинками:
  • Переходим на вкладку Functions -> New Function -> From repo (Templates). Мы храним все шаблоны функций в публичном git репозитории swifty.demo. Этот репозиторий должен быть выбран по умолчанию.
  • Выберите функцию Avatar management (python), нажмите Next и введите имя новой функции todoapp.avatar. Нажмите Create.
  • Далее перейдите на вкладку Triggers, нажмите Add Trigger, выберете REST API (URL). Скопируйте появившуюся ссылку и сохраните ее как PICTURE_URL.

Далее нужно создать бакет в Object Storage для хранения картинок пользователей:
  • Переходим на вкладку Object Storage -> Create Bucket. Назовите новый бакет todoappimages.
  • Переходим на вкладку Functions -> todoapp.avatar -> Access -> нажимаем Add, выбираем Object Storage, вновь созданный бакет todoappimgaes и жмем Add.

Теперь наша функция имеет доступ к указанному бакету. Так просто и нам не нужно прописывать никакие доступы к бакету внутри функции. Единственное, мы должны указать функции, в каком бакете хранить картинки с помощью переменной окружения:
  • Переходим на вкладку Functions -> todoapp.avatar -> Variables и нажимаем Create Variable.
  • Вводим имя переменной — BUCKET_NAME, и ее значение — todoappimages.

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

Создаем функцию:
  • Переходим на вкладку Functions -> New Function -> From repo (Templates).
  • Выберите функцию TODO application (python), нажмите Next и введите имя новой функции todoapp.tasks. Нажмите Create.
  • Далее перейдите на вкладку Triggers, нажмите Add Trigger, выберете REST API (URL). Скопируйте появившуюся ссылку и сохраните ее как TASKS_URL.

Далее нам нужна база данных, чтобы хранить наши задачи. Самый простой вариант — MongoDB.
  • Переходим на вкладку Mongo Database -> Create Database и создаем базу с именем todoapp_tasks.
  • Переходим на вкладку Functions -> todoapp.tasks -> Access -> Add и добавляем новую базу.

Теперь наша функция имеет доступ к БД todoapp_tasks и мы можем обратиться к ней из функции с помощью библиотеки swifty, например так:
db = swifty.MongoDatabase(os.getenv('TASKS_DB_NAME’))


Нам осталось только прописать переменную окружения с именем базы данных:
  • Переходим на вкладку Functions -> todoapp.tasks -> Variables и нажимаем Create Variable.
  • Вводим имя переменной — TASKS_DB_NAME, и ее значение — todoapp_tasks.
  • Включаем аутентификацию для функций

Когда у нас есть бекенд для аутентификации пользователей и сами функции, составляющие бекенд нашего приложения, мы можем включить для них аутентификауию, чтобы к функциям управления профилем, аватаром и задачами могли обратиться только авторизованные пользователи.

Как включить проверку токенов для определенных функций:
  • Переходим на вкладку Functions и выбираем функции todoapp.tasks и todoapp.avatar.
  • Нажимаем Manage Authentication и выбираем сервис todoapp, нажимаем Enable.
  • Теперь, функции todoapp.tasks и todoapp.avatar будут выполнены только для пользователей с правильным JWT токеном сгенерированным с помощью todoapp.base.

После всех вышеперечисленных действий список наших функций должен выглядеть примерно так.


Публикация приложения
Займемся фронтендом нашего приложения. Фронтенд написан на vue.js и нам нужно всего лишь добавить ссылки на наши функции в его конфигурационный файлик и пересобрать приложение с этой обновленной конфигурацией. Здесь все просто и никаких знаний vue.js и JavaScript не понадобиться.

Для того, чтобы пересобрать приложение вам нужен установленный node.js. Если у вас его нет, то используйте, пожалуйста, официальный гайд, чтобы его поставить. Если у вас mac, то есть хороший гайд здесь. Также вам понадобиться git, чтобы стянуть репозиторий себе на компьютер. Пожалуйста, сделайте:
# git clone https://github.com/swiftycloud/swifty.todoapp


После этого перейдите в папку /swifty.todoapp/src и откройте файл config.js в вашем любимом редакторе. Вам нужно поменять содержащиеся там переменные на на те, которые вы сохранили ранее:
export const AUTH_URL = "https://api.swifty.cloud/call/991..."
export const PROFILE_URL = "https://api.swifty.cloud/call/281..."
export const PICTURE_URL = "https://api.swifty.cloud/call/e6a..."
export const TASKS_URL = "https://api.swifty.cloud/call/4b1..."


Переменные связанные с FB нам пока не нужны.

Затем вам нужно пересобрать приложение:
# npm run build
…
DONE Build complete. The dist directory is ready to be deployed.


Прежде чем собрать приложение вы можете также протестировать его локально:
# npm run serve

и зайти в него через браузер по адресу localhost:8080

Мы используем Object Storage для хранения статических файлов нашего приложения. Перейдите на вкладку Object Storage, создайте бакет todoapp и загрузите в него файлы из папки /swifty.todoapp/dist/ соблюдая именование папок (их придется создать руками).

Последний шаг — публикация приложения. Нажмите More -> HTTP Server Settings и включите HTTP Server для вашего бакета. Скопируйте появившуюся ссылку и перейдите по ней — это и есть ваше приложение!


Теперь вы можете создать в нем аккаунт и попробовать его в действии. Если теперь перейти на экран функций, то вы увидите, что функции были только что запущены — для аутентификации, загрузки профиля и тд.

Что дальше?
Мы показали простой пример, как использовать serverless для создания приложений. У нас еще много шаблонов популярных функций, а у вас, я уверен, еще много идей для новых приложений. Пробуйте шаблоны, пишите свои функции и make your ideas come app.

Ну и конечно же, обращайтесь, если у вас есть какие-то вопросы по serverless вообще и Swifty в частности.
www.rusonyx.ru/swifty/

Serverless убьет DevOps?



Каждый раз, когда приходится читать про очередного новорожденного убийцу айфона или фейсбука, невольно начинаешь улыбаться. За эти годы столько их уже было, а воз и ныне там. Поэтому, наткнувшись на очередную публикацию, где ключевой мыслью была идея о том, что наступающая эпоха бессерверных вычислений приложений (Serverless) «съест» DevOps, скепсису не было предела.

Справедливости ради, стоит сказать, что облачные технологии действительно «рвут тельняшку» по всем фронтам. Во-многом причина тому, стремительное удешевление «железа», как следствие простота и доступность передовых технологий на фоне перманентной тяги бизнеса к повышению эффективности и скорости внедрения инноваций. Всем хочется здесь и сейчас, и желательно бесплатно.

Появление концепции Serverless, предполагающей создание и запуск приложений без необходимости настраивать серверную часть на этом фоне кажется вполне логичным. Несмотря на популярность названия «Serverless», встречается также аббревиатура FaaS («Functions as a Service»). Так вот, вас не должно вводить в заблуждение пресловутое Serverless. Оно вовсе не означает полный отказ от серверов. Как известно: «Если что-то убыло, значит где-то прибыло». В данном случае, речь идет о том, что железо уходит на сторону Amazon, Microsoft и других монстров индустрии, предоставляя рядовым разработчикам возможность творить без оглядки на размер серверного шкафа и хороших отношений с командой DevOps.



Основные преимущества концепции Serverless:

Простота создания и развертывания продукта;
Возможность быстро и просто масштабировать ваш проект;
Высокая доступность и отказоустойчивость бекенда;
Отсутствие необходимости управления серверной инфраструктурой и как следствие снижение ваших затрат на поддержку ее работоспособности;
Ускорение разработки приложений;
Сокращение затрат на инфраструктуру и DevOps (и вам больше не нужен Docker);

Больше информации по теме можно почерпнуть, например, здесь, здесь и здесь.

DevOps умер, да здравствует DevOps?

Serverless является отличным дополнением к автоматизации. Любой хороший DevOps, использующий AWS, Azure, IBM Cloud или GCP, способен применить соответствующие бессерверные решения для повышения управляемости приложений. Но чем насыщенней среда, тем нужнее люди способные к ней адаптироваться. Иными словами, DevOps, конечно же не умрет, но требования к знаниям и навыкам специалистов неизбежно эволюционируют.

Тем более, что сфера применения serverless уже сейчас очень широка:
  • Финансы
  • Ритейл
  • IoT
  • Социальные медиа
  • Чаты
  • Uber-like приложения

Где на serverless можно реализовывать очень разные сценарии:
  • Backend для приложений и сайтов
  • Data Processing (images, video, логи)
  • IoT (включая SmartCity)
  • Serverless веб-сайты
  • Автоматизированные задачи (включая бекапы)
  • Cloudlet
  • (data preprocessing)
  • Чат-боты
  • Окружения для обучения программированию

Кто здесь?
Крупные игроки уже на этом рынке: Amazon AWS, Azure, IBM Cloud, Google Cloud, Oracle. Имея значительные ресурсы, ИТ-гиганты способны работать в перспективных направлениях, улавливая тренды и существенно опережая отрасль в своем развитии. Плюс, есть множество Open Source проектов, в той или иной степени реализующие serverless. Тем интереснее российский ландшафт.


Сегодня мы имеем довольно пеструю картину. С одной стороны, как и во всем мире, доминируют решения от лидеров рынка типа Microsoft, Amazon и Google, а с другой стороны, возникают по-настоящему интересные альтернативы.

К таковым можно отнести первое в России serverless облако — Rusonyx serverless на базе swifty.cloud. Эта штука – простой путь к махровому крутому, масштабируемому бекенду.

Rusonyx serverless на базе swifty.cloud фактически — out-of-the-box платформа для бекендов приложений, сайтов и чат-ботов, но при этом не лимитированная возможностями традиционных Backend-as-a-Service решений. Она включает в себя большинство необходимых сервисов:
  • Serverless функции
  • SQL и noSQL базы данных
  • Object Storage
  • Authentication-as-a-Service
  • Симпатичный UI, API, CLI для Mac/Linux
  • Шаблоны функций и целых сервисов

Условия:
Первые 3 месяца пользования платформой Rusonyx Serverless бесплатны, так что все желающие могут попробовать serverless подход в деле.

Вместо заключения
Мы всё дальше уходим от набора навыков, которые ассоциируется с традиционным DevOps. Технологии меняются, а вместе с ними должны меняться и мы. При этом, даже если за вас всё делает облачный провайдер, функция контроля качества продукта никуда не денется. Автоматизация освобождает вас от каждодневной рутины, предоставляя возможность заняться тем, что вы, возможно, долгое время откладывали в долгий ящик.

Make your ideas come app, как говорят ребята из swifty.cloud

Киберпонедельник. Скидки продолжаются!

Если вы не успели воспользоваться нашим предложением, подготовленным к черной пятнице, то сегодня отличная возможность это исправить. Но поторопитесь!
Только сегодня мы даем скидку на VPS до 70%

В акции участвуют следующие тарифные планы:
  • Сервер без забот 3.1 (VPS (HDD)) — скидка 70%, осталось 30 шт
  • Сервер без забот 3.1 (VPS (SSD)) — скидка 50%
  • Root server (VPS) — скидка 50%
  • Супер сайт 3.0 — скидка 50%
  • Корпоративный портал 3.1 — скидка 50%

Для получения скидки введите промо-купон CYBERMN15 при заказе на этапе корзины.

Купоном можно воспользоваться только 1 день — 30.11.2015



www.rusonyx.ru/hosting/superserver/prices/

50% на хостинг. Только 3 дня: с 26 по 28 ноября



Вас приветствует разработчик сервиса sitespeed.ru, хостинг-провайдер Русоникс

Благодарим Вас за то, что воспользовались сервисом проверки сайта на скорость sitespeed.ru!
Надеемся, вам были полезны наши рекомендации по улучшению скорости вашего сайта.

Для того, чтобы сайт работал еще быстрее, оцените наши тарифы Сервер без забот, настроенные особым образом.

Сегодня и до 28 ноября есть хорошая возможность заказать хостинг со скидкой -50%

Скидка действует на следующие линейки тарифных планов при заказе сроком на 1 год:
  • Сервер без забот 3.1 (VPS)
  • Root server (VPS)
  • Супер сайт 3.0
  • Корпоративный портал (VPS)

Для получения скидки введите промо-купон BLACKF26 при заказе на этапе корзины.
Купоном можно воспользоваться с 26.11.2015 ( 00:00) по 28.11.2015 (23:59)

Хостинг со скидкой 25%

  1. Весеннее снижение цен на VPS! Весь март вы можете заказать VPS хостинг со скидкой 25% на весь год!
  2. Закажите любой тариф VPS-хостинга в Русоникс, оплатите его сроком на год, и получите скидку 25%!



Условия участия в акции:
  • При оплате хостинга сроком 12 месяцев вы получаете скидку 25%
  • Для получения скидки введите код springsale2015 на этапе корзины.

Целый год с 25% скидкой!



Новый год приближается, а значит, наступила пора подарков и скидок!
Приглашаем участвовать в нашей праздничной акции!

Закажите любой тариф VPS-хостинга в Русоникс, оплатите его на 3, 6 или 12 месяцев и получите скидку до 25%!

Условия участия в акции:
  • — При оплате хостинга сроком на 3 месяца Вы получаете скидку 5%
  • — На 6 месяцев — 10%
  • — На 12 месяцев — 25%
Для получения скидки введите код NYsale2015 на этапе корзины.
VPS-тарифы, участвующие в акции:
  • Сервер без забот 3.0 мы берем на себя все заботы, связанные с обслуживанием сервера, переносом сайтов и администрированием.
  • Root Server — хостинг для профессионалов, полный доступ к серверу.
  • Супер Сайт 3.0 — отличный старт с возможностью последующего масштабирования.
  • Битрикс Старт 3.0 — настройки под 1С-Битрикс, максимальная скорость и удобство в работе.
  • Корпоративный портал 3.0 — тариф, уже настроенный для интранет.

Акция действительна для новых клиентов, и не распространяется на продление подписки, а также не распространяется на партнерские договоры.
Скидка рассчитывается из стоимости ежемесячного обслуживания.