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/

Облачные VPS по суперцене — от 27 копеек в час!


Облачные VPS по суперцене — от 27 копеек в час!
Облачные серверы VPS — современное представление VPS на виртуализации KVM. Главное их преимущество — скорость работы. Создание сервера у вас займёт всего 30 секунд, а управление им происходит в удобной панели. Самый маленький сервер с 5 ГБ SSD, 512 МБ RAM и 1 ядром обойдётся всего в 179 рублей в месяц (27 копеек/час)! За минимальные деньги вы сможете убедиться лично в возможностях облачных VPS от компании REG.RU и использовать самые современные технологии для своего проекта!
www.reg.ru/vps/cloud

Timeweb вошёл в TOP-10 регистраторов доменов в зоне .RU

Немногие знают, что с начала 2018 года мы стали полноценно вести деятельность в качестве регистратора доменов в зонах .RU/.РФ.

Раньше мы, как и многие хостинг-провайдеры, регистрировали домены в статусе реселлера одного из крупных регистраторов. Плюсы есть, но и минусы очевидны: многие процедуры требовали ручных изменений со стороны специалиста поддержки в кабинете регистратора.

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


Отдельно можно сказать, что толчком к решению стать регистратором послужило повышение цен на регистрацию доменов .RU/.РФ летом 2017 года.

Нам важно было сохранить цены для клиентов на регистрацию доменов на низком уровне без резких повышений. Можем сказать с уверенностью, что этого удалось добиться: стоимость регистрации .RU/.РФ всего 179 рублей.

При этом у нас получилось сохранить адекватную стоимость продления, сейчас она составляет всего 299 рублей/год.

Запуск самостоятельного регистратора
В конце 2017 года мы завершили многочисленные внутренние тесты и убедились, что в момент открытия регистрации доменов в зоне .RU/.РФ для клиентов не возникнет непредвиденных ситуаций и проблем.

В самом начале 2018 года, после окончания новогодних каникул мы переключили регистрацию новых доменов на систему регистратора Timeweb. С этого момента мы фактически начали свою деятельность в новой роли — регистратора доменных имен.

Кто мы сейчас
Спустя год мы вошли в топ-10 регистраторов страны по доменам .RU. При этом являемся одним из лидеров рынка хостинга.

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


Куда мы движемся
Наши планы амбициозны: в следующем году мы планируем войти в ТОП-5 регистраторов по зонам .RU/.РФ. Мы продолжим наращивать клиентскую базу, а также постараемся сохранить конкурентную стоимость регистрации и продления доменов.

Что получат наши текущие и будущие клиенты: быстрый и недорогой перенос домена к нам. Вы платите только комиссию, которая взимается за оформление процедуры Координационным центром национального домена сети Интернет — на текущий момент это всего 144 рубля.

Какие преимущества получили клиенты?
Являясь регистратором, мы можем держать цены для клиентов на невысоком уровне, поскольку теперь отсутствует «посредник» между нами и Реестром доменных имён.

Поэтому стоимость регистрации, продления и переноса доменов к нам — небольшая.

Стала ли проще процедура переноса домена с другого хостинга в Timeweb?
Конечно. Нужно всего лишь узнать код авторизации у своего текущего регистратора. Для этого потребуется поискать его самостоятельно в личном кабинете текущего хостинг-провайдера или регистратора, либо обратиться в их поддержку.

После того, как получите код — зайдите в раздел «Домены и поддомены», выберите «Перенос домена» и введите код.

После нажатия на кнопку «Перенести» и оплаты (сейчас перенос стоит 144 руб., но можно воспользоваться и бонусом, который добавляется на аккаунт виртуального хостинга при оплате за год) для домена будет заказан трансфер, о завершении которого мы проинформируем по e-mail.


Если вы хотите управлять доменами и хостингом из одной панели Timeweb, но сомневаетесь, как правильно это сделать — просто напишите или позвоните нам и мы ответим на все вопросы о процедуре переноса и подскажем, как действовать.

В случае, если вы готовы приобрести более 100 доменов, мы готовы предложить для вас специальную цену намного ниже рыночной (99 рублей) с адекватной ценой продления. Запросы отправляйте на почту: 2domains@timeweb.ru

Серверная распродажа года


Зима началась во всей красе, а это значит, что пора готовиться к Новому году. Мы подготовили брутальные скидки на разные конфигурации серверов. Это самое лучшее время, чтобы арендовать сервер по сниженным ценам. Торопитесь!

Все тарифы «под ключ». Выбирайте подходящий сервер, а мы займемся всем остальным.
  • Готовность сервера — 2 часа.
  • Изменим конфигурацию по Вашему желанию.

