Запуск скриптов на виртуальных машинах Azure с помощью расширения пользовательских скриптов

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

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

Одной из функций, которую предоставила нам компания Microsoft, является расширение пользовательских скриптов Azure. Расширение пользовательских скриптов – это расширение виртуальной машины Azure, которое агент VM запускает для выполнения произвольного кода PowerShell на ваших виртуальных машинах с использованием API Azure, а не входя в консоль VM или используя удаленное выполнение PowerShell.

Запуск команд таким образом обеспечивает несколько преимуществ. Выполнение команд с помощью расширения пользовательских скриптов Azure в Windows:

  • обеспечивает повышенную безопасность, не требуя открытия сетевых портов для удаленного выполнения PowerShell
  • позволяет легко выполнять код PowerShell при запуске виртуальной машины
  • автоматически передает ресурсы из хранилища Azure на вашу виртуальную машину в рамках процесса предоставления
  • Легкий способ запуска сценариев PowerShell, сохраненных в различных учетных записях хранилища Azure

Включение расширения пользовательского сценария Azure для Windows можно выполнить несколькими способами. В этой статье мы сосредоточимся на включении расширения пользовательского сценария с использованием PowerShell, но также можно включить расширение с использованием шаблона управляющего ресурсами Azure (ARM)

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

Enable-PSRemoting -Force

Давайте создадим расширение пользовательского сценария для выполнения этого

Использование Azure для выполнения сценария на виртуальной машине

Сначала создайте сценарий PowerShell с именем Enable-PSRemoting.ps1 на вашем локальном компьютере с указанной выше командой. Этот сценарий должен выполняться на виртуальной машине Azure. Для этого мы создадим еще один небольшой сценарий PowerShell с именем New-CustomScriptExtension.ps1 для его загрузки в Azure и создания расширения пользовательского сценария для его выполнения. Прежде чем мы слишком углубимся, вам понадобятся несколько элементов:

  • Имя группы ресурсов Azure и имя учетной записи хранилища, в которой будет храниться сценарий
  • Имя контейнера хранения Azure
  • Имя виртуальной машины
  • Имя группы ресурсов Azure, в которой находится виртуальная машина

Этот сценарий можно разделить на два раздела: загрузка небольшого сценария PowerShell в Azure и создание расширения пользовательского сценария. Все остальное необходимо для объединения этих двух процессов

Загрузка сценария PowerShell в Azure

Сначала мы загрузим скрипт Enable-PSRemoting.ps1 в хранилище Azure ($StorageAccountName) внутри контейнера ($ContainerName) в группе ресурсов ($ResourceGroupName).

Copying Enable-PSRemoting.ps1 to Azure
$saParams = @{ 'ResourceGroupName' = $ResourceGroupName 'Name' = $StorageAccountName } $storageContainer = Get-AzureRmStorageAccount @saParams |Get-AzureStorageContainer -Container $ContainerName $bcParams = @{ 'File' = 'C:\Enable-PSRemoting.ps1' 'BlobType' = 'Block' 'Blob' = ' Enable-PSRemoting.ps1' } $storageContainer | Set-AzureStorageBlobContent @bcParams

Запуск расширения пользовательского сценария

При запуске New-CustomScriptExtension.ps1, этот скрипт загрузит скрипт Enable-PSRemoting.ps1 в указанное хранилище Azure.

Теперь, когда скрипт хранится в Azure, вы можете выполнить его с помощью расширения пользовательского сценария для виртуальной машины:

  • Имя: $VMName
  • Группа ресурсов: $rgName
  • Хранилище: $saName
  • Контейнер хранилища: $scName

Откройте текстовый редактор для New-CustomScriptExtension.ps1 и вставьте приведенный ниже пример. При его выполнении будет запущено расширение пользовательского сценария Azure для Windows, которое выполнит скрипт PowerShell Enable-PSRemoting.ps1, загруженный ранее.

New-CustomScriptExtension.ps1
# Получить нужную для настройки виртуальную машину $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $VMName # Получить ключ учетной записи хранилища $key = (Get-AzureRmStorageAccountKey -Name $saName -ResourceGroupName$rgname).Key1 ## Включить расширение пользовательского сценария и выполнить скрипт $scriptParams = @{ 'ResourceGroupName' = $rgName 'VMName' = $VMName 'Name' = 'Enable-PSRemoting.ps1' 'Location' = $vm.Location 'StorageAccountName' = $saName 'StorageAccountKey' = $key 'FileName' = 'Enable-PSRemoting.ps1' 'ContainerName' = $scName 'Run' = 'Enable-PSRemoting.ps1' } Set-AzureRmVMCustomScriptExtension @scriptParams

Summary

Как только этот скрипт завершится, вы можете проверить, что Enable-PSRemoting.ps1 был выполнен на виртуальной машине и удаленное управление PowerShell успешно включено. Теперь вы должны иметь возможность использовать Invoke-Command против вашей виртуальной машины Azure.

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

Source:
https://adamtheautomator.com/azure-run-script-on-vm/