Published on

July 1, 2020

Установка DBATools с помощью расширения пользовательского сценария Azure VM

Проблема: Мы используем виртуальные машины Azure IaaS и хотим убедиться, что наши серверы имеют полезные инструменты и утилиты. Мы хотим обеспечить согласованность того, что мы развертываем, и убедиться, что ничего не пропущено. У нас есть необходимость хранить и обновлять конфигурационные сценарии в одном месте и отслеживать историю. Как мы можем достичь этого, минимизируя нашу административную нагрузку и необходимость выполнять дополнительные задачи в процессе сборки?

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

Я твердо верю, что при развертывании сервера, где используется SQL Server, DBATools должен быть установлен по умолчанию. Независимо от того, является ли это SQL Server, приложение или Jump Box, наличие DBATools для управления и устранения неполадок является обязательным.

Сценарий установки DBATools

Вот сценарий PowerShell, который мы будем использовать для установки DBATools:

# Проверяем, установлен ли NuGet, если нет, устанавливаем, если версия неверная, то обновляем.
$MinNuGetVersion = [Version]"2.8.5.201"
$NuGet = Get-PackageProvider -ListAvailable | Where-Object Name -EQ "NuGet"
$DBATools = Get-InstalledModule | Where-Object Name -EQ "DBATools"

if(!$NuGet) {
    Write-Host "NuGet не установлен, устанавливаем."
    Install-PackageProvider -Name NuGet -MinimumVersion $MinNuGetVersion -Force
}
elseif ($NuGet.Version -LT $MinNuGetVersion) {
    Write-Host "Nuget установлен, неверная версия, обновляем."
    Install-PackageProvider -Name NuGet -MinimumVersion $MinNuGetVersion -Force
}

# Теперь устанавливаем модуль DBATools PowerShell.
if(!$DBATools) {
    Write-Host "Установка DBATools."
    Install-Module -Name DBATools -Scope AllUsers -Force
}

Копию этого сценария можно скачать здесь.

Хранение сценария в хранилище Azure Blob

После создания сценария нам нужно загрузить его в хранилище Azure Blob. Мы можем выбрать использование репликации хранилища с геораспределением для повышения отказоустойчивости. Нам также нужно создать контейнер в учетной записи хранилища для хранения наших сценариев.

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

Развертывание виртуальной машины и расширения сценария

После создания и размещения сценария мы можем приступить к развертыванию виртуальной машины и вызову этого сценария для завершения установки. Мы будем использовать PowerShell для определения расширения сценария, а также для развертывания виртуальной машины. Скриптовое развертывание – единственный способ выполнить это действие, так как, на момент написания, его нельзя использовать в портале.

Вот пример определения расширения сценария:

$ResourceGroupName = "MSSQLTips-BlogPosts"
$Location = "NorthEurope"
$StorageAccountName = "vmbuildcustomscripts"
$ContainerName = "dbatools"
$StorageKey = "PbNzth21NfCju2Qb-------------------REDACTED-----------------------qoaggs/TYvWVEWA=="
$ScriptFileName = "Install-DBATools.ps1"

$CustomScriptExtensionProperties = @{
    VMName = $VmName
    Name = "InstallDBATools-BlobStore"
    ResourceGroupName = $ResourceGroupName
    Location = $Location
    StorageAccountName = $StorageAccountName
    StorageAccountKey = $StorageKey
    ContainerName = $ContainerName
    FileName = $ScriptFileName
    Run = "Install-DBATools.ps1"
}
Set-AzureRmVMCustomScriptExtension @CustomScriptExtensionProperties

После успешного развертывания виртуальной машины мы можем развернуть расширение пользовательского сценария, которое установит DBATools для нас. Оно загрузит сценарий из хранилища Azure Blob, а затем выполнит сценарий для завершения установки.

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

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

Вывод

Используя PowerShell и расширения пользовательского сценария Azure VM, мы легко можем развернуть полезные инструменты в рамках нашего процесса автоматизации. Это помогает обеспечить повторяемость и согласованность развертывания виртуальных машин, что упрощает жизнь тем,

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.