Арендуя сервер в RackStore, Вы получаете:
  • Бесплатную установку и подключение сервера
  • Полностью безлимитный Интернет 100 Мбит/сек.
  • IP-адрес (IPv4 или IPv6 на выбор)
  • Удаленное управление сервером IPMI на 5 дней
  • Первичную установку ОС на выбор
  • Бесперебойное питание
Напоминаем, что количество серверов на специальных условиях ограничено, но Вы можете бесплатно зарезервировать сервер сейчас.
rackstore.ru

Домены .blog, .me, .tech со скидкой до 13 января


До 13 января RU-CENTER проводит акции по снижению стоимости регистрации доменов .blog, .me, .tech. Доменные имена доступны по цене от 199 рублей. Для держателей статусов в рамках Клубной программы предусмотрены дополнительные скидки. Предложите вашим клиентам домены на специальных условиях.
www.nic.ru/catalog/domains/blog/

.tech — регистрируйте за 59 рублей по промокоду


Для вас — специальная цена на тематические домены .tech для технологических проектов: до 12 декабря регистрируйте имена по промокоду QWOPGY со скидкой 90%. Стоимость регистрации — всего 59 рублей.
www.nic.ru/catalog/domains/tech/

Linxdatacenter стал партнером года Cisco Capital в России и СНГ



Компания Linxdatacenter получила награду Cisco Capital Partner of the Year в России и странах СНГ (регион RCIS).

Присуждение награды состоялось в рамках ежегодной премии Cisco Partner Summit 2018 в Лас-Вегасе с 15 по 18 ноября 2018 года.

Cisco Capital – финансовая компания, созданная Cisco Systems Inc. для поддержки проектов на базе оборудования Cisco. На сегодняшний день Cisco Capital работает в более 100 странах мира, общий объем ее активов составляет $8 млрд. В России компания представлена около 15 лет, имеет порядка 3000 партнеров и занимает одно из лидирующих мест на рынке финансовых услуг для ИТ.

Награды Cisco Capital присуждаются ежегодно по регионам и распределяются по нескольким основным направлениям – продукты для малого и крупного бизнеса, решения для дата-центров, сетевые проекты, сегменты Wi-Fi и телефонии, в общей сложности более десяти направлений. В одном регионе победителем выбирается один партнер в каждой номинации. Linxdatacenter на сегодня является единственным обладателем такой награды в России и странах СНГ.

Основным критерием премии является статистика по продажам за прошедший финансовый год. Linxdatacenter обеспечил свою победу благодаря реализации проекта для крупного онлайн ритейлера на базе гиперконвергентной платформы Cisco HyperFlex.

«В России услугами Cisco Capital пользуется пока не так много компаний, поскольку мировые практики эффективного финансирования ИТ-проектов остаются у нас не до конца изученной областью бизнеса. Между тем, схемы поставки и оплаты оборудования Cisco в рамках предложения Cisco Capital позволяют предоставлять самые продвинутые услуги на базе дата-центра на условиях, одинаково выгодных вендору, провайдеру ИТ-сервисов и конечному пользователю. Успех на современном ИТ-рынке определяется не только технической базой, но и способностью грамотно управлять ее работой с помощью доступных финансовых инструментов. Это дает возможность четкого соблюдения сроков поставки, монтажа, настройки и запуска ИТ-решений в коммерческую эксплуатацию. Linxdatacenter обеспечивает высокий уровень сквозной экспертизы своих сотрудников по решениям Cisco, от инженеров и сетевых специалистов до руководителей проектов и продавцов. Награда стала закономерным результатом системной работы по развитию современной инфраструктуры и развертыванию на ней передовых облачных сервисов», – комментирует генеральный директор Linxdatacenter в России Ольга Соколова.

Напомним, что Linxdatacenter также обладает партнерским статусом реселлера Cisco со специализацией Data Center, который в 2018 году дополнил собой уже существующий статус Cisco Advanced Cloud and Managed Services Provider.

Новая награда подчеркивает, что компания Cisco является ключевым партнером Linxdatacenter в перспективе направления частных облачных инфраструктур для клиентов ЦОД на базе конвергентной платформы FlexPod и гиперконвергентной Hyperflex.

16 лет — праздничный тест с подарками

Сегодня мы празднуем 16-летие. Режем торт, дарим друг другу подарки, и для вас кое-что подготовили


