Сократите расходы и получите компенсацию: используйте учетные записи автоматизации Azure для использования виртуальных машин

Мы собираемся поиграть с несколькими компонентами и функциями Microsoft Azure, чтобы удовлетворить общие требования в нескольких организациях. Мы собираемся использовать для выполнения ежедневных задач по остановке и запуску виртуальных машин на основе тегов. Пока вы назначите правильный тег, автоматизация позаботится обо всем остальном, и у вас будет время приготовить кофе, потому что вы не будете выполнять ручные задачи, как в старые времена.
Создание простого сценария
Давайте создадим простой сценарий: нам нужно включать и выключать машины в соответствии с требованиями некоторых проектов для экономии затрат. Вы можете подумать: «Есть несколько доступных вариантов, например, существующие доступные модули Runbook или в ».
Однако идея здесь состоит в том, чтобы показать, как мы можем создать динамическую и модульную учетную запись автоматизации Azure для удовлетворения ваших требований. Кроме того, мы рассмотрим каждый шаг, чтобы добиться этого, используя тот же процесс, который вы можете применить к различным потребностям в вашей корпорации.
Подход прост: мы собираемся назначить тег всем виртуальным машинам, которыми должен управлять наш модуль Runbook, и мы собираемся определить и . Runbook будет использовать для получения и тега, а затем на основе этой информации выполнит действие.
Само действие может включать или выключать данную виртуальную машину. Однако для определения действия мы будем использовать параметр runbook. Таким образом, мы можем решить это решение с помощью одного и простого сценария.
Все решение представлено на схеме ниже, а целевым виртуальным машинам требуется назначенный и учетная запись автоматизации с несколькими функциями: runbook, две переменные и два расписания. Я также связываю тег с учетной записью службы автоматизации Azure с частью уникальной информации, и мы собираемся использовать эту информацию в модуле Runbook для получения дополнительной информации.
Создание учетной записи службы автоматизации Azure
Это самый простой из шагов. Войдите на портал Azure, найдите учетные записи автоматизации и нажмите на нее. В новой колонке нажмите Добавить и укажите имя новой учетной записи автоматизации, группу ресурсов, расположение и обязательно создайте учетную запись запуска от имени Azure (это параметр по умолчанию). Нажмите «Создать» и дождитесь завершения процесса.
Мы собираемся использовать новые модули Az в нашем скрипте. Пожалуйста, загрузите эти модули из в учетную запись автоматизации:
- учетные записи
- Ресурсы
- Вычислить
- Автоматизация
Создание модуля Runbook
В новой новой учетной записи автоматизации щелкните модули Runbook (элемент 1). Список всех доступных модулей Runbook будет отображаться справа. Чтобы создать новый, щелкните Создать модуль Runbook (элемент 2). В новой колонке, отображаемой с правой стороны, пометьте новый модуль Runbook и выберите PowerShell в качестве , нажмите «Создать».
Отобразится новая колонка только для только что созданного модуля Runbook. Щелкните Редактировать. Вы можете скопировать и вставить скрипт из этой статьи или скачать скрипт с моего GitHub здесь.
Мы прорабатываем детали сценария. В первой части скрипта мы определяем единственный параметр $Operation, который может быть или (значение по умолчанию). Мы также импортируем необходимые модули, которые планируем использовать в нашем текущем модуле Runbook.
param ( [string]$Operation = "Off" ) #Importing modules... Import-Module Az.Accounts Import-Module Az.Resources Import-Module Az.Compute Import-Module Az.Automation
Этот раздел взят из шаблона, предоставленного корпорацией Майкрософт для использования AzureRunAsConnection. Он выполняет проверку подлинности текущего RunBook с помощью учетной записи AzureRunAs. После завершения проверки подлинности модуль Runbook получит доступ к плоскости управления Azure, таким образом, доступ к управлению ресурсами с использованием разрешений, доступных для этой учетной записи автоматизации. По умолчанию новые учетные записи получат роль на уровне подписки.
# # Фаза подключения # $connectionName = "AzureRunAsConnection" try { $servicePrincipalConnection = Get-AutomationConnection -Name $connectionName Connect-AzAccount ` -ServicePrincipal ` -TenantId $servicePrincipalConnection.TenantId ` -ApplicationId $servicePrincipalConnection.ApplicationId ` -CertificateThumbprint $servicePrincipalThumbConnection.Cert } catch { if (!$servicePrincipalConnection) { $ErrorMessage = "Соединение $connectionName не найдено." throw $ErrorMessage } else{ Write-Error -Message $_.Exception throw $_.Exception } } В этом разделе мы извлекаем информацию о текущей учетной записи автоматизации на основе тега, назначенного для модуля Runbook (красный раздел). Имея эту исходную информацию, мы можем получить имя тега и значения, которые мы собираемся искать на уровне виртуальной машины для выполнения определенного действия. # # Получение информации о переменной # $vAAccount = Get-AzResource -TagName 'AP6ProjectCode' -TagValue 'AA_PoC' -ResourceType 'Microsoft.Automation/automationAccounts/runbooks' $vTemp = ($vAAccount.Name).Split("/") $ vAAccountName = $vTemp[0] $vRunBook = $vTemp[1] $vTempAA = Get-AzAutomationVariable -AutomationAccountName $vAAccountName -Name "TagName" -ResourceGroupName $vAAccount.ResourceGroupName $vTagName = $vTempAA.value $vTempAA = Get-AzAutomationVariable - AutomationAccountName $vAAccountName -Name "TagValue" -ResourceGroupName $vAAccount.ResourceGroupName $vTagValue = $vTempAA.value Write-Output "=========" Write-Output $vAAccountName Write-Output $vRunBook Write-Output $vTagName Запись-вывод $vTagValue Запись-вывод "========="
В этой последней части скрипта мы ищем все виртуальные машины, которые соответствуют имени тега и значению, которое мы извлекаем из переменных учетной записи автоматизации. Затем мы используем параметр $operation, чтобы понять, будет ли наше действие включать или выключать виртуальные машины, соответствующие критериям.
Мы также проводим некоторые дополнительные тесты. Например, мы проверяем текущее состояние виртуальной машины перед отправкой команды start или stop.
# Тело скрипта $vms = Get-AzResource -ResourceType 'Microsoft.Compute/virtualMachines' -TagName $vTagName -TagValue $vTagValue If ($vms -eq $null) { Write-Output 'В этой подписке не удалось найти виртуальные машины.'' Exit } Else { Write-Output "Мы нашли виртуальные машины. Мы проверим их и, если это возможно, возьмем их $Operation." } if ($Operation -eq "on") { Write-Output "Запуск ресурсов виртуальной машины..." ForEach ($vm in $vms){ Write-Output $vm.Name If ((Get-AZVM -Name $vm.Name -status).PowerState -ne "ВМ работает") { Start-AZVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName Write-Output "-> Статус: ВМ запускается." } Else { Write-Output "-> Статус: ВМ уже запущена." } } } Else { Write-Output 'Stoping the VM Resources...' ForEach ($vm in $vms){ Write-Output $vm.Name If ((Get-AZVM -Name $vm.Name -status).PowerState -ne "ВМ освобождена") { Stop-AZVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force Write-Output "-> Статус: ВМ останавливается." } Else { Write-Output "-> Статус: виртуальная машина уже освобождена." } } }
Последний шаг — сохранить и опубликовать текущий скрипт.
Создание переменных
Вместо создания статического кода в вашем сценарии для поиска имени и значения тега мы решили использовать для сохранения этих значений. Если это изменится в будущем, нет необходимости менять сценарий.
В первой колонке щелкните Variables, добавьте переменную и в новой колонке назначьте имя, тип и значение. Мы создали два: и , как показано на изображении ниже.
Создание расписания
Пока что в нашем путешествии мы создали скрипт и переменные, но они не активны. Наш следующий шаг — создать пару на уровне учетной записи автоматизации. Пожалуйста, повторите шаги ниже, чтобы создать два расписания: и .
В первой колонке учетной записи автоматизации нажмите «Расписания» (элемент 1), «Добавить элемент расписания 2», а в новой колонке (элемент 3) назначьте имя, описание и определите время и повторение для сценария. Нажмите «Создать».
Расписание само по себе не приносит нам никакой пользы. Наш следующий шаг — назначить вновь созданный планировщик нашему runbook.
В основной колонке учетной записи автоматизации щелкните Runbooks и дважды щелкните наш модуль Runbook, то есть PoC-VMMaintenance. В новой колонке нажмите «Расписания» и «Добавить расписание». Мы повторим эти шаги дважды (по одному для каждого расписания).
В новой колонке выберите нужное расписание (элемент 1), а в параметрах и настройках запуска введите для расписания и оставьте пустым или введите для расписания .
Проверка процесса автоматизации
Прежде чем идти за кофе, последнее, что нам нужно сделать, это проверить, работает ли учетная запись автоматизации, как планировалось. Проверьте область работы. Будут перечислены все выполненные расписания, и мы сможем проверить статус, журналы, созданные во время выполнения модуля Runbook.
В приведенном ниже примере мы видим, что виртуальная машина была освобождена как часть процесса.