Автоматическое развертывание Windows Failover кластеров в Azure и еще один пример неработающего публичного кода и поддержки от Microsoft


Смотри на действование Microsoft: ибо кто может выпрямить то, что Он сделал кривым? (Екк. 7:13)

Верить в наше время нельзя никому, порой даже самому себе. Мне — можно. (Старина Мюллер)

Северный пушной зверек подкрался незаметно, откуда его никто не ждал… (Работа)

Начало этой истории (которая по странному стечению обстоятельств практически совпала с другой историй про Microsoft support, о которой я писал ранее и с еще более печальной историей про бан моего курса по экзамену AZ-900 со стороны Microsoft) было драматичным… Заказчик присылает на развертывание дизайн ресурсной группы в Azure, в котором кроме всего прочего – еще и 6 Windows Failover Clusters по 2 сервака в каждом и с обычными сроками «на завтра». В принципе, все есть – ARM templates много раз деланы-переделаны, отдельные ARM template/DSC для кластеров официально опубликованы Microsoft на GitHub – https://github.com/Azure/azure-quickstart-templates/tree/master/301-storage-spaces-direct . Звоню заказчику, торгуюсь по срокам, договариваемся «на послезавтра, иншааллах». В моем отделе не принято «сетапить ручками» или сдавать заказчику непроверенные пакет ARM/DSC/PowerShell скриптов – потому день будет на тестирование «на всякий случай», хотя скрипты уже множество раз протестированы и отлажены на предыдущих деплойментах, в том числе и для этого заказчика буквально месяц назад – в общем, на 100% уверены и тестовое развертывание – это «чистая формальность»…

Ага! «Формальность»! Как же! До того момента, как следом за Microsoft с его комплектом ARM/DSC/PowerShell для развертывания кластера на GitHub не подкрался тот самый северный пушной зверек. Народ сразу взялся за дело и … смотрит на меня слегка офигевшими от прихода зверька глазами. Microsoft’овский скрипт для развертывания кластера выдает при тестовом прогоне ошибку:

“DSC Configuration \u0027ConfigS2D\u0027 completed with error(s). Following are the first few: PowerShell DSC resource MicrosoftAzure_xCluster failed to execute Set-TargetResource functionality with error message: The running command stopped because the preference variable “ErrorActionPreference” or common parameter is set to Stop: The network path was not found.\r\n The SendConfigurationApply function did not succeed. LCM failed to start desired state configuration manually.”

и деплоймент всего ARM шаблона обваливается 😦 Понятно, что «на послезавтра» сделать кластеры можно, но «ручками», а это не наш стиль – все инфраструктуры клиентов у нас хранятся в ARM/DSC/PowerShell и даже если нет полной копии сайта в Azure Site Recovery, а только бекапы – восстановление/развертывание копии инфраструктуры заказчика с наличием таких скриптов занимает от минут до нескольких часов.

И вот тут до меня начинает доходить весь круг тех проблем, которые очертил своими лапками пушной зверек, вызванный нежеланием Microsoft сопровождать и тестировать свои скрипты после очередных апдейтов (типа, мы вам их «кинули» 3 года назад и чего это вы еще недовольны?). А проблема в том, что примерно в 1/3 от всех развернутых клиентских инфраструктур у нас присутствуют кластеры и это означает, что случись сейчас что или клиенты захотят «дубликаты» – то у нас нет рабочих скриптов «быстро все повторить». В общем, «зверек» разгулялся по полной…

Быстрое изучение вопроса и поиск решения показало только то, что проблема не только у нас, но есть еще люди на просторах Интернета и даже успели опубликовать проблему в репозитории – https://github.com/Azure/azure-quickstart-templates/issues/6932 – но самое главное в данной ситуации, что никому в Microsoft проблема со скриптом на GitHub для развертывания кластера в Azure не интересна – запрос висит уже месяц и только дополнился еще одним пострадавшим… Ну не работает у людей инфраструктура в Azure – проблемы индейцев пользователей шерифа Microsoft не волнуют, Azure не требует поддержки для пользователей по мнению самого Microsoft. Кстати, и запрос к техническому специалисту в Microsoft, который привязан к конкретному заказчику «пошуршать по продуктовой команде и найти тех, кто выправит то, что сделалось кривым» – так и ушел «вникуда»… Периодически пингую «специалиста» последнюю неделю без какого-либо успеха… А что, Рождество же, Azure и проблемы могут и подождать, «ручками развернете и сконфигурите кластеры»…

Заранее предполагая такую проблему с тем, что в Microsoft об восстановлении скрипта никто и «не почешится», решил сделать запасной вариант развертывания кластеров в Azure, интегрированный в ARM template и использующий «чистый» PowerShell – разбираться, что пошло не так со сценарием DSC в «оригинальном» решении Microsoft, времени и желания не было.

Потому, пока Microsoft не пофиксит (может быть) «главный скрипт», вот вам основная идея, как автоматически развертывать кластеры в Azure через ARM с zero-touch. Да, получилось не так универсально, как в оригинале, но оно простое и понятное для всех, легко модифицируется и, главное, работает 😉

Итак, основные технические нюансы и сам код:

Первое – в Azure можно поднять только Windows Failover Cluster в режиме Storage Spaces Direct на 3 узла максимум. Кроме того, не все нагрузки поддерживаются в таком режиме в Azure, и, самое главное – цена вопроса, поскольку требуются производительные премиумные SSD диски для работы дисковой системы в режиме репликации Storage Spaces Direct в таком кластере.

Второе – чтобы развернуть кластер, необходимо, чтобы виртуальные машины, в нем участвующие, как узлы, имели частные статические IP в виртуальной сети Azure и были добавлены в единый Availability Set. ОС внутри этих ВМ должны быть добавлены в домен (кстати, если нужно только добавить ВМ в домен, то это можно сделать и непосредственно в ARM через расширение JsonADDomainExtension), на них установлены необходимые роли и службы. Это не проблема, такую работу выполняет простой PowerShell скрипт:

[CmdletBinding()]

param (

    [Parameter()]

    [string]

$domainname,

    [string]

$biosname,

    [string]

$adminname,

    [string]

$adminpwd

)

#Online the cluster’s disks

Get-Disk |  Where-Object IsOffline -eq $true | Set-Disk -IsOffline $false

#install failover clustering services and tools

Install-WindowsFeature Failover-Clustering -IncludeAllSubFeature -IncludeManagementTools

Start-Sleep -Seconds 5

Install-WindowsFeature FS-FileServer

Start-Sleep -Seconds 5

# generate domain admin’s credentials for domain join

$adminusername = “$biosname\$adminname”

$password = ConvertTo-SecureString -String $adminpwd -AsPlainText -Force

$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $adminusername, $password

Add-Computer -DomainName $domainname -Credential $cred -Restart -Force

Скрипт помещается в виде файла в какой-то Azure BLOB Storage (не забудьте разрешить анонимный доступ к объектам внутри контейнеров, хотя можно и заморочиться с атрибутам ресурса и указанием ключа доступа к этому BLOB) и запускается такой скрипт внутри VM из ARM template, как ресурс для создаваемой виртуальной машины с использованием extentions типа CustomScriptExtention, с указанием правильного пути к скрипту, который вы только что скопировали в BLOB (атрибут fileUris) и генерацией правильной командной строки (атрибут commandToExecute). Вот пример фрагмента кода именно ресурса (должен быть пристыкован к BМ) для ARM template:

“resources”: [

            {

“type”: “extensions”,

“name”: “CustomScriptExtension”,

“apiVersion”: “2017-03-30”,

“location”: “[parameters(‘location’)]”,

“dependsOn”: [

“[concat(‘Microsoft.Compute/virtualMachines/’, parameters(‘vmname1av1’))]”,

“[concat(‘Microsoft.Compute/virtualMachines/’, parameters(‘vmname2av1’))]”

              ],

“properties”: {

“publisher”: “Microsoft.Compute”,

“type”: “CustomScriptExtension”,

“typeHandlerVersion”: “1.8”,

“autoUpgradeMinorVersion”: true,

“settings”: {

“fileUris”: [

https://mystorage.blob.core.windows.net/CL/pre-setupVM.ps1”

                  ],

“commandToExecute”: “[concat(‘powershell -ExecutionPolicy Unrestricted -File pre-setupVM.ps1 -domainname ‘, parameters(‘domainname’), ‘ -biosname ‘, parameters(‘netbiosname’), ‘ -adminname ‘, parameters(‘adminUsername’), ‘ -adminpwd ‘, parameters(‘adminPassword’))]”

}

}

}

]