Проводим Деньрожденческий тест в Инстаграме и ВКонтакте. Сегодня и завтра публикуем невероятные факты о нас. Найдите ложный факт и получите приз:
  • Для первого отгадавшего — блокнот с крутым принтом «Think first» + 3 месяца использования для сервиса на выбор: автоматические бэкапы, DDoS-защита или забота о сервере. Сервисы идут в дополнение к вашему серверу на FirstVDS.
  • Для второго и третьего отгадавших — блокнот с крутым принтом «Think first».
Главный приз — 10 000 рублей на счёт для трёх самых активных и догадливых участников всего теста. Можно потратить на отказоустойчивый Атлант, гибкий Форсаж и любые другие услуги. Выберем победителей по итогам двух дней.

Первый пост уже выложили — «FirstVDS и криминал»: про полицию в офисе, заминированный аэропорт… Вступайте в наши группы и участвуйте в деньрожденческом тесте.
vk.com/firstvds
www.instagram.com/firstvds.ru/

Жизненный цикл услуг в Cloud2/Premium

При разработке Cloud2/Premium мы реализовали подход к созданию виртуальных машин, основанный на проектах и заказанных ресурсах. У некоторых пользователей возникают вопросы по его использованию, поэтому мы написали эту статью. Изложение статьи будет происходить в духе комментирования картинки жизненного цикла услуг, которую вы можете видеть далее. Все важные элементы сопровождаются числовым кодом, который мы и будем использовать при дальнейшем изложении материала.


Начало работы с Cloud2
Итак, взглянем на шаг (1). У пользователя есть учетная запись в биллинге — системе, которая управляет услугами, позволяет пополнять счет и списывает средства. Далее, пользователь создает аккаунт в Cloud2 и заказывает при создании 2 GB RAM, 20 GB дискового пространства и 40 GB пространства для снимков. В биллинге появляется проект с пользовательской меткой «Project 1» и системным именем «accountXXXXX», где «account» — имя учетной записи в биллинге, а XXXXX — номер услуги (2).

У пользователя еще нет виртуальных машин, он просто заказал ресурсы.

Теперь наш пользователь может войти в панель управления Cloud2 (2.1), которая ему стала доступна (смотрите Урок 1 за подробностями). В панели он решил создать две виртуальные машины с памятью 1 GB и диском 10 GB (2.2, 2.3), это как раз помещается в заказанную квоту для данного проекта.

Теперь в проекте Project 1 (accountXXXXX) у пользователя созданы две машины.

Новый проект
Прошло какое-то время и пользователь захотел создать еще одну машину размером 16 GB RAM и 120 GB диска, он подумал, что эта машина никак не относится к предыдущим двум и решил для нее создать новый проект (Project 2). В биллинге, согласно уроку 1 он заказывает для нового проекта, новую услугу Cloud2 (3). Поскольку это новый проект, то у него новая учетная запись accountXXXXY и в нем опять нет машин, а только заказаны ресурсы.

В рамках одного проекта машины имеют дополнительную приватную 10 Gbit/s сеть.

Пример: наш пользователь — компания-интегратор и для каждой своей подопечной компании выделяет отдельный проект с именем «Компания АБВ», где и создает виртуальные машины для этой компании. Он может даже выдать системному администратору компании доступ к облаку, в котором будет видно только машины этой компании.

Создав новый проект, пользователь может войти в панель Cloud2 с данными для accountXXXXY (3.1), где создает виртуальную машину VM3 (3.2) с диском 120 GB и RAM 16GB.

Расширение ресурсов проекта
Через некоторое время пользователь понял, что в проекте Project 1 необходимо создать еще одну виртуальную машину с 4 GB RAM и 20 GB диска. Однако, в проекте заказаны ресурсы 2 GB RAM и 20 GB диска и они все потрачены на VM1 и VM2. Тогда пользователь обращается в техническую поддержку (4) с заявкой о выделении дополнительных ресурсов (4). Техническая поддержка выделяет пользователю дополнительно 4 GB RAM и 20 GB дискового пространства и его проекты в биллнге теперь соответствуют тем, которые отображены на шаге (5). У пользователя теперь достаточно ресурсов в проекте Project 1 для создания требуемой машины.

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

Пользователь входит в панель управления Cloud2 под аккаунтом accountXXXXX и создает VM4 (2.1, 5.1). Теперь у него в проекте Project 1 (accountXXXXX) снова нет свободных ресурсов, пока он не удалит какие-то из машин VM1, VM2, VM4.

Удаление проекта
Через некоторое время наш пользователь понял, что проект Project 2 больше не нужен и его необходимо закрыть, а виртуальную машину VM3 удалить. В биллинге в разделе Cloud2 пользователь просто удаляет проект (6), что приводит к удалению виртуальной машины в нем.

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

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

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