Een Azure Resource Manager-sjabloon implementeren in een Automation PowerShell-runbook
U kunt een Automation PowerShell-runbook schrijven waarmee een Azure-resource wordt geïmplementeerd met behulp van een Azure Resource Manager-sjabloon. Met sjablonen kunt u Azure Automation gebruiken om de implementatie van uw Azure-resources te automatiseren. U kunt uw Resource Manager-sjablonen onderhouden op een centrale, veilige locatie, zoals Azure Storage.
In dit artikel maken we een PowerShell-runbook dat gebruikmaakt van een Resource Manager-sjabloon die is opgeslagen in Azure Storage om een nieuw Azure Storage-account te implementeren.
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Vereisten
Een Azure Automation-account met ten minste één door de gebruiker toegewezen beheerde identiteit. Zie Een door de gebruiker toegewezen beheerde identiteit gebruiken voor een Azure Automation-account voor meer informatie.
Az-modules:
Az.Accounts
,Az.ManagedServiceIdentity
,Az.Resources
enAz.Storage
. Geïmporteerd in het Automation-account. Zie Az-modules importeren voor meer informatie.Azure Storage-account waarin de Resource Manager-sjabloon moet worden opgeslagen.
Azure PowerShell geïnstalleerd op een lokale computer. Zie De Azure PowerShell-module installeren voor meer informatie over het verkrijgen van Azure PowerShell. U hebt ook module Az.ManagedServiceIdentity nodig.
Az.ManagedServiceIdentity
is een preview-module en niet geïnstalleerd als onderdeel van de Az-module. Als u deze wilt installeren, voert u uitInstall-Module -Name Az.ManagedServiceIdentity
Machtigingen toewijzen aan beheerde identiteiten
Wijs machtigingen toe aan de beheerde identiteiten om de opslaggerelateerde taken in het Runbook uit te voeren.
Meld u interactief aan bij Azure met behulp van de cmdlet Verbinding maken-AzAccount en volg de instructies.
# 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>
Geef een geschikte waarde op voor de onderstaande variabelen en voer vervolgens het script uit.
$resourceGroup = "resourceGroup" $automationAccount = "automationAccount" $storageAccount = "storageAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity" $storageTemplate = "path\storageTemplate.json" $runbookScript = "path\runbookScript.ps1"
Wijs de rol
reader
toe aan de door het systeem toegewezen beheerde identiteit om de cmdletGet-AzUserAssignedIdentity
uit te voeren.$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Wijs de rol
Storage Account Contributor
toe aan de door de gebruiker toegewezen beheerde identiteit voor acties voor het opslagaccount.$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
Het Resource Manager-sjabloon maken
In dit voorbeeld gebruikt u een Resource Manager-sjabloon waarmee een nieuw Azure Storage-account wordt geïmplementeerd. Maak een lokaal bestand met de naam storageTemplate.json
en plak de volgende code:
{
"$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')]"
}
}
}
De Resource Manager-sjabloon opslaan in Azure Files
Gebruik PowerShell om een Azure-bestandsshare te maken en te uploaden storageTemplate.json
. Zie Aan de slag met Azure Files in Windows voor instructies over het maken van een bestandsshare en het uploaden van een bestand in Azure Portal.
Voer de volgende opdrachten uit om een bestandsshare te maken en de Resource Manager-sjabloon naar die bestandsshare te uploaden.
# 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
Het PowerShell-runbookscript maken
Maak een PowerShell-script waarmee het storageTemplate.json
bestand wordt opgehaald uit Azure Storage en de sjabloon wordt geïmplementeerd om een nieuw Azure Storage-account te maken. Maak een lokaal bestand met de naam runbookScript.ps1
en plak de volgende code:
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
Het runbook importeren en publiceren in uw Azure Automation-account
Gebruik PowerShell om het runbook te importeren in uw Automation-account en publiceer vervolgens het runbook. Zie Runbooks beheren in Azure Automation voor meer informatie over het importeren en publiceren van runbooks in Azure Portal.
Als u wilt importeren runbookScript.ps1
in uw Automation-account als een PowerShell-runbook, voert u de volgende PowerShell-opdrachten uit:
$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
Het runbook starten
Nu starten we het runbook door de cmdlet Start-AzAutomationRunbook aan te roepen. Zie Een runbook starten in Azure Automation voor meer informatie over het starten van een runbook in Azure Portal.
Voer de volgende opdrachten uit in de PowerShell-console:
# 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
Nadat het runbook is uitgevoerd, kunt u de status ervan controleren door de eigenschapswaarde van het taakobject $job.Status
op te halen.
Het runbook haalt de Resource Manager-sjabloon op en gebruikt deze om een nieuw Azure Storage-account te implementeren. U kunt zien dat het nieuwe opslagaccount is gemaakt door de volgende opdracht uit te voeren:
Get-AzStorageAccount
Volgende stappen
- Zie het overzicht van Azure Resource Manager voor meer informatie over Resource Manager-sjablonen.
- Zie Inleiding tot Azure Storage om aan de slag te gaan met Azure Storage.
- Zie Runbooks en modules gebruiken in Azure Automation om andere nuttige Azure Automation-runbooks te vinden.