Distribuera en Azure Resource Manager-mall i en Automation PowerShell-runbook
Du kan skriva en Automation PowerShell-runbook som distribuerar en Azure-resurs med hjälp av en Azure Resource Manager-mall. Med mallar kan du använda Azure Automation för att automatisera distributionen av dina Azure-resurser. Du kan underhålla dina Resource Manager mallar på en central och säker plats, till exempel Azure Storage.
I den här artikeln skapar vi en PowerShell-runbook som använder en Resource Manager-mall som lagras i Azure Storage för att distribuera ett nytt Azure Storage-konto.
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Förutsättningar
Ett Azure Automation-konto med minst en användartilldelad hanterad identitet. Mer information finns i Använda en användartilldelad hanterad identitet för ett Azure Automation-konto.
Az-moduler:
Az.Accounts
,Az.ManagedServiceIdentity
,Az.Resources
ochAz.Storage
. importerad i Automation-kontot. Mer information finns i Importera Az-moduler.Azure Storage-konto där Resource Manager mall ska lagras.
Azure PowerShell installerat på en lokal dator. Mer information om hur du får Azure PowerShell finns i Installera Azure PowerShell-modulen. Du behöver också modulen Az.ManagedServiceIdentity.
Az.ManagedServiceIdentity
är en förhandsgranskningsmodul och inte installerad som en del av Az-modulen. Installera den genom att köraInstall-Module -Name Az.ManagedServiceIdentity
Tilldela behörigheter till hanterade identiteter
Tilldela behörigheter till de hanterade identiteterna för att utföra lagringsrelaterade uppgifter i Runbook.
Logga in på Azure interaktivt med cmdleten Anslut-AzAccount och följ anvisningarna.
# 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>
Ange ett lämpligt värde för variablerna nedan och kör sedan skriptet.
$resourceGroup = "resourceGroup" $automationAccount = "automationAccount" $storageAccount = "storageAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity" $storageTemplate = "path\storageTemplate.json" $runbookScript = "path\runbookScript.ps1"
Tilldela rollen
reader
till den systemtilldelade hanterade identiteten för att köra cmdletenGet-AzUserAssignedIdentity
.$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Tilldela rollen
Storage Account Contributor
till den användartilldelade hanterade identiteten för åtgärder mot lagringskontot.$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
Skapa Resource Manager-mallen
I det här exemplet använder du en Resource Manager-mall som distribuerar ett nytt Azure Storage-konto. Skapa en lokal fil med namnet storageTemplate.json
och klistra sedan in följande kod:
{
"$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')]"
}
}
}
Spara mallen Resource Manager i Azure Files
Använd PowerShell för att skapa en Azure-filresurs och ladda upp storageTemplate.json
. Anvisningar om hur du skapar en filresurs och laddar upp en fil i Azure-portalen finns i Komma igång med Azure Files i Windows.
Kör följande kommandon för att skapa en filresurs och ladda upp Resource Manager-mallen till filresursen.
# 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
Skapa PowerShell-runbookskriptet
Skapa ett PowerShell-skript som hämtar storageTemplate.json
filen från Azure Storage och distribuerar mallen för att skapa ett nytt Azure Storage-konto. Skapa en lokal fil med namnet runbookScript.ps1
och klistra sedan in följande kod:
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
Importera och publicera runbooken till ditt Azure Automation-konto
Använd PowerShell för att importera runbooken till ditt Automation-konto och publicera sedan runbooken. Information om hur du importerar och publicerar runbooks i Azure-portalen finns i Hantera runbooks i Azure Automation.
Om du vill importera runbookScript.ps1
till ditt Automation-konto som en PowerShell-runbook kör du följande PowerShell-kommandon:
$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
Starta runbook
Nu startar vi runbooken genom att anropa cmdleten Start-AzAutomationRunbook . Information om hur du startar en runbook i Azure-portalen finns i Starta en runbook i Azure Automation.
Kör följande kommandon i PowerShell-konsolen:
# 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
När runbooken har körts kan du kontrollera dess status genom att hämta egenskapsvärdet för jobbobjektet $job.Status
.
Runbooken hämtar Resource Manager-mallen och använder den för att distribuera ett nytt Azure Storage-konto. Du kan se att det nya lagringskontot skapades genom att köra följande kommando:
Get-AzStorageAccount
Nästa steg
- Mer information om Resource Manager-mallar finns i Översikt över Azure Resource Manager.
- Information om hur du kommer igång med Azure Storage finns i Introduktion till Azure Storage.
- Mer information om hur du hittar andra användbara Azure Automation-runbooks finns i Använda runbooks och moduler i Azure Automation.