Управление переменными в службе автоматизации Azure

Ресурсы-контейнеры переменных — это значения, которые доступны для всех модулей runbook и конфигураций DSC в учетной записи службы автоматизации. Вы можете управлять ими на портале Azure, посредством PowerShell, в модуле runbook или в конфигурации DSC.

Переменные автоматизации полезны в следующих случаях:

  • совместное использование значения несколькими модулями runbook или конфигурациями DSC;

  • совместное использование значения несколькими заданиями из одного модуля runbook или конфигурации DSC;

  • управление значением, используемым модулями runbook или конфигурациями DSC, с портала или из командной строки PowerShell. Примером может быть набор типичных элементов конфигурации, таких как список имен виртуальных машин, определенная группа ресурсов, доменное имя AD и т. д.

Служба автоматизации Azure сохраняет переменные, чтобы они были доступны даже после сбоя модуля runbook или конфигурации DSC. Это также позволяет модулю runbook или конфигурации DSC задать значение, которое может использоваться другим модулем или этим же модулем либо конфигурацией DSC при следующем запуске.

Служба автоматизации Azure хранит каждую зашифрованную переменную безопасным образом. При создании переменной можно указать способ ее шифрования и хранения с использованием службы автоматизации Azure в качестве безопасного ресурса. После создания переменной вы не сможете изменить ее состояние шифрования, не создав переменную снова. Если у вас есть переменные учетной записи службы автоматизации, в которых хранятся еще не зашифрованные конфиденциальные данные, удалите их и создайте снова в виде зашифрованных переменных. Рекомендация Microsoft Defender для облака заключается в шифровании всех служба автоматизации Azure переменных, как описано в переменных учетной записи службы автоматизации. Если у вас есть незашифрованные переменные, которые нужно исключить из этой рекомендации по безопасности, выполните указания, приведенные в статье Исключение ресурса из рекомендаций и оценки безопасности, чтобы создать правило исключения.

Примечание.

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

Типы переменных

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

  • Строка
  • Целое
  • Дата и время
  • Логическое значение
  • Null;

Переменная не ограничена указанным типом данных. Если значение должно иметь другой тип, следует задать его с помощью Windows PowerShell. Если указать Not defined, значение переменной будет задано равным NULL. Значение задается с помощью командлета Set-AzAutomationVariable или внутреннего командлета Set-AutomationVariable. Используйте Set-AutomationVariable в runbook, предназначенных для запуска в среде песочницы Azure, или в гибридной рабочей роли Runbook для Windows.

Создать или изменить значение сложной переменной на портале Azure невозможно. Однако с помощью Windows PowerShell можно указать значение любого типа. Сложные типы извлекаются в виде Newtonsoft.Json.Linq.JProperty для объекта сложного типа вместо типа PSObject PSCustomObject.

Можно сохранить несколько значений в отдельной переменной, создав массив или хэш-таблицу и сохранив ее в переменную.

Примечание.

Длина значения переменной с именем виртуальной машины не может превышать 80 символов. Длина значения переменной с именем группы ресурсов не может превышать 90 символов. См. статью Правила и ограничения именования для ресурсов Azure.

Командлеты PowerShell для доступа к переменным

Командлеты, представленные в следующей таблице, используются для создания переменных службы автоматизации с помощью PowerShell и управления ими. Они поставляются в составе модулей Az.

Командлет Description
Get-AzAutomationVariable Получает значение существующей переменной. Если значение простого типа, возвращается тот же тип. Если это сложный тип, возвращается тип PSCustomObject. 1
New-AzAutomationVariable Создает новую переменную и устанавливает ее значение.
Remove-AzAutomationVariable Удаляет существующую переменную.
Set-AzAutomationVariable Получает значение существующей переменной.

1 Этот командлет нельзя использовать для получения значения зашифрованной переменной. Единственный способ получить такое значение — использовать внутренний командлет Get-AutomationVariable в модуле runbook или конфигурации DSC. Например, чтобы увидеть значение зашифрованной переменной, можно создать модуль runbook для получения переменной, а затем записать ее в выходной поток:

$encryptvar = Get-AutomationVariable -Name TestVariable
Write-output "The encrypted value of the variable is: $encryptvar"

Внутренние командлеты для доступа к переменным

Внутренние командлеты в приведенной ниже таблице используются для доступа к переменным в модулях runbook и конфигурациях DSC. Они входят в состав глобального модуля Orchestrator.AssetManagement.Cmdlets. Дополнительные сведения см. в статье Внутренние командлеты.

Внутренний командлет Description
Get-AutomationVariable Получает значение существующей переменной.
Set-AutomationVariable Получает значение существующей переменной.

Примечание.