Еще хочу обратить внимание на формирование строки для выполнения пользовательского скрипта – начинается она с вызова powershell с правильными параметрами -ExecutionPolicy Unrestricted и указанием имени файла вашего скрипта в параметре -File.

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

Третье – и вот тут, после выполнения скрипта и перезагрузки каждой машины начинаются проблемы. ARM считает свою работу по запуску скриптов выполненной и, самое главное, в описание каждой из виртуальной машины в ARM template вы можете добавить только один ресурс типа extensions/CustomScriptExtension. А после перезагрузки нам нужно запустить на одном из узлов будущего кластера еще один скрипт, который сформирует кластер. Сделать это в ARM template нельзя – второй скрипт не указывается, и объяснить ARM, что после перезагрузки на машине стартует еще один скрипт и окончания его работы тоже нужно дождаться – тоже не получится… Потому – занимаемся «лайфхакингом». Если нельзя сделать внутри ARM template, это можно сделать в скрипте PowerShell, который запускает развертывание ARM template. Схематически такой скрипт выглядит следующим образом:

  1. Запускаем команду PowerShell на развертывание ARM – New-AzResourceGroupDeployment с указанием файла «большого» ARM, который развернет всю требуемую инфраструктуру и запустит на требуемых виртуалках скрипт конфигурации машины (выше);
  2. А теперь «хак» – для каждой из виртуальных машин, где уже был выполнен скрипт, запускаем команду по удалению расширения, что позволит выполнить еще одно развертывание ARM со вторым скриптом, который и сконфигурирует кластер – Remove-AzAMCustomScriptExtention . Единственное НО тут – это то, что данная команда для каждой из ВМ выполняется достаточно долго – 3-5 минут.
  3. Снова запускаем New-AzResourceGroupDeployment – на этот раз для развертывания второго шаблона ARM, в котором для каждой второй виртуальной машины (одной из пары узлов кластера) выполняется другой скрипт, как extensions/CustomScriptExtension.

Четвертое – для работы кластера требуется кворум, который для нашего варианта в Azure реализуется с использованием Cloud Witness. Для этого требуется создать Azure BLOB Storage, получить Access Key этого хранилища и использовать ключ для конфигурирования кворума кластера в режиме Cloud Witness. Потому в логике скрипта выше появляется еще один пункт 2а, где после создания инфраструктуры и сервисов (в том числе и хранилища для Cloud Witness) и удаления первых расширений, мы получаем ключи доступа для созданных хранилищ и на следующем шаге передаем их как параметр в новый ARM template – и дальше уже внутри ARM они будут переданы в вызываемый через extensions/CustomScriptExtension скрипт PowerShell для создания непосредственно кластера.

Итого, общий код PowerShell скрипта, который будет выполнять развертывание двух ARM template, с переключением extensions/CustomScriptExtension и получением ключей хранилища:

# deploy basic infrastructure from main ARM template (defined in $templateFilePath)

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Mode Incremental -TemplateFile $templateFilePath -TemplateParameterObject $Params | Out-Null

# delete CustomScriptExtension from deployed VMs (names should be defined in $deployedVMs array)

foreach($vmname in $deployedvms){

Remove-AZVMCustomScriptExtension -ResourceGroupName $ResourceGroupName -VMName $vmname -Name “CustomScriptExtension” -Force | Out-Null

}

# get storage account’s key for Cluster quorum Cloud Witness and set values in $Params object for next ARM deployment

$keys = Get-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $Params[‘storagename1’]

$Params[‘key1’] = $keys[0].Value

# deploy second CustomScriptExtension (build the cluster) from second ARM template (defined in $templateFilePath2)

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Mode Incremental -TemplateFile $templateFilePath2 -TemplateParameterObject $Params | Out-Null

Теперь дело за малым – за созданием кластера.

Сам код вызова extensions/CustomScriptExtension во втором ARM template выглядит аналогично первой части (второй скрипт тоже не забудьте поместить в правильный контейнер, как и в первом случае), единственно – в параметрах скрипта передается 2 имени узлов будущего кластера и другие его параметры:

“resources”: [

        {

“type”: “Microsoft.Compute/virtualMachines/extensions”,

“name”: “[concat(parameters(‘vmName2av1′),’/customscript’)]”,

“apiVersion”: “2015-06-15”,

“location”: “[parameters(‘location’)]”,

“properties”: {

“publisher”: “Microsoft.Compute”,

“type”: “CustomScriptExtension”,

“typeHandlerVersion”: “1.4”,

“settings”: {

“fileUris”: [

https://mystorage.blob.core.windows.net/CL/setupCluster.ps1”

                    ],

“commandToExecute”: “[concat(‘powershell -ExecutionPolicy Unrestricted -File setupCluster.ps1 -domainname ‘, parameters(‘domainname’), ‘ -biosname ‘, parameters(‘netbiosname’), ‘ -adminname ‘, parameters(‘adminUsername’), ‘ -adminpwd ‘, parameters(‘adminPassword’), ‘ -vmnames \”‘, parameters(‘vmname1av1′),’,’,parameters(‘vmname2av1’),’\” -clustername ‘, parameters(‘availabilitysetname1’), ‘ -clusterip ‘, variables(‘cluster1’), ‘ -storageaccount ‘, parameters(‘storagename1’), ‘ -storageacckey ‘, parameters(‘key1’))]”

                }

            }

        }

]

Пятое – чтобы развернуть кластер, скрипт должен выполняться с правами администратора домена, а вот CustomScriptExtension исполняет скрипт с правами ОС внутри виртуальной машины. Но скрипт PowerShell нельзя имперсонализировать в самом скрипте, но, как вариант, можно выполнить команду с правами администратора на удаленном компьютере через Invoke-Command. Т.е. запускаем скрипт через ARM template, передаем логин/пароль админа в скрипт, который создает идентити админа и вызывает команду через Invoke-Command с правами администратора.

Шестое – Windows Failover Cluster НЕЛЬЗЯ развернуть удаленно через Invoke-Command даже с правами администратора. НО, можно сконфигурировать удаленное исполнение команд Invoke-Command через аутентификацию CredSSP, которую предварительно надо настроить на обоих узлах с использованием пары перекрестных команд Enable-WSManCredSSP:

  • Для каждого из узлов включаем режим сервера Enable-WSManCredSSP Server -Force
  • Для каждого из узлов включаем доверие Enable-WSManCredSSP Client -DelegateComputer <имя второго узла> -Force

После конфигурации CredSSP для каждого узла появляется возможность использования Invoke-Command для создания кластера.

Таким образом второй скрипт PowerShell, который создает кластер, будет выглядеть следующим образом:

[CmdletBinding()]

param (

    [Parameter()]

    [string]

$domainname,

    [string]

$biosname,

    [string]

$adminname,

    [string]

$adminpwd,

    [string]

$vmnames,

    [string]

$clustername,

    [string]

$clusterip,

    [string]

$storageaccount,

    [string]

$storageacckey

)

# create domain admin credential’s object

$adminusername = “$biosname\$adminname”

$password = ConvertTo-SecureString -String $adminpwd -AsPlainText -Force

$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $adminusername, $password

#get nodes name from parameter string like “node1,node2”

$nodesArr = $vmnames -split “,”

$n1 = $nodesArr[0]

$n2 = $nodesArr[1]

#enable CredSSP authentication for admin impersonation by remote calls

#set both nodes as CredSSP’s servers

Invoke-Command $nodesArr -Credential $cred {Enable-WSManCredSSP Server -Force}

#set current node CredSSP’s client that trusts other node

Enable-WSManCredSSP Client -DelegateComputer $n1 -Force

#set other node CredSSP’s client that trusts current node

Invoke-Command $n1 -Credential $cred {Enable-WSManCredSSP Client -DelegateComputer $Using:n2 -Force}

Start-Sleep -Seconds 5

# create cluster as domain admin with one node by remote call over CredSSP

Invoke-Command $n1 -Credential $cred {New-Cluster -Name $Using:clustername -Node $Using:n1 -NoStorage -AdministrativeAccessPoint ActiveDirectoryAndDns -StaticAddress $Using:clusterip -Force} -Authentication Credssp

Start-Sleep -Seconds 30

Invoke-Command $n1 -Credential $cred {Get-Cluster $Using:clustername} -Authentication Credssp

