Развертывание шаблона Azure Resource Manager в runbook PowerShell службы автоматизации
Модуль Runbook PowerShell службы автоматизации, который развертывает ресурс Azure с помощью шаблона Azure Resource Manager. Шаблоны дают возможность использовать службу автоматизации Azure для автоматизации развертывания ресурсов Azure. Можно хранить шаблоны Resource Manager в центральном безопасном сетевом расположении, например в службе хранилища Azure.
В этой статье мы создадим runbook PowerShell, использующий шаблон Resource Manager, который расположен в службе хранилища Azure, для развертывания новой учетной записи хранения Azure.
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Учетная запись службы автоматизации Azure, которой назначено хотя бы одно управляемое удостоверение. Дополнительные сведения об этом см. в статье Использование управляемого удостоверения, назначаемого пользователем, для учетной записи службы автоматизации Azure.
Модули Az:
Az.Accounts
,Az.ManagedServiceIdentity
,Az.Resources
иAz.Storage
. импортированные в учетную запись службы автоматизации. Дополнительные сведения см. в разделе Импорт модулей Az.Учетная запись службы хранилища Azure для хранения шаблона Resource Manager.
Azure PowerShell, установленный на локальном компьютере. Дополнительные сведения о получении Azure PowerShell см. в статье Установка модуля Azure PowerShell. Вам также потребуется модуль Az.ManagedServiceIdentity.
Az.ManagedServiceIdentity
— это модуль предварительной версии, не входящий в состав модуля Az. Чтобы установить его, запуститеInstall-Module -Name Az.ManagedServiceIdentity
Назначьте разрешения управляемым удостоверениям для выполнения задач, связанных с хранилищем в Runbook.
Войдите в Azure в интерактивном режиме с помощью командлета Connect-AzAccount и следуйте инструкциям.
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
Укажите соответствующие значения для перечисленных ниже переменных, а затем выполните скрипт.
$resourceGroup = "resourceGroup" $automationAccount = "automationAccount" $storageAccount = "storageAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity" $storageTemplate = "path\storageTemplate.json" $runbookScript = "path\runbookScript.ps1"
Назначьте роль
reader
управляемому удостоверению, назначаемого системой, для выполнения командлетаGet-AzUserAssignedIdentity
.$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Назначьте роль
Storage Account Contributor
управляемому удостоверению, назначаемого пользователем, для действий с учетной записью хранения.$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
В этом примере используется шаблон Resource Manager, который развертывает новую учетную запись служба хранилища Azure. Создайте локальный файл, который вызывается storageTemplate.json
, а затем вставьте следующий код:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageAccountName')]",
"apiVersion": "2018-02-01",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "Storage",
"properties": {
}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
}
}
}
Используйте PowerShell для создания общей папки Azure и отправки storageTemplate.json
. Инструкции по созданию общей папки и передаче файла на портале Azure см. в разделе Приступая к работе с файлами Azure в Windows.
Выполните следующие команды, чтобы создать общую папку и отправить шаблон Resource Manager в общую папку.
# Get the access key for your storage account
$key = Get-AzStorageAccountKey -ResourceGroupName $resourceGroup -Name $storageAccount
# Create an Azure Storage context using the first access key
$context = New-AzStorageContext -StorageAccountName $storageAccount -StorageAccountKey $key[0].value
# Create a file share named 'resource-templates' in your Azure Storage account
$fileShare = New-AzStorageShare -Name 'resource-templates' -Context $context
# Add the storageTemplate.json file to the new file share
Set-AzStorageFileContent -ShareName $fileShare.Name -Context $context -Source $storageTemplate
Создайте скрипт PowerShell, который получает storageTemplate.json
файл из служба хранилища Azure и развертывает шаблон для создания новой учетной записи служба хранилища Azure. Создайте локальный файл, который вызывается runbookScript.ps1
, а затем вставьте следующий код:
param (
[Parameter(Mandatory=$true)]
[string]
$resourceGroup,
[Parameter(Mandatory=$true)]
[string]
$storageAccount,
[Parameter(Mandatory=$true)]
[string]
$storageAccountKey,
[Parameter(Mandatory=$true)]
[string]
$storageFileName,
[Parameter(Mandatory=$true)]
[string]
$userAssignedManagedIdentity
)
# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process
# Connect to Azure with user-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context
$identity = Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup `
-Name $userAssignedManagedIdentity `
-DefaultProfile $AzureContext
$AzureContext = (Connect-AzAccount -Identity -AccountId $identity.ClientId).context
# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription `
-DefaultProfile $AzureContext
#Set the parameter values for the Resource Manager template
$Parameters = @{
"storageAccountType"="Standard_LRS"
}
# Create a new context
$Context = New-AzStorageContext -StorageAccountName $storageAccount -StorageAccountKey $storageAccountKey
Get-AzStorageFileContent `
-ShareName 'resource-templates' `
-Context $Context `
-path 'storageTemplate.json' `
-Destination 'C:\Temp' -Force
$TemplateFile = Join-Path -Path 'C:\Temp' -ChildPath $storageFileName
# Deploy the storage account
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroup `
-TemplateFile $TemplateFile `
-TemplateParameterObject $Parameters
Используйте PowerShell для импорта модуля Runbook в учетную запись службы автоматизации и публикации модуля Runbook. Сведения об импорте и публикации модулей Runbook в портал Azure см. в разделе "Управление модулями Runbook" в служба автоматизации Azure.
Чтобы импортировать runbookScript.ps1
в свою учетную запись автоматизации как runbook PowerShell, выполните следующие команды PowerShell.
$importParams = @{
Path = $runbookScript
ResourceGroupName = $resourceGroup
AutomationAccountName = $automationAccount
Type = "PowerShell"
}
Import-AzAutomationRunbook @importParams
# Publish the runbook
$publishParams = @{
ResourceGroupName = $resourceGroup
AutomationAccountName = $automationAccount
Name = "runbookScript"
}
Publish-AzAutomationRunbook @publishParams
Теперь запустим runbook, вызвав командлет Start-AzAutomationRunbook. Сведения о том, как запустить runbook на портале Azure, см. в разделе Запуск модуля Runbook в службе автоматизации Azure.
В консоли PowerShell выполните следующие команды.
# Set up the parameters for the runbook
$runbookParams = @{
resourceGroup = $resourceGroup
storageAccount = $storageAccount
storageAccountKey = $key[0].Value # We got this key earlier
storageFileName = "storageTemplate.json"
userAssignedManagedIdentity = $userAssignedManagedIdentity
}
# Set up parameters for the Start-AzAutomationRunbook cmdlet
$startParams = @{
resourceGroup = $resourceGroup
AutomationAccountName = $automationAccount
Name = "runbookScript"
Parameters = $runbookParams
}
# Start the runbook
$job = Start-AzAutomationRunbook @startParams
После запуска runbook вы можете проверить его состояние по значению свойства объекта задания $job.Status
.
Модуль runbook получает шаблон Resource Manager и использует его для развертывания новой учетной записи хранения Azure. Вы увидите, что учетная запись хранения создана, выполнив следующую команду:
Get-AzStorageAccount
- Дополнительные сведения о шаблонах Resource Manager см. в статье Общие сведения о диспетчере ресурсов Azure.
- Чтобы приступить к работе со службой хранилища Azure, изучите раздел Введение в хранилище Microsoft Azure.
- Другие полезные runbook службы автоматизации Azure приведены в разделе Использование runbook и других модулей службы автоматизации Azure.