Не следует использовать переменные в параметре Name командлета Get-AutomationVariable, вызываемого из runbook или конфигурации DSC. Использование переменной может усложнить обнаружение зависимостей между runbook и переменными службы автоматизации во время разработки.

Функции Python для доступа к переменным

Функции, приведенные в таблице ниже, используются для доступа к переменным в runbook для Python 2 и 3. Модули runbook для Python 3 сейчас доступны в предварительной версии.

Функции Python Description
automationassets.get_automation_variable Получает значение существующей переменной.
automationassets.set_automation_variable Получает значение существующей переменной.

Примечание.

Импортируйте модуль automationassets в верхнюю часть модуля runbook на Python, чтобы получить доступ к функциям ресурса.

Создание и получение переменной

Примечание.

Если требуется отменить шифрование для переменной, необходимо удалить переменную и создать ее повторно как незашифрованную.

Создание и получение переменной с помощью портала Azure

  1. В учетной записи службы автоматизации в области слева выберите Переменные в разделе Общие ресурсы.
  2. На странице Переменные выберите Добавить переменную.
  3. Введите данные на странице Новая переменная и выберите Создать, чтобы сохранить новую переменную.

Примечание.

После сохранения зашифрованной переменной ее нельзя просмотреть на портале. Ее можно только изменять.

Создание и получение переменной в Windows PowerShell

В модуле runbook или конфигурации DSC для создания переменной и задания ее начального значения используется командлет New-AzAutomationVariable. Если переменная зашифрована, в вызове должен использоваться параметр Encrypted. Скрипт может получить значение переменной с помощью Get-AzAutomationVariable.

Примечание.

Скрипт PowerShell не может получить зашифрованное значение. Единственный способ сделать это — использовать внутренний командлет Get-AutomationVariable.

В приведенном ниже примере показано, как создать строковую переменную, а затем вернуть ее значение.

$rgName = "ResourceGroup01"
$accountName = "MyAutomationAccount"
$variableValue = "My String"

New-AzAutomationVariable -ResourceGroupName "ResourceGroup01" 
-AutomationAccountName "MyAutomationAccount" -Name 'MyStringVariable' `
-Encrypted $false -Value 'My String'
$string = (Get-AzAutomationVariable -ResourceGroupName "ResourceGroup01" `
-AutomationAccountName "MyAutomationAccount" -Name 'MyStringVariable').Value

В приведенном ниже примере показано, как создать переменную сложного типа и вернуть ее свойства. В этом случае используется объект виртуальной машины из Get-AzVM с указанием подмножества ее свойств.

$rgName = "ResourceGroup01"
$accountName = "MyAutomationAccount"

$vm = Get-AzVM -ResourceGroupName "ResourceGroup01" -Name "VM01" | Select Name, Location, Extensions
New-AzAutomationVariable -ResourceGroupName "ResourceGroup01" -AutomationAccountName "MyAutomationAccount" -Name "MyComplexVariable" -Encrypted $false -Value $vm

$vmValue = Get-AzAutomationVariable -ResourceGroupName "ResourceGroup01" `
-AutomationAccountName "MyAutomationAccount" -Name "MyComplexVariable"

$vmName = $vmValue.Value.Name
$vmTags = $vmValue.Value.Tags

Примеры текстовых модулей runbook

В приведенном ниже примере показано, как задать и получить переменную в текстовом модуле runbook. В этом примере предполагается создание целочисленных переменных с именами numberOfIterations и numberOfRunnings и строковой переменной с именем sampleMessage.

$rgName = "ResourceGroup01"
$accountName = "MyAutomationAccount"

$numberOfIterations = Get-AutomationVariable -Name "numberOfIterations"
$numberOfRunnings = Get-AutomationVariable -Name "numberOfRunnings"
$sampleMessage = Get-AutomationVariable -Name "sampleMessage"

Write-Output "Runbook has been run $numberOfRunnings times."

for ($i = 1; $i -le $numberOfIterations; $i++) {
    Write-Output "$i`: $sampleMessage"
}
Set-AutomationVariable -Name numberOfRunnings -Value ($numberOfRunnings += 1)

Примеры графических модулей runbook

В графическом runbook можно добавлять действия для внутренних командлетов Get-AutomationVariable и Set-AutomationVariable. Щелкните правой кнопкой мыши каждую переменную в области "Библиотека" графического редактора и выберите нужное действие.

Add variable to canvas

На рисунке ниже приведен пример действий для добавления в переменную простого значения в графическом модуле runbook. В этом примере действие для Get-AzVM извлекает одну виртуальную машину Azure и сохраняет имя компьютера в существующей строковой переменной службы автоматизации. Не имеет значения, является ли ссылка конвейером или последовательностью, так как в выходных данных ожидается только одно значение.

Set simple variable

Следующие шаги