[UPD 25] Azure: почему никогда

 

Описание поста

Не так давно, чуть меньше двух недель тому, в ленте подписок на Хабрахабре мне попался пост>>> о том, что в рамках новой стратегии “Microsoft loves Linux” был открыт исходный код PowerShell и опубликованы пакеты для Ubuntu 14.04, Ubuntu 16.04, CentOS 7, и macOS 10.11, и даже есть “документация” (к документации и Microsoft вернёмся чуть позже) для запуска Docker-контейнера с PowerShell, которая, однако, приводит к ошибке “FATA[0002] Error: image library/powershell:latest not found“.

В комментариях к этому посту был задан вопрос:

+3
Круто! А зачем?

На который я ответил.

Текст моего комментария тут не сильно важен, но закончился он одним утверждением:

+5

Но я с трудом представляю себе UNIX/Linux-администратора, который по доброй воле пойдёт в Azure хостить сервера.

На что мне был задан уточняюший вопрос:

А можно более детально рассказать об этом моменте? Какие там подводные камни для UNIX/Linux-администратора, кроме того, что Azure — это «богомерзкий МС», их цен и разных «религиозных» заморочек.

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

Собственно, текст комментария и будет основным текстом этого поста, а ниже цитаты – я буду периодически добавлять новые причины – “Почему я никогда не буду пользоваться Microsoft Azure для размещения своих серверов, и ни в коем случае не посоветую его, если меня спросят”.

По мере добавления новых… назовём это “трудностями” – в работе с Azure – они будут добавляться в конец поста, а сам пост будет обновляться с датой и изменением в заголовке – [UPD N], где – будет увеличиваться на +1 каждый раз, начиная с нуля, когда будет добавлено описание новой “трудности”.