Start-Sleep -Seconds 5

# add second node to the cluster as domain admin by remote call over CredSSP

Invoke-Command $n1 -Credential $cred {Get-Cluster -Name $Using:clustername | Add-ClusterNode -Name $Using:n2 -NoStorage} -Authentication Credssp

Start-Sleep -Seconds 30

Invoke-Command $n1 -Credential $cred {Get-Cluster $Using:clustername} -Authentication Credssp

Start-Sleep -Seconds 5

# configure cluster’s Storage Spaces Direct as domain admin by remote call over CredSSP

Invoke-Command $n1 -Credential $cred {Enable-ClusterStorageSpacesDirect -Confirm:$false} -Authentication Credssp

Start-Sleep -Seconds 30

# configure cluster’s cloud witness as domain admin by remote call over CredSSP

Invoke-Command $n1 -Credential $cred {Get-Cluster -Name $Using:clustername | Set-ClusterQuorum -CloudWitness -AccountName $Using:storageaccount -AccessKey $Using:storageacckey} -Authentication Credssp

Start-Sleep -Seconds 5

# configure cluster’s cloud witness as domain admin by remote call over CredSSP

Invoke-Command $n1 -Credential $cred {Get-StoragePool S2D* | New-Volume -FriendlyName Data -FileSystem CSVFS_ReFS -UseMaximumSize} -Authentication Credssp

Вот и все готово… Получилось, как я уже писал выше – куда более лаконично, нежели нагромождение кода DSC у Microsoft (который и обвалился в результате), более понятно и читаемо (хотя да, есть некоторые «странности», но это опять таки – вопросы к МС с его Invoke-Command и ограничениями для extensions/CustomScriptExtension) и, главное – оно работает, в отличие от «элитарного» кода Microsoft.

Сейчас держим про запас 2 набора файлов IaC для наших заказчиков с кластерами в Azure – один с «классическим» и нерабочим сейчас кодом Microsoft для создания кластеров через ARM/DSC – в надежде, что Microsoft таки читает запросы на разрешение проблем и хоть как-то сопровождает свой код, и второй – вот данный момент рабочий и приведенный выше.

Я уже писал про компетенцию и поддержку своих продуктов со стороны Microsoft – этот случай из той же оперы, причем тут Microsoft явно забил на свой публично опубликованный код (типа, а вот сопровождать не обещали). Так что, как сказано в предисловии к посту – верить никому нельзя и мы таки попытались выправить то, что Microsoft сделал кривым.

И да, если Microsoft не в состоянии поддерживать документацию, код и вообще – оказывать качественный саппорт – может, им стоит прислушаться к тому совету, который мне написали в комментариях к предыдущему моему посту (хотя Microsoft пошел простым путем – находит тех, кто делает это бесплатно за непонятные и совершенно эфимерные плюшки статуса MVP, который еще и довольно таки “подозрителен”, как я уже писал ранее):

Игорь, привет. По поводу твоего свежего поста – совет: предложить им сделать аналог Bug Bounty/Marketplace: за чужой хороший код и документацию платить премии.

Друге посты и видео по теме Azure и ИТ-карьеры:

Microsoft Azure Functions на PowerShell–включение аутентификации пользователя для HTTP Trigger, получаем информацию об аутентификации пользователя в коде функции на PowerShell и про “поддержку” Microsoft.


Начнем с технической части повествования – чтобы народу было интересно и полезно почитать, а уже потом перейдем к «политическо-ИТшной» – это уже по желанию, но как по мне так смешно, что аж печально… 😉

Итак, в некоем решении используются Azure Functions, написанные на PowerShell Core (потому что все мои админы знакомы и легко могут модифицировать, развивать решение при необходимости) и в качестве безопасности (аутентификации пользователей) работающие со стандартной идентификацией от Azure AD при вызове того, что называется Http Trigger, т.е. функции, имеющей свой персональный URL, по которому ее и можно запустить, передав требуемые параметры.

Требуется – при развитии решения появилась потребность не только аутентифицировать пользователей, но и иметь некие аналоги аудита (кто какие функции вызывает) и ролевой модели (запрет некоторым людям вызывать функции или использовать глобальные параметры).

Аутентификация на базе Azure AD для Azure Functions включается в пару кликов и не требует какого-либо изменения кода самой Azure Functions – для функции вся аутентификация работает при описанном ниже сценарии «прозрачно», всю работу по аутентификации на себя берет «движок» Azure. Не путать, кстати, с опцией Identity, которая позволяет имперсонализировать сам исполняемый экземпляр Azure Functions в Azure и выполнять код под определенным аккаунтом в Azure, которому можно предоставлять разные права – чем, собственно, мы и пользуемся – используя Azure Functions для выполнения различных задач обслуживания, предоставляя толпе из L1 для выполнения базовых операций не доступ к порталу Azure и клиентским подпискам, а только к функциям, которые уже все сделают «как нужно и правильно»…

Но вернемся к аутентификации пользователей при вызове Azure Functions. Итак:

Заходим на основную страницу требуемой Azure Functions, переключаемся в закладку Platform Features, и там кликаем на опцию Authentication / Authorization

clip_image002

На открывшейся странице устанавливаем переключатель App Service Authentication в положение On и в появившемся ниже выпадающем списке Action to take when request is not authenticated выбираем опцию Log in with Azure Active Directory, а в следующем списке Authentication Providers кликаем на пункт Azure Active Directory / Not Configured

clip_image004

Откроется новое окно настроек – создания экземпляра приложения для аутентификации в Azure AD, где в Managed Mode выбираем опцию Express и далее, в появившихся ниже опциях, выбираем правильный каталог Azure AD (если в вашем профиле их несколько зарегистрировано), Managed Mode оставляем, как есть – Create New AD App – и оставляем имя по умолчанию.

clip_image006

Кликаем Ok в данном диалоге, ждем окончания процесса создания объекта, и в форме Authentication / Authorization, куда вас вернет портал, кликаем вверху на иконку Save. Опять таки – ждем окончания операции и получаем сконфигурированное приложение с аутентификацией от Azure AD. Теперь, при обращении к Azure Functions, которые зарегистрированы, как Http Trigger, Azure будет запрашивать у вызывающего пройти аутентификацию и предъявить аккаунт пользователя из указанной выше Azure Active Directory. Так что анонимные пользователи такую функцию теперь не вызовут.

НО! Такой сценарий достаточен только для «отсечения» анонимных пользователей, а вот если требуется какое-либо подобие RBAC внутри самих Azure Functions – например, пользователь аутентифицируется, но при этом часть параметров функции ему недоступна или доступ к данным внутри самой функции должен быть ограничен – здесь, увы, такая аутентификация не поможет. Да и вообще, у Azure нет толкового RBAC для Functions.

Т.е. после вызова функции вызов перенаправляется на аутентификацию в Azure AD и если все ок – управление передается на Azure Functions и нам надо теперь внутри исполняемой функции получить клейм пользователя и все атрибуты его учетной записи – ID в аутентифицирующей системе, имя, саму систему и прочие токены. При этом все это еще требуется получить в PowerShell.

И тут начинается самое интересное – хотя Microsoft со всех трибун кричит про внедрение Serverless решений, рассказывает про использование Azure Functions вместе с PowerShell для процессов автоматизации – в реальности никакой официальной документации от Microsoft, особенно фундаментальной, по теме Functions/PowerShell вы не найдете. В Интернете ее тоже нет, даже на любимом всеми StackOverflow – просто никто не использует решение, не смотря на громкие заявления Microsoft.

Нашел пару документов про работу с идентити/информацией аутентификации в Functions/Web Apps применительно к C#, но это нагромождение классов и вызовов было явно не релевантно для кода PowerShell. Чтобы понять всю глубину проблемы, стоит сказать, что ни я, ни моя команда – ни разу не девелоперы – только PowerShell скрипты для автоматизации процессов заказчиков и auto-healing, только хардкор, как, например, скриптик PowerShell на 1000 строк для правильного «развертывания всего» с соответствующими внутренностями VM. Для нас вообще удивительно, кстати, почему работа с тем же Azure Storage Queues в PowerShell пишется в 3 строки, а в C# сначала надо создать десяток классов при неочевидном выигрыше в производительности самой Functions. Но это уже лирика, а вывод простой – для людей, которые занимаются автоматизацией процессов на PowerShell, документации по разработке на сайте Microsoft совершенно недостаточно, приходится собирать по крупицам с разных источников, работать «методом тыка» или открыть тикет в саппорте. На том и порешили – продолжаем «копать» и обращаемся в саппорт.

Методом логического анализа кода («методом тыка») на C# обнаружилось, что чтобы работать cо всей информацией по аутентификации пользователя, вызывающего Functions с аутентификацией в Azure AD (как настроено выше) в PowerShell коде можно через Headers одной командой:

$Request.Headers

Ниже – представленный в JSON объект заголовка вызова Http Trigger в Azure Functions (тот самый $Request.Headers). Все поля, как на ладони и далее работаем с ними, как с обычным hashtable в PowerShell, т.е. получаем нужное значение по имени ключа (которым являются поля заголовка ниже).

clip_image008

Т.е., чтобы получить имя пользователя, его ID, его Access Token и т.п. в коде PowerShell – требуется максимум 1-2 команды:

$headersObj = $Request.Headers # get call’s headers

$username = $headersObj[“x-ms-client-principal-name”]   # get user account name

$userid = $headersObj[“x-ms-client-principal-id”]       # get user AAD ID

$userip = $headersObj[“x-forwarded-for”]                # get user IP

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


И тут начинается вторая часть истории – которая смешная и печальная, особенно в разрезе предыдущей моей истории про то, как Microsoft Ukraine заблокировала и удалила мои видео по курсу для сертификации AZ-900 по Azureпродолжения истории c Microsoft Ukraine после).

Итак, открыл я кейс в Microsoft support по данной проблеме и вот выдержка переписки:

1. Я описываю проблему

clip_image010

2. И получаю от Microsoft Support ответ, что в моем сценарии (option 1, процесс конфигурирования которого и описан выше) такую информацию получить нельзя:

clip_image012

3. Причем, получив такой ответ – я уже 100% уверен в возможности получения этих данных, просто еще не имею на руках конкретного кода. И я отправляю письмо типа – «точно нельзя с опцией 1? Уверены?» и получаю от Microsoft support еще один отрицательный ответ – нет, вы не можете получить такую информацию (причем, происходит это через 5 дней, три из которых – рабочие):

clip_image014

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

И вот тут начинается самое интересное и «смешное». Мне сразу же перезванивает (буквально в течение 15 минут, до этого отвечал только по почте и то – через сутки) сотрудник службы поддержки Microsoft, который просит поделиться с ними решением проблемы и кодом!!! Т.е. Microsoft, который до этого активно удалял мои технические видео про Azure из принадлежащей мне группы в Facebook, а потом и удалил мой аккаунт из админов – про это читайте тут и тут – теперь вдруг другой рукой просит поделиться информацией со своей поддержкой?! Серьезно?! Я должен бесплатно делать за сотрудников Microsoft их работу? Той информацией, которую Microsoft в качестве базовой просто обязан опубликовать в документации, поскольку и продукт – платный, и везде, со всяких трибун, Microsoft кричит о важности безопасности вообще и правильного кода – в частности. И уж точно этой информацией должна владеть служба поддержки Microsoft…

Чтобы вам было еще смешнее – я и сейчас продолжаю получать письма с просьбами отдать код, последнее пришло уже сегодня, 25 декабря, через 9 дней после того, как я сообщил, что задача имеет решение. Вот реально?! За 9 дней внутри Microsoft собственный отдел поддержки не смог найти техническое решение и продолжает ждать у моря погоды – поделюсь ли я кодом?!

clip_image016

И самое смешное – Microsoft за последние 3-5 лет сократил практически весь высококвалифицированный технический персонал из своих локальных офисов ввиду того, что Azure поддержки не требует, его надо только продавать, а технической поддержкой пусть занимаются партнеры «за деньги». Azure, как показывает опыт, просто за бла-бла-бла девочек из маркетинга Microsoft не продается (про это я говорю тоже в первой серии курса AZ-900), а партнеры, при таких отношении, «экспертизе», «документации» и «поддержке» от Microsoft – точно не будут вкладываться в «прибыльный и простой бизнес Azure» и не будут развивать компетенции Azure, как и клиенты не горят желанием платить деньги «каким-то партнерам», один раз столкнувшись с подобным невежеством поддержки «самого Microsoft». И, особенно, партнерам не интересно это делать, если развитие компетенций не интересно самому Microsoft и даже поддержка Microsoft не в состоянии дать ответ на простой, как оказалось, вопрос.

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

Но и это еще не все про Microsoft и поддержку Azure… Читайте в следующем посте про развертывание Windows кластеров в Azure и про официальные скрипты от Microsoft.

Друге видео то теме Azure и ИТ-карьеры:

Microsoft Exam AZ-900 Azure Fundamentals–бесплатная подготовка к сертификационному экзамену, часть.02: экономика облачных технологий, вопросы по CapEx и OpEx в Azure


Продолжаю серию видео – http://bit.ly/Exam-Az-900 – по подготовке к сертификационному экзамену Microsoft AZ-900 Azure Fundamentals. В этой серии – сразу несколько небольших (вопросов на 4-5), но достаточно неприятных для ИТ-специалистов тем экзамена – Модель Shared Economy в облачных технологиях для снижения стоимости и главная экономическая фишка, под которой продаются любые “облака” – CapEx/OpEx в ИТ. Да-да, в AZ-900 есть такие вопросы, потому я в обзорном видео к экзамену AZ-900 – https://youtu.be/_2-txkA3Daw – и говорил, что для “простого” технического специалиста некоторые вопросы могут быть весьма “далекими” и совершенно непрактичными. Хотя, в реальности – оно так и есть – Microsoft предлагает “правильные ответы” согласно своей маркетинговой идеологии… Так что смотрите и запоминайте, не забудьте пройтись и по линкам.

Подписаться на канал ►►► http://bit.ly/iwalker2000_subs
Мой LinkedIn ►►► https://www.linkedin.com/in/iwalker2000/
Подготовка к AZ-900 ►►► http://bit.ly/Exam-Az-900
Как стать системным администратором ►►► http://bit.ly/ITProSysAdmin
ИТ карьера – что для этого нужно ►►► http://bit.ly/ITcarriera_
Обзор GPD P2 Max ►►►
https://youtu.be/HZfN_geAvQI
Все обзоры Windows 10 ►►► http://bit.ly/Windows10_review
Про производительность дисков ►►► http://bit.ly/Disk_perf_p01


Exam AZ-900 Azure Fundamentals – подготовка к экзамену, ч.02: CapEx и OpEx, экономические вопросы

Предыдущие видео данной серии про экзамен AZ-900 смотрите здесь – http://bit.ly/Exam-Az-900 :

  • Exam AZ-900 Azure Fundamentals – подготовка к экзамену, ч.01: общий обзор экзамена и как готовиться – https://youtu.be/_2-txkA3Daw

Azure и совместное потребление

  • Microsoft покупает много серверов сразу по цене, которая значительно ниже розничной (в реальности – Microsoft заказывает блоки у компаний типа QCT и собирает в стойки по своей архитектуре – Open Compute Project (OCP) – https://azure.microsoft.com/en-us/global-infrastructure/hardware-innovation/ ).
  • Microsoft собирает их облако, которое позволяет максимально плотно заполнить нагрузкой каждый физический сервер – 80% нагрузки на сервер в сравнении с 30% «обычной» нагрузки на сервер в организациях.
  • Аналогично – для хранилищ и сетевой инфраструктуры.
  • Microsoft перепродает «плотно упакованные» серверы по частям – в виде виртуальных машин и прочих сервисов.
  • Суммарная стоимость виртуальных машин, запущенных клиентами на таких серверах – выше стоимости всех серверов. Профит!
  • Чем больше клиентов и плотнее упаковка и выше нагрузка на серверы – тем выше профит… Есть возможность снижать цены или предоставлять доп.сервисы дешевле.
  • Про экономику облачных датацентров – http://cloudscaling.com/blog/cloud-computing/understanding-cloud-datacenter-economies-of-scale/
  • Клиент арендует по принципу «заплатил только за использование» и не нуждается:
    • В приобретении серверов и начальных крупных затратах
    • Помещении для хранения, средств энергопитания
    • Не нуждается в обслуживании физических серверов
    • Клиент быстро может нарастить мощности своих вычислений без дополнительных затрат


СapEx & OpEx в ИТ и облаках:

  • CapEx – разовые крупные покупка любого «железа», «софт», оплата проектов по строительство ЦОД (серверных комнат), разработка программного обеспечения и т.п.
  • OpEx – регулярные выплаты по потребностям – зарплата ИТ-специалистам, связь и коммуникации от провайдеров, электричество, обслуживание и комплектующие материалы, подписка на ПО и сервисы.
  • Облачные провайдеры сдают в аренду готовые сервисы (виртуальные машины или программные комплексы – например, Office 365 – это почта, взаимодействие в команде, хранилища и т.п.) с помесячной оплатой за услуги – по размеру ресурса или количеству пользователей и берут на себя все затраты по аппаратному и программному обеспечению, строительству и обслуживанию сервисов.
  • Таким образом – облако переводит для конечного пользователя CapEx в OpEx – пользователю не нужно тратить деньги на начальные инвестиции (CapEx) и он просто арендует те ресурсы, которые ему требуются, выплачивая помесячно стоимость только потребленных ресурсов (OpEx).
  • OpEx в облаках – фактически, рассрочка выплаты тех же денег, которые потратила бы компания на покупку железа и т.п. в течение 5 лет (обычно).
  • Эффективность переноса решения в облако Azure позволяет посчитать Total Cost Ownership (TCO) Calculator на сайте Azure.

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

Друге видео то теме Azure и ИТ-карьеры:

  • Доклады по серверным технологиям Microsoft Windows Server – http://bit.ly/WindowsServer_overview
  • ИТ-карьера: как стать ИТ-специалистом, основные шаги для успешной карьеры в ИТ – http://bit.ly/ITcarriera_

СофТы: как в Windows 10 вернуть планы управления питанием Ultimate Performance, High Performance


Тут в видео про мой новый ультрабук GPD P2 Max и его тест батарейки некоторые очень внимательные личности разглядели, что у меня больше различных опций настройки планов управления энергопотреблением Windows 10, чем у них 😉 У меня есть такие планы, как Ultimate Performance, High Persormance и даже Power Saver к стандартному Balance Performance в новых сборках Windows 10. Как так? И как включить все эти планы себе?

Подписаться на мой канал iWalker2000 ►►► http://bit.ly/iwalker2000_subs |
Купить GPD P2 Max ►►►
http://bit.ly/2ktSUZ0 |
Магазин GPD – проверено покупками ►►►
http://bit.ly/2PrZPke |
Мой LinkedIn ►►►
https://www.linkedin.com/in/iwalker2000/ |
Обзор Acer Predator Helios 300 ►►►
https://youtu.be/P-YFuA6ZmyY |
Все обзоры Windows 10 и полезных системных утилит ►►►
http://bit.ly/Windows10_review |
Azure для сисадминов ►►►
http://bit.ly/Azure_IaaS_p04 |
Про производительность дисков – как оценить скорость диска и как разогнать ваш ПК ►►►
http://bit.ly/Disk_perf_p01 |
Как стать системным администратором ►►►
http://bit.ly/ITProSysAdmin

В действительности – примерно 2 года назад, с очередной осенней сборки Windows 10, Microsoft решил, что выбор плана управления энергопотреблением для лептопов под Windows 10 – слишком сложная вещь для понимания простым пользователем и поэтому – скрыл для доступа все привычные планы, оставив для совместимости только Balanced Performance и добавив в диалоговое окно управления питанием (то, что вы видите при клике на иконку батарейки в панеле таскбара) переключение режимом от Best battery life до Best Performance – но при этом Windows 10 будет балансировать работу в пределах достаточно зажатого по производительности Balanced Performance. Но для многих – ручной выбор планов энергопотребления остается актуальным – хотя бы потому, что они знают, что это такое и им все равно, как долго проживет батарейка, особенно, когда ноут больше 70% времени проводит на зарядке, зато хочется получить чуть больше производительности – и переключение на High Performance и Ultimate Performance планы очень даже поможет.


СофТы: как в Windows 10 вернуть планы управления питанием Ultimate Performance, High Performance


Так вот, Microsoft пока не отключил полностью в Windows 10 все эти планы, а только “припрятал” их и восстановить их видимость в списке – не проблема, нужно только запустить командную строку (или PowerShell) и выполнить следующие команды, которые создают “правильные” дубликаты нужных планов в вашей Windows 10:


Для включения Power saver
powercfg -duplicatescheme a1841308-3541-4fab-bc81-f71556f20b4a


Для включения High Performance

  powercfg -duplicatescheme 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

Для включения Ultimate Performance
powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61


После дубликации можете убедиться в том, что все планы на месте, использовав команду powercfg /L и включив нужный план прямо из командной строки, скопировав его ID из списка и использовав в команде powercfg /S {Plan ID} , чтобы потом не лазить по настройкам.


И еще пару слов насчет батареи в ноуте, который постоянно стоит на зарядке – недавно на моем корпоративном ноуте Lenovo Thinkpan T480, который 80% времени проводит на зарядке, отрубилась внутренняя батарея. И на этот счет Lenovo на своем сайте саппорта рекомендует установить приложение Lenovo Vantage и в нем настроить Battery Charge Threshold с ограничением по максимальной зарядке в 90-95% – это позволяет сохранить батареи ноута “вечно молодыми”…

И обзоры других гаджетов у меня на канале iWalker2000:


"Microsoft выпустил Windows 10 с ядром Linux"–что это такое, будет ли Windows 10 бесплатным, как установить ядро Linux в Windows и как работают приложения Linux на Windows


Сегодня я пришел к вам с благой вестью! Нет, доллар не будет по 5-8-10, коммуналка не подешевеет… Просто я получил за вчера и уже сегодня несколько сообщений, у которых общий смысл и вопрос – «Игорь, а правда, что Microsoft запустил Windows 10 на Linux и теперь Windows – это клон Lunix?». И да – это правда!

Особенно для тех, кто не в курсе технических тонкостей – в новой Windows 10 (которая сборка 18917 и доступна по Windows Insider Preview) есть свое ядро Linux (изначально написанное Microsoft для различных своих целей). Но в реальности все как раз наоборот – теперь приложения Linux (ELF64) могут без проблем запускаться из-под Window 10, т.е. это Linux работает на Windows 10. Ядро Linux, анонсированное в Windows 10 – это новая версия – вторая – службы Windows Subsystem for Linux 2 (WSL2), первая версия которой присутствует в Windows 10 уже 2 года и о работе с которой я рассказывал в недавнем видео на канале – Windows 10: установка и настройка хакерского Kali Linux в Windows 10, как приложения WSL –   рекомендую посмотреть для ознакомления с самой идеей работы Linux на Windows 10.


“Microsoft выпустил Windows 10 с ядром Linux” или как работает WSL2 в новой Insider сборке

Так а что же тогда запустил Microsoft и почему все говорят о «ядре Linux в Windows 10?». Microsoft просто продолжил развитие идеи WSL и во второй версии вместо сервиса трансляции системных запросов Linux-приложений в запросы Windows (как это делает первая версия WSL) «подсунул» таким приложениям свое собственное полноценное ядро Linux, которое работает в режиме «тонкой виртуализации» – т.е. это не виртуальная машина в полном смысле этого слова – со своим объемом памяти, отдельными эмулируемыми устройствами и т.п., а всего лишь изоляция процесса – в данном случае ядра того самого Linux – от других процессов, чтобы не мешали и не ломали друг друга. Зачем и почему – для совместимости с системными вызовами Linux – обещают, что новое ядро Linux в Windows 10 будет полностью совместимо с основными дистрибутивами и приложениями Linux. А пользователи Windows получат возможность запускать нужные им приложения прямо из Windows одновременно с «родными» приложениями. Microsoft идет правильной дорогой, товарищи…


Эта дорога уже много раз проверена и использована Microsoft – на примере тех же Windows Services for Novell (кто сейчас еще помнит тот Novell, который Microsoft успешно выдавила из корпоративных сетей такой вот совместимостью) и через какое-то время уже будет звучать странно предложение «установить Linux», если все нужные Linux-приложения успешно работают и в Windows. А дальше там пойдет Modern OS – подчищенное и оптимизированное ядро Windows с такими вот подсистемами для запуска Linux, Android, MacOS, iOS приложений – или вы думаете, у Microsoft не хватит денег, сил и влияния заточить такие же микроядра для поддержки API, которые есть в разных платформах? Не зря же новую версию WSL2 в списке сервисов для установки назвали не ядром Linux или чем-то похожим, а очень скромно – Virtual Machine Platform, как бы намекая, что одним Linux дело точно не закончится. 😉


А что касается самой установки и настройки Windows Subsystem for Linux 2 – то про это все смотрите в видео, я постарался рассказать как можно более подробно весь процесс установки, конфигурации и самого сервиса WSL, и конфигурации под него дистрибутивов различных Linux. А с пользовательской точки – работы в дистрибутивах – в WSL2 ничего не поменялось – для вас WSL2 работает прозрачно. И даже лучше, чем в WSL1 – простой тест на работоспособность nmap (который в WSL1 не работал) показал куда лучшую совместимость WSL2 с дистрибутивами Linux. И да, пока (июнь 2019) работать с WSL2 можно только в тестовой сборке Windows 10 Insider Preview, начиная с 18912 – что не очень удобно для многих – мало кто согласен “портить” рабочую ОС ради удовольствия, устанавливая поверх нее тестовую Insider Preview (которая лично у меня – подвзглюкивает). Поэтому я записал еще одно видео –
Как установить Windows 10 Insider Preview “с ядром Linux” второй системой и ничего не сломать – которое поможет всем желающим легко и быстро установить Windows 10 Insider Preview второй системой на комп, “не ломая” и не меняя ни основную Windows, ни разделы диска. 

При работе непосредственно с движком WSL2 главное знать, что в WSL2 поменялись некоторые команды, которые позволяют теперь управлять, в каком окружении – WSL или WSL2 – будет работать тот или иной дистрибутив Linux. Теперь утилита командной строки wsl.exe (запускайте из CMD/PowerShell с правами админа) дает пользователю возможность управлять версионностью каждого из пакетов Linux на компьютере, переключая их между работой в WSL и WLS2:

  • wsl -l -v  –  отображает список дистрибутивов Linux с версиями WSL (1|2), под которыми эти дистрибутивы запускаются
  • wsl –set-version <имя_дистрибутива> 2  – переключает указанный дистрибутив на работу с WSL2. Выполнение команды может занять значительное время, поскольку производится конвертация (копирование) файлов дистрибутива из файловой системы Windows (где их хранит WSL) в виртуальный VHDX диск с ext4 (в котором хранит данные WSL2)
  • wsl –set-default-version 2  –  устанавливает для всех новых дистрибутивов используемую версию WSL2 по умолчанию.    

И, конечно же, чтобы понимать принципы работы Windows Subsystem for Linux – рекомендую посмотреть предыдущее видео про WSL – Windows 10: установка и настройка хакерского Kali Linux в Windows 10, как приложения WSL


А к теме безопасности вообще и настройке и использованию Kali Linux по назначению – я вернусь в следующих видео и, наверное, даже оформлю их, как прямые трансляции –
http://bit.ly/iLive2000 и подписывайтесь на канал – http://bit.ly/iwalker2000_subs . Там же будет и про ИТ-карьеру – что и как развивать, чтобы стать востребованным ИТ-специалистом – продолжение темы серии видео – http://bit.ly/ITcarriera_


И другие видео на моем
канале iWalker2000 по теме ИТ :

Мастер-Класс: Как быстро и легко сделать классное яркое фото для Instagram, Facebook и т.п. на любом мобильном


По просьбе некоторых сектантов, которые утверждали, что только на iPhone можно снять красивые фото, а потом удивлялись, что оригинал никаким образом не выглядит, как готовый результат – так вот, следуя этому мастер-классу – красивые фото можно получить на любом среднем телефоне – было бы время и желание 😉 “Про секту”, кстати, отлично показали в новой части Железного Неба 2 (Iron Sky II), а сам фильм тот еще сатирический трешак, хотя первая часть Железного Неба (Iron Sky) зашкаливает по пародированию всяких “политкорректных” хреней современного общества – так что рекомендую посмотреть этот трешак. 

Мой Instagram iwalker2018 ►►► ‬ | Мой LinkedIn Igor Shastitko – заглядывайте сюда за ИТ новостями ►►► | Подписаться на мой YouTube-канал iwalker2000 ►►► | Всё мои прямые трансляции, на которых вы можете задавать свои вопросы на разные темы ►►► | Специальный сериал Первый День Сезона ►►► ‬ | Путевые Заметки из разных стран и городов мира ►►►

И да, с самого начала хочу всех разочаровать – ВСЕ ВРУТ! – красивые фото в Инсте и прочих – это 30% самой фотки (из которой еще 50% – это умение самого фотографа сделать правильную фотку) и 70% обработки (и вкуса того, кто обрабатывает) – и лично меня радует, что сейчас с этим делом обработки стало попроще (ввиду того, что у телефонов теперь дури, как у среднего ноута) и я могу спокойно заниматься обработкой фото на телефоне или планшете в метро по дороге на работе – типа, вот так выглядит моя дорога на работу – https://youtu.be/ePMsbHA3sEs – только вместо видео я читаю доки, публикую новые видео на канал или работаю с фотками. Какая реально разница между оригиналом на телефоне (кстати, снято на сектантский iPhone XS Max) и тем, что получается на выходе – можете посмотреть на примере данной фото – да-да, жизнь – боль и Деда Мороза/Санта Клауса нет!:

file-15 file1-1

А теперь непосредственно к теме получения красивых фоточек из правильного полуфабриката и как получить этот полуфабрикат тоже! Смотрите еще одно видео из серии “полезных советов” – получился целый мастер-класс о том, что нужно, чтобы на телефоне сделать “крутую” фоточку для Instagram, Facebook и прочих социальных сетей.

На самом деле для получения классной фотки с телефона требуется не “самый крутой телефон с самой крутой камерой”, а следование простым шагам: во-первый – это фотографирование не “на автомате” и не встроенным приложением, а использование приложения, которое делает хорошие HDR снимки и позволяет вам как минимум выбрать отдельно фокус и экспозицию (для компенсации всяких пересветов), а во-вторых – правильно и со вкусом отредактировать полученное фото – и это не применение простых фильтров, это действительно послойное разделение фото на фрагменты с дальнейшим редактированием каждого слоя. Именно такой подход позволит получить действительно яркую эффектную запоминающуюся картинку для того же Instagram и при этом выделить то, что было потеряно даже при использовании HDR.


Мастер-Класс: Как быстро и легко сделать классное яркое фото для Instagram, Facebook и т.п. на любом мобильном


Да, я знаю – в этом своем видео я ссылаюсь на платные приложения – те же камеры для iOS – ProCamera и для Android – A Better Camera и, конечно же – Adobe Lightroom для мобильных – а в основном у нас любители бесплатного всего. Но, поверьте, цена этих приложений составляет 5-10долларов (я про платные камеры) – и это не такая большая цена по сравнению с тем же “новым более крутым телефоном с новой камерой” каждый год-два. В реальности – современные камеры даже телефонов среднего класса – очень и очень на уровне и при правильном подходе – о котором и рассказано в видео – можно получать отличные фотки на любом 2-3хлетнем телефоне с ценой от 150уе. Собственно, в этом – еще одна идея данного видео – рассказать и показать, как на любом приличном телефоне можно сделать классное фото, довести его до кондиции и получить много лайков и привлечь побольше подписчиков.

Хотя, если честно, как показывает мой многолетний опыт работы с Youtube – кол-во подписчиков – это или активное вложение денег в продвижение канала/профиля, или результат многолетних последовательных усилий по созданию контента (как в моем случае), когда даже не знаешь, какое именно видео выстрелит и принесет трафик и подписчиков, или вопрос удачи и случая. В любом, пользуясь данной инструкцией по созданию яркого интересного фото – каждый сможет “оживить и расцветить” свой аккаунт, а дальше – добавляя что-то интересное, яркое и разнообразное день за днем – можно будет говорить и о постепенном росте подписчиков. Ведь интересное содержимое контента того же Instagram является таким же обязательным условием развития, как и яркость и привлекательность этого самого контента – которую вы уже сможете существенно улучшить, я надеюсь, при помощи этого моего “мастер-класса” о создании красивых и ярких фото для социальных сетей.

А если у вас появились вопросы – пишите в комментариях – постараюсь ответить или же подписывайтесь на канал – http://bit.ly/iwalker2000_subs – подключайтесь к следующим моим прямым трансляциям – http://bit.ly/iLive2000 – сможете задать вопросы “вживую” и сразу получить ответ 😉

Для тех, кто интересуется советами про ИТ-карьеру – хочу порекомендовать посмотреть эту серию видео про то, как стать хорошим ИТ специалистом – http://bit.ly/ITcarriera_

И другие “полезные советы” разной тематики у меня на канале:

SysAdmin vs DevOps–что разного и что общего–будущее системных администраторов на примере автоматизации развертывания и конфигурирования VM в Azure–Infrastructure as Code и инструменты DevOps, которыми сисадмин должен будет владеть в ближайшем будущем


DevOps – одно из модных сейчас «поветрий» (наряду с «data scientist» и прочими «IoT» и «AI»), адепты которого активно продвигают мысль, что «все ИТ будет devops» – в прогрессивной ИТ-среде не останется системных (и прочих) администраторов, их таки заменят DevOps. НО, самое интересное, что даже внутри крупных ИТ корпораций, которым тренд «DevOps» приносит большие прибыли, нет единого мнения о судьбе в современных ИТ-инфраструктурах тех позиций, которые в общем называли «ИТ-профессионалы» («ТЫЖПРОГРАММИСТ!» – «нет, я администратор сети и безопасности») и которые в реальности к «Dev» вообще не прикасаются, а управляемые ими инфраструктуры настолько статичны, что их «Ops» не меняются годами и выполняются рутинно (я это называю «ребята нашли свой карман безделья»).

NoDevOpsПотому, в данной презентации со Стального Бубна 2018 во Львове, посвященной концепции Infrastructure as Code (IaC) для системных администраторов и архитекторов ИТ-инфраструктуры, я попытался (как оказалось, даже 1,5 часа очень и очень мало, чтобы рассказать и показать самые базовые концепции) сравнить те задачи, которые решают DevOps и SysAdmin, что у них отличного и, главное, что есть общего в работе и DevOps, и SysAdmin – какие современные тенденции на рынке управления ИТ-инфраструктурами позволяют использовать общий инструментарий и общие подходы в работе SysAdmin и DevOps. И все это, конечно же, на примере облачных технологий, связанных с Microsoft Azure.

Начнем, пожалуй, с того момента, что важность и потребность в позиции «DevOps» достаточно сильно «культивирована» теми компаниями, которые, собственно, продают инструменты для работы DevOps или компаниями-аутсорсерами, где DevOps – производственная необходимость в рабочем процессе с постоянным «выкатыванием» новых сборок ввиду забажености кода, производимого гребцами галер. Да и, собственно, сейчас какие только позиции и обязанности не называют красивым именем «DevOps». В реальности ситуация с DevOps примерно такая же, как с той картинкой про айсберг – DevOps сейчас – одна из самых «видимых» позиция в ИТ-индустрии, не считая девелоперов (потому что их раньше не было, точнее – не придумали еще такое слово, и технологии были «пожиже», а теперь они срочно нужны каждому уважающему себя аутсорсеру), а основное управление ИТ-инфраструктурой «обычных» компаний по прежнему лежит на плечах обычных таких системных администраторов, которые работают себе с этой самой инфраструктурой «по старинке». Я лично, и моя компания как раз оказывает услуги таким вот «обычным» компаниям и сейчас в тренде – это миграция части ИТ инфраструктуры в облака с последующим обновлением (читай – rebuild до архитектуры, близкой к требованиям PaaS) некоторых LoB решений компании или же – использование облачных сервисов типа Azure Backup или Azure Site Recovery для реализации более эффективного резервного копирования или защиты от сбоев. И у меня накопилась достаточно большая и релевантная статистика отношения руководителей (CIO, CEO) к концепции DevOps для работы с их ИТ-инфраструктурой.

Но перед тем, как продолжить тему Infrastructure as Codeрекомендую познакомиться с моим докладом на предыдущем Стальном Бубне, который подробно рассказывает, что бывает, когда DevOps используют (или они берутся сами за работу) не по прямому назначению – как архитекторы и администраторы ИТ-инфраструктуры обычной компании с ее обычными сервисами + немного облаков.


Steel Drum/Стальной Бубен – доклад по реализации проектов Azure Site Recovery или DevOps vs SysAdmin

Также смотрите и читайте другие материалы для ИТ-профессионалов у меня на канале iWalker2000 и блоге:

 

Итак, вернемся к отзывам обычных компаний про место DevOps и соответствующих процессов в их ИТ-инфраструктуре (комментарии собирательные, но некоторой – очень близко к тексту):

  • У нас нет разработки, у нас стабильная инфраструктура, которая нуждается в базовых рутинных операциях.
  • Мы планируем перенос инфраструктуры в облако, верно, но это будут реплики наших виртуальных машин или базовые сервисы.
  • Скрипты? Извините, но мои люди получают заплату за то, чтобы работали сервисы.
  • У нас рутинные операции, если надо – есть RDP/TeamViewer и прочие инструменты админа.
  • DevOps – это какие-то аутсорсеры, которых мы наняли для написания приложений, они работают в своей песочнице и инфраструктуры это не касается.

Как мы видим, с точки зрения руководителей ИТ в компаниях, которые «просто эксплуатируют ИТ, как часть производственного процесса» – места для DevOps в таких компаниях нет, а позиции системных администраторов прочны, как никогда. И таких компаний, для которых ПК или мобильные устройства всего лишь средство обработки производственной информации – большинство. Так что, стоит ли сисадминам почивать на лаврах?

Текущие тенденции в экономике и бизнесе – говорят, что нет… Хотя бы потому, что все идет, как обычно – нужно дешевле, быстрее и на вчера. В том числе – и в управлении ИТ-инфраструктурой. Быстрее развертывать новые сервисы, восстанавливать старые, подключать быстрее и больше пользователей и выдавать им данные на их запрос как можно оперативнее, а лучше всего – дать пользователю кнопку «сделать весь отчет/презентацию/работу за меня» 😉 И да! – Еще и параноидальная безопасность во всем + новое красивое слово GDPR (под которое можно подвести любые требования).

И, самое главное – компаниям упорно продают облака… Мировые гиганты в ИТ вкладывают в этот сегмент громадные деньги, в том числе и на маркетинг, что приводит к тому, что любой CIO задумывается над вопросом «а зачем мне облака?» и даже если не задумывается – ему обязательно напомнит его CEO вопросом типа «а что у нас там с облаками? Мне тут рассказали, что это на 30% эффективнее нашей текущей системы». Нет, я ничего против облаков не имею, и даже сам придумаю 10-15-20 причин, почему облака лучше локальной инфраструктуры – я просто озвучиваю тенденции и текущий момент раздумий CIO.

В результате сейчас сложилась ситуация, которая довольно патовая и для руководства ИТ-инфраструктур, и для сисадминов, и даже для тех самых корпораций, которые «пропихивают» массы в облака. Почему? Да потому что сейчас как бы существует 2 мира ИТ-инфраструктур, в одном из которых есть серверы с их консолями, традиционные системы и процедуры управления (от тех самых компаний, которые и «за облака»), а во втором – есть облака с совершенно другой концепцией управления, вроде как изначально заточенной под девелоперов и DevOps (что не принимается CIO/сисадминами – смотри выше) и в которые надо поместить путем «взяли и переставили» существующие серверы с нестыкующейся моделью управления внутри. И основные проблемы тут:

  • Традиционные модели управления устаревают ввиду новых облачных технологий и требований,
  • Очень много ручной работы и модификаций + еще один уровень абстракции в виде облака,
  • Ручное тестирование современной инфраструктуры требует больших затрат в целом и слушком затратно по времени,
  • Административные привилегии предоставляются без детализации задачи, ограничений по времени,
  • Операционные команды не накапливают опыт в виде готовой документации и повторяемых конфигураций – метод next-next-next этого не позволяет 😉

Потому общую тенденцию в изменении требований к управлению «обычной» ИТ-инфраструктуры «обычными» системными администраторами можно озвучить, как:

НОВЫЕ ПОДХОДЫ К УПРАВЛЕНИЮ ИТ ИНФРАСТРУКТУРОЙ ТРЕБУЕТ БОЛЕЕ ТОЧНЫХ, АВТОМАТИЗИРОВАНЫХ ПРОЦЕССОВ С ОБШИРНЫМИ ВОЗМОЖНОСТЯМИ ПО ДЕКЛАРАТИВНОМ ОПИСАНИЮ, ПОВТОРЕНИЮ И МАСШТАБИРОВАНИЮ, НЕЖЕЛИ СЕЙЧАС.

Как будут выглядеть ИТ-инфраструктуры будущего даже в «обычных» компаниях, которые соответствуют указанным требованиям и какой будет работа системного администратора, управляющего такой ИТ-инфраструктурой? – Правильно, как уже знакомое для DevOps понятие Infrastructure as Code со всеми вытекающими отсюда свойствами и возможностями:

  • Инфраструктура определяется как набор декларативных описаний объектов…
  • Которые сохраняются в конфигурационных файлах…
  • Точно описывающих установку отдельного сервера или всего окружения…
  • С «идемпотентностью» (вот же слово придумали) …
  • С автоматизацией конфигурирования и рутинных операций…
  • С сохранением ИТ администраторских навыков и инструментов…
  • + внедрения процедур, применяемых в разработке ПО – Source/Build/Test/Release

Что изменится в результате распространения концепции Infrastructure as Code для системных администраторов не только в облачных ИТ-инфраструктурах, но и в их локальных сетях и любимых продуктах, а также в самих процедурах работы с ИТ-инфраструктурой в средних и крупных компаниях?

  • Распространение концепции декларативной Infrastructure as Code на локальные инфраструктуры (например, с распространением Azure Stack),
  • Перенос большинства сервисов управления и мониторинга в облака (уже сейчас активно развиваются облачные Microsoft Intune и Operations Management Suite) с применением к ним возможностей управления через конфигурацию,
  • Автоматизация работы облачных, гибридных и локальных с использованием облачных сервисов типа Azure Automation и гибридных runbook,
  • Постепенный дрифт AD в сторону Azure AD + Desire State Configuration (DSC), который придет на замену привычных групповых политик (учим DSC уже сейчас),
  • Повышение требований Business Continuity / Disaster Recovery и, как результат, более активное использование в компаниях таких средств, как Azure Backup и Azure Site Recovery – готовой песочницы для того, чтобы при крупной катастрофе локальной инфраструктуры компания «рывком» оказалась в облаках (и вы даже не представляете, какая будет паника у ИТ после этого!),
  • Иметь 2-3 параллельные идентичные инфраструктуры будет нормой – что позволит быстро вводить в эксплуатацию новые решения или реагировать на катастрофы,
  • И да, концепт на то, что в нынешних условиях дешевле все с нуля пересобрать, развернуть или переключить несколько слотов развертывания с использованием декларативных шаблонов, описанных выше – чтобы быстро обеспечить бизнесу работу служб – а после искать ошибки, которые привели к сбоям или остановке предыдущей,
  • Изменяются процедуры и сам стиль работы ИТ отделов – «админ» поправил файл конфигурации, собрал, затестил, зарелизил в автоматизированной системе (даже, возможно, с тестовым развертыванием в свободный слот) – и шеф нажал кнопку деплоймента в продакшен. Все это – с версионностью, трекингом изменений конфигураций, мониторингом событий и возможностью повторить операцию бесконечное количество раз даже на уже работающей инфраструктуре без потери ее работоспособности (та самая «идемпотентность»).

Итак, перспективы развития облачных, гибридных и даже локальных ИТ-инфраструктур и подходов управления ими в ближайшие годы понятны. Что делать системному администратору, который осознал, что его умение создать, настроить виртуальную машину и установить внутрь нее ОС с настройкой ролей этой ОС и даже детальных отдельных сервисов, типа вебсайта – скоро окажется невостребованным по причине замены этих навыков новыми инструментами? Есть много ответов на этот вопрос, например – «уйти из ИТ», или «переквалифицироваться в DevOps», или «в бьюти-/тревел-блогеры» (ага, это троллинг самого себя, у автора достаточно большое количество видео, посвященных путешествиям – «Путевые Заметки Игоря Шаститко» – http://bit.ly/iwalker2000_travels1 ), или «просто развиваться и постараться взглянуть на способы администрирования ИТ-инфраструктур под другим углом». И изучать новые технологии и инструменты управления, которые уже есть на рынке, и которые используют те же DevOps (так что, если хотите в DevOps – учиться придется еще больше и тому же). А именно:

  • Шаблоны описания конфигураций – Azure Resource Manager templates (ARM, доступен и в локальных облаках Azure Stack),
  • Средства развертывания инфраструктур из шаблонов и просто скриптами – портал Azure, Azure PowerShell, Azure CLI, VS, GitHub,
  • Средства контроля конфигураций – Desire State Configuration (DSC) – и не только в базовых сценариях, но и в сочетании с теми же шаблонами ARM,
  • Облачные средства автоматизации и мониторинга – такие, как Azure Automation, Hybrid Runbook Workers, Operations Management Suite и прочие реакции на события и т.п.,
  • Средства управления исходным кодом шаблонов, скриптов развертывания, runbook, DSC, с интеграцией Azure с GitHub и прочими решениями,
  • Средства управления процессом разработки ИТ-инфраструктуры с подходом Infrastructure as Code – Source/Build/Test/Release – с применением тех же облачных сервисов Visual Studio Team Services и т.п.

И, после такой вводной части – рекомендую все же посмотреть полную запись моего выступления на конференции «Стальной Бубен» во Львове в мае 2018 – «Автоматизация развертывания и конфигурирования VM в IaaS Azure – взгляд со стороны админа, а не DevOps» – кроме, собственно, слайдов системные администраторы найдут в этом видео примеры использования всех перечисленных технологий и инструментов. Да, как я уже писал, я немного просчитался со временем, к сожалению, опыт показал, что для подобной презентации с демо потребуется минимум в 3 раза больше времени, потому я планирую включить все эти демо в запланированную на своем канале серию, посвященную работе системного администратора с Microsoft Azure, а уже опубликованные серии, где рассматривается применение Azure со стороны системных администраторов, найдете здесь – https://youtu.be/MEjC_GityKc


Steel Drum/Стальной Бубен – Infrastructure as Code – автоматизация развертывания VM в Azure 

Выводы? Для системных администраторов – они не утешительные – «учиться, учиться и еще раз учиться» – вас ждет «большая ломка» – методов, инструментов, и собственно, того, чем вы будете управлять. Потому – всех действительно заинтересованных ожидает очень интересная дорога вперед, перед которой вы должны понять несколько простых истин из будущего (которые я вкратце постарался осветить в данном видео):

  • Все «артефакты» Infrastructure as Сode, описывающие даже самые сложные инфраструктуры компаний – простые текстовые файлы, как и исходный код у девелоперов!
  • «Админы инфраструктуры» медленно переползают в «разработчиков инфраструктуры» (писателей ARM шаблонов и скриптов runbook на PowerShell)…
  • «Админы рабочих мест/серверов» в «разработчиков конфигураций» (писателей DSC и, снова же – скриптов PowerShell)…
  • Инфраструктурный и конфигурационный код может быть сохранен, версионизирован, протестирован и распространен, как и программный код – у вашей инфраструктуры вскоре появятся свои сборки, свои релизы, и свои тестовые и разрабатываемые копии в отдельных «слотах».
  • И да поможет вам <тут фрагмент политкорректности> в вашем постижении новой мудрости и желании перерасти свой консерватизм с RDP и кликами next-next-next!!!

Это не единственный семинар, который я читал в Украине, в ближайшее время еще одно интересное мероприятие для сисадминов пройдет в Харькове, 13 июня 2018 всех интересующихся приглашаю сюда – SysAdmin Day.Kharkiv 2018 – https://www.facebook.com/SysAdminDayUA/ (предварительная регистрация обязательна). И, конечно же, следите за выпусками технических видео на канале – http://bit.ly/WindowsServer_overview .

 

Первые серии нового курса по использованию Azure IaaS и обо всем том, где будет рассмотрено подробно все то, о чем я говорил в данной презентации:

 

Видео об ИТ-карьере – как стать ИТ-специалистом и заработать много денег:

Немного ссылок на другие материалы для тех, кто хочет стать просто ИТ-специалистом – смотрите первые шаги по созданию тестового рабочего места:

И смотрите другие видео для ИТ-специалистов у меня на канале:

Видео про новые возможности дисков и дисковых массивов:

 

Подписывайтесь на мой Youtube канал iWalker2000 – для подписки просто кликните сюда

 

Также, по просьбам посетителей – меня найти можно (добавляйтесь в друзья и подписчики):

 

Эмиграция для ИТ-профессионалов в Европу! Оформление ВНЖ в Словакии, возможность работы со всеми странами ЕС, открытие фирм, ЧП с соответствующими видами деятельности, оформление документов для членов семьи. Быстро, качественно, дешево и абсолютно легально ВНЖ в Словакии. www.slovakiago.com
Не упустите свой шанс жить и работать в Евросоюзе!