TL;DR: Azure, как и другие продукты Microsoft – ненужно усложнённая, запутанная, местами – просто нелогичная платформа без адекватной и свежей документации, а тех. поддержка вам скорее всего ничем не поможет и вы сами быстро закроете бесполезный тикет (тем не менее – см. UPD #6).

Что бы комфортно себя чувствовать с Azure – надо “вырасти” на работе с Windows Server, .NET, IIS и т.п., привыкнуть к подобным вещам, научиться с ними работать. Придя со стороны OSS-а (Open Source Software) – с ней достаточно тяжело, хотя иногда интересно и, местами – даже смешно.


Важно: Данный пост – абсолютно субъективен, является частным мнением и не претендует на то, что бы быть “руководствием к действию” или принятию окончательного решения о выборе поставщика услуг.

Интересен и ответ>>>  @usarskyy на него.

Комментарий

Попробую. Мнение, конечно, субъективное и вполне допускаю, что в какой-то мере предвзято — никогда не понимал Windows 200{3,8,etc} на серверах.Я работаю с Azure достаточно плотно где-то c марта месяца, пришёл один проект — и многие инструменты могу использовать неправильно или не знать об их возможностях. Тем не менее — расскажу немного о своём опыте.Общее впечатление об Azure — это много достаточно хороших и интересных решений. Взять те же Deployment Slots — чрезвычайно удобно.

дальше

Проблемы начинаются, когда приходится строить инфрастуктуру более чем на пару виртуалок. Т.е. — по отдельности продукты неплохие (в целом). Но как только начинается процесс их «вязки» 🙂 — начинаются и сложности.

Пожалуй, начать стоит с документации. Это, на мой взгляд — самая главная проблема Azure.

Она разнородная, она неупорядочена, она пишется всеми подряд (да, blogs.msdn — это не оф. документация, но именно эти блоги попадают в первых результатах Google). Если для быстрой подсказки по AWS CLI — ответ *всегда* есть в первых 1-3 результатах поисковой выдачи, которые ведут на четкую, внятную, up-to-date и связанную друг с другом документацию, из которой порой можно просто копипастить — то для Azure приходится перебирать несколько страниц Google.

Ещё одна проблема (проблема ли — но тем не менее) — это то, что она написана во многом только под MS-решения. Буквально сегодня я матерился плохими словами, когда мне в Azure WebApp надо было поменять права доступа на файл — и все очень многие нагугленные решения начились слов «Open your Visual Studion and press button N […]». Сидя под какой-нибудь Ubuntu, когда привыкаешь 90% задач решать/выполнять через консоль — такие «советы» дико бесят, особенно — когда вопрос простой, а на поиски ответа *как* — тратишь непозволительно долгое время.

Кстати, о консоли. Это ещё одна «особенность» Azure, которая дико напрягает. MS пилит решения типа PS под Linux — но сделать *нормальную* консоль в Azure Portal- они не хотят. Нельзя вставить текст. Нельзя переместить курсор по строке. Нет автоподстановки (по TAB), и т.д.

Если уже говорить о Portal — то к нему тоже много «претензий».

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

Смена цветовой схемы по дабл-клику, Карл!

Глюков и проблем при работе с панелью очень много. Зачем было делать «выплывающие» в сторону панельки? Кому это надо? Удобно? Может быть — кому-то, не спорю. Но была ли реальная необходимость в таком усложнении системы? Пусть даже и мелочном, типа каких-то JS-скриптов и что-там-ещё. Но у меня в Chromium под Ubuntu — перетаскивание панелей не работает, приходится использовать горизонтальный скрол. Да, на Mac — всё замечательно. Мне кажется — в погоне за эффектами и красотой — MS (как обычно, просто как обычно) жертвует простотой. Вспомните панельку AWS — никаких лишних плюшек. Всё очень строго, функционально, удобно и, главное — оно просто работает.

Ну и напоследок — это, конечно, глюки самого Azure, как IaaS/SaaS/ИтдS.

Мы деплоим через Git, и это иногда боль. Как-то я потратил целый день из-за того, что деплой в WebApp отваливался с какой-то ошибкой (которая ничего не говорила и гугление никаких результатов не принесло). Было предположение — что проблема из-за размера данных при деплое — 24.000 файлов, 1.5G, если не ошибаюсь.

Тем не менее, потратив целый день и так и не найдя решения — на следующий день, придя утром, я обнаружил что всё шикарно работает.

Недавно у нас на два часа упало приложение из-за проблем с MySQL. Ответ саппорта Azure был в духе «MySQL == ClearDB, котрая является thirdparty-сервисом, и мы ничем вам помочь не можем, пишите письма им». И даже дали ссылку. Возможно — спорный момент (но ведь платим мы не ClearDB?), но радости от работы с Azure не добавило.

Кстати, о саппорте. Если вы захотите спросить о чём-то (кроме вопросов оплаты) тех. поддержку — вы должны купить саппорт. план. За деньги. А уровень поддержки и их ответы… Это тема отдельной статьи, наверно.

Чего только стоят ответы в духе «Мы знаем об этом баге, но исправлять его не планируется». Честное слово — так ответили. Или когда пишешь со вставкой своих команд из консоли (to reproduce), в которых написано «ssh -p 2222», а в ответе пишут «Мы заметили, что у вас нестадартный порт демона SSH, попробуйте подключаться на порт 2222». Кроме мата, опять-таки — никаких других слов тут не находится.

Ух, накатал! Высказался. Очень меня достал Azure за эти полгода. С ним сложно работать. По крайней мере — мне. И да — я с трудом представляю, что бы человек, «выросший» *не* на использовании PowerShell, Win Server, MS SQL, .NET и прочей «кухни» MS — добровольно начнёт пользоваться ими.

Ну и напоследок — немного улыбательного:

> Hello %USERNAME%,
> Thank you for contacting Azure Subscription Management Support. My name is Stalin.

Такое вот получал 🙂

Всех с Пятницой.

Updates


UPD #1

Первый апдейт пришёл ещё до того, как я запустил этот пост “в продакшен”.

При попытке копирования SQL базы – получаю сообщение об ошибке:

Msg 40854, Level 16, State 1, Line 1 : Partner server 'oldsqlservername' is not compatible with server 'newsqlservername'

ОК, идём смотреть текущую версию SQL сервера в Portal Azure. И что там?

azure_fuckup_1

Т.е. – мало того, что сейчас нельзя просто увидеть версию, так они ещё и сообщают о том, что сервер баз данных, на котором крутят PROD-базы – будет работать не пойми как (а иначе у Azure  не бывает) от нескольких часов до нескольких дней, а операции с ним будут ограничены.

Замечательное Enterprise-решение.


UPD #2

Бесконечно писать можно.

Копирование SQL базы:

CREATE DATABASE newdatabasename AS COPY OF oldsqlservername.olddatabasename;

Результат:

MSSQL Output
Msg ETIMEOUT, : Timeout: Request failed to complete in 30000ms

И угадайте что? На следующий утро – всё работало замечательно. Такое уже было и с Git-деплоем, и с SQL-базами.


UPD #3

Мне быстро надоест, наверно – но ещё одна радость от Azure Portal:

azure_fuckup_2

Что это? Откуда? Почему? Ignore – наше всё.


UPD #4

Пришёл понедельник.

Информативность сообщений об ошибках в Azure – ещё одна его отличительная черта.

Деплой группы падает с “сообщением” об ошибке:

...
     url: 'https://management.azure.com/subscriptions/0a4f2b9c-***-***-***-40b17ef8c3ab/resourcegroups/jm-platfrom-dev-eu-slot-test-1/providers/Microsoft.Resources/deployments/SlotTesting/operationStatuses/08587285193748411525?api-version=2015-11-01' },
  response: 
   { body: '{"status":"Failed","error":{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.","details":[{"code":"NotFound","message":"{\\r\\n  \\"error\\": {\\r\\n    \\"code\\": \\"BadRequest\\",\\r\\n    \\"message\\": \\"\\"\\r\\n  }\\r\\n}"},{"code":"NotFound","message":"{\\r\\n  \\"error\\": {\\r\\n    \\"code\\": \\"BadRequest\\",\\r\\n    \\"message\\": \\"\\"\\r\\n  }\\r\\n}"}]}}',
...

Что?!?

azure_fuckup_3

Замечательное уведомление:

{“code”:”NotFound”,”message”:”{\\r\\n  \\”error\\”: {\\r\\n    \\”code\\”: \\”BadRequest\\”,\\r\\n    \\”message\\”: \\”\\”\\r\\n  }


UPD #5

Создаём ClearDB/MySQL базу с именем jmwpdev_titan. Пробуем подключиться с логином-паролем из Portal > Properties – всё ОК:

$ mysql -u usernme -ppassword -h hostname.cloudapp.net 
Welcome to the MySQL monitor.  Commands end with ; or \g.                                                                                                                                                                                                                      
...
mysql> Bye

Всё ОК.

Пушим дамп базы – получаем Access denied:

$ mysql -h hostname.cloudapp.net -u username -ppassword jmwpdev_titan < jmwpdev_bak_07_09_2016.sql
ERROR 1044 (42000): Access denied for user 'username'@'%' to database 'jmwpdev_titan'

WTF?!?

Идём в Portal – и чешим репу:

mysql_wtf_3

Database=acsm_5fb73bd46504d8a

Ээээ… Что за?!?

Ссоздаём ещё одну базу – всё как и должно быть:

mysql_wtf_3-2

А время потрачено.

UPD 1 Через неделю-две повторилась история. Саппорт немного пролил свет на это:

I was investigating the issue that you are facing with the database name in the connection string being different than the one supplied when you created the MySQL database from the Azure Portal.  This issue can occur if you’ve provided a database name that has previously been used on ClearDB.  If you attempt to create a database name that has already been used in the past, ClearDB will assign a generic name of acsm_**** on their system for the database.  On the Azure Portal, however, the name that you specified will be used so that you can manage the database easier.  Unfortunately, the returned database name (supplied in the connection string) will need to be used to connect to the ClearDB MySQL database.  If you have any questions or concerns, please don’t hesitate to contact me.

Проблема в том, что имена баз – новые и в этот раз, и вчера.


UPD #6

Справедливости ради – еще про опыт общения с тех. поддержкой Azure.

Сегодня (впрочем – это первый раз за 9 месяцев и штук 20 тикетов) тех. поддержка мне реально помогла, причём инженер меня действительно впечатлил своей работой. Настолько, что когда он упомянул о фидбеке его менеджеру – я его с удовольствием написал:

Hi, Shiv.

I’d like to express my sincere gratitude to all your team and individually – to Amit Agarwal.

With all my respect as a support engineer in past years – but unfortunately, my previous experience with Azure’s support wasn’t so excited and honestly – I didn’t expect for such resolution in this particular case.

Amit taught me otherwise. His attention to us, our case and to its details, his perseverance in the pursuit of the root cause show me that work with Microsoft Azure as IaaS/PaaS/SaaS provider can be really a pleasure.

I am absolutely happy and 100% satisfied with Amit’s support with our last issue, his technical skills and time, required to find the solution for us. Also, his last email with detailed steps “How this solution was found” – was a great addition to all our messaging.

I am really enjoyed his work.

I’d like also to say sorry for my petulance sometimes and say thanks one more time for Azure’s support engineers patience.

Sincerely yours, Arseny Zinchenko,

DevOps Engineer, *** inc.

Kiev, Ukraine.

 


UPD #7

Мне очень нравится вот эта “слеза”, когда у Azure Portal какая-то ошибка возникает. Он сам плачет, что такой еб… убогий?

А размер слезы – видимо из-за того, что ошибка возникла на странице создания тикета в саппорт с описанием другой ошибки…

azure_fuck_support


UPD #8

Простой WordPress с никакой посещаемостью (DEV), на Premium tier App plan – тупит безбожно, как и ещё несколько приложений.

Написал тикет в саппорт, ответ пришёл в духе “У нас всё хорошо, а у вас 100% CPU потребление, установите расширение, что бы мы могли проверить”.

Ну – ОК,  ну – давайте установим:

azure_extention_fail_1

Ну – ой.


UPD #9

Последний день на проекте, слава богу (UPD – наивный 🙂 )

В Portal нельзя удалить SQL-базу, кнопка неактивна:

azure_sql_database_no_delete-1

ОК, пишу тикет в саппорт.

Ответ:

I looked at the database, it is in ready state and I do not see any obvious reason on the backend why it wouldn’t be possible to delete the database.

И отличные сответы для Enterprise-солюшена:

§ Since this is an old type of database could you please try from the Classic portal (manage.windowsazure.com)
§ Could you please try with TSQL command

Т.е., “Portal – глючит, почему – мы не знаем, пробуйте костыли”.

Молодца, Azure.


UPD #10

Да – это проблема не Microsoft Azure – но базы мы создаём из Портала именно Azure.

Да и представьте себе, что бы Amazon Aurora, например, так “пролежал” пару часиков…

azure_mysql_no_respond-3

Ссылка для проверки статуса серверов ClearDBhttps://www.cleardb.com/status


UPD #11 12.09.2016

Поздно сообразил – надо было к каждому UPD ещё и дату добавлять, что бы лучше представлять себе весь этот … Всю печаль этой платформы.

И снова “здрасте”:

azure_fuckup_4


UPD #12 15.09.2016

Azure “упал”. Фактически – весь (все наши Production сервера в т.ч.), даже Portal еле шевелится.

azure_fuckup_5

azure_fuckup_6

Проверка статуса сервисов Azure – на странице https://azure.microsoft.com/en-us/status.

Конкретно сегодня ошибка:

Last updated 3 minutes ago

Starting at 11:48 UTC 15 Sep, 2016 a subset of customers using DNS in multiple regions may experience difficulties connecting to their resources hosted in this region. This issue is also having knock-on impact on impact on multiple Azure services, including SQL Database, Virtual Machines, Visual Studio Team Services, and App Service \ Web Apps. Engineers are aware of this issue and are actively investigating. The next update will be provided in 60 minutes, or as events warrant.

UPD Всё веселее и веселее:

azure_fuckup_7

UPD 2 Полтора часа лежали.


UPD #13 16.09.2016

Ну это уже п..ц.

На следующий день после UPD #12 – продолжаем радоваться.

Упал WebApp с Production-приложением. Почему – непонятно, в логах встречается только запись:

2016-09-16T10:11:26
System.ApplicationException: The trace listener AzureBlobTraceListener is disabled. —> System.InvalidOperationException: The SAS URL for the cloud storage account is not specified. Use the environment variable ‘DIAGNOSTICS_AZUREBLOBCONTAINERSASURL’ to define it.
at Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceListener.RefreshConfig()
— End of inner exception stack trace —

И при этом же – снова глючит Portal:

azure_fk_2

И из замечательного телефонного разговора с саппортом.

– “Я вижу, что есть какие-то проблемы со Storage”.
– ОК, и что будем делать?
(теперь внимание!)
– Попробуйте выполнить Scale Down, а потом Scale Up – это иногда помогает (!)
(сделали, помогло)
– ОК, Mihai, а можешь письмом ответить – что было причиной падения?
– Нет, не могу, сорри – “I have no idea” (c) (!)

ОК, проехали, договорились хоть какие-то логи скинет.

Через 10 минут – приложение снова в дауне. Через 5 минут – поднимается. Снова даун.

Добавлю апдейтов по этому кейсу.


UPD #14 19.09.2016

Дампим базу ClearDB:

$ time mysqldump -h eu-cdbr-azure-west-d.cloudapp.net -u username -ppass dbname > dbnamedump.sql
^C
real    43m24.319s
user    0m0.004s
sys     0m0.000s

43 минуты (специально оставил запущенным на обед).

Проверяем результат:

$ head dbnamedump.sql                                                                                                                                                                              
Ctrl-C -- exit!

Какая прелесть.


UPD #15 20.09.2016

Как же ты за***л, Azure!

Очень часто случается вот такое:

wtf_azure1

И через пару минут ожидания:

wtf_azure2


UPD #16 21.09.2016

Ещё очень часто встречается вот такой бред.

После удаления MySQL/ClearDB базы – нельзя создать новую с тем же именем:

wtf_azure4

Иногда получается через некоторое время – но вот эта ошибка со вчера появляется, конкретно с этим именем базы – вчера создавал, потом удалил из-за UPD #5, повторно создать – уже нельзя.


Тут хотел добавить UPD #17 – но не смог из дома залогиниться ни из Chromium в инкогнито (в обычном давно не даёт выбрать директорию), ни из Firefox.

Ну вот как работать с этим … ?


UPD #17 10.11.2016

Hello, Azure!

Последний апдейт был 21.09.2016 – и снова этот проект пришёл к нам.

Документация Azure – просто бесподобна:

azure_fuckup_111

ОК, идём пробовать:

$ azure resource list -g europe-jm --json
error:   'resource' is not an azure command. See 'azure help'.

Угу.


UPD #18 14.11.2016

Выполняем azure login в консоли:

azure_fuckup_18

Через Chromium – сегодня логин вообще не работает, в Firefox – такое “сообщение” об ошибке.

Bad request” – вообще любимая фраза Azure.


UPD #19 10.01.2017 Azure in New Year

Ничего особенно нового.

База jm-akqa-legacy-prod-db удалена (слева список баз на сервере), делается импорт базы из бекапы с тем же именем, получаем ошибку “база с таким именем уже есть”:


UPD #20 10.01.2017

Про сообщения об ошибках у Azure уже было.

Та же ситуация – база удалена, выполняется импорт из бекапа, падает с сообщением:

> Import operation for jm-akqa-legacy-dev-db failed.
> ErrorCode: undefined
> ErrorMessage: DeploymentFailed

Переписываюсь с саппортом (пока разводят руками – “мы импорта вообще не видим в логах” (с)).


UPD #21 10.01.2017

Нашёл старый скрин прикольный:


UPD #22 08.02.2017

Тоже ОК. Ругается на имя аккаунта при создании ВМ.

Почему нельзя было выполнить валидацию имени сразу, в CLI, а не сообщать об ошибке, когда половина ресурсов уже задеплоена в группу? пароль ведь парсится, проверяется:

$ azure vm quick-create -g jm-akqa-testing -n jm-ci-vm -l westeurope -y Linux -Q Canonical:UbuntuServer:16.04-LTS:16.04.201611220 -u user -p megapass
info:    Executing command vm quick-create
...                                                                                                                                                                        
error:   clisto4154840500jmci-vm is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.                                                         
error:   Error information has been recorded to /home/setevoy/.azure/azure.err
error:   vm quick-create command failed

UPD #23 22.02.2017

Создаём CDN-профайл…

Successfully created. Кликаем на этот “created”:


UPD #24 06.03.2017

Никогда не верьте документации от Azure:


UPD #25 29.03.2017

Ещё один баг/глюк (да просто – кривость), связанный с “блейдами”, или панельками, в Azure Portal:

Пока панелька по центру не перезагрузится (достаточно перейти в другой блейд этого же ресурса и обратно) – Value для записи не изменится.

Справа – эта же запись, уже отредактированная.

Вообще – это мелочь, очень много не добавляю, просто потому что реально много писать можно. И некогда, и банально привык не обращать внимания на такое.


Некоторые “приколы нашего городка”.

“Не баг, а фича”.

help может быть help, а может быть --help – нахрена? Уроды:

$ azure help
info:    Executing command help
info:             _    _____   _ ___ ___
info:            /_\  |_  / | | | _ \ __|
info:      _ ___/ _ \__/ /| |_| |   / _|___ _ _
info:    (___  /_/ \_\/___|\___/|_|_\___| _____)
info:       (_______ _ _)         _ ______ _)_ _ 
info:              (______________ _ )   (___ _ _)
info:    
info:    Microsoft Azure: Microsoft's Cloud Platform
info:    
info:    Tool version 0.10.8
help:    
help:    Display help for a given command
help:      help [options] [command]
...
$ azure webapp help
error:   'help' is not an azure command. See 'azure help'.
The current mode is: arm (Azure Resource Manager).
...
$ azure webapp --help
help:    Commands to manage your Azure webapps
help:    
help:    create a web app
help:      webapp create [options] <resource-group> <name> <location> <plan>
...

Траблшутинг SSH по-ажуровски:

  1. попробовать сбросить ключ доступа;
  2. попробовать сбросить пароль;
  3. перезапустить виртуалку;
  4. пересоздать виртуалку.

Это – всё, что Azure может в предложить в документации по поиску проблем с SSH-подключениями.

https://docs.microsoft.com/en-us/azure/virtual-machines/virtual-machines-linux-troubleshoot-ssh-connection


Из “приколов” – реакция Thunderbird на письма от MS:

azure_scam


P.S. Вот тут>>> нашёл интересный отзыв об Amazon Web Services, и в комментариях к нему – отзыв об Google Cloud.

P.P.S. 20-го марта год, как я на этом проекте.