Distribuera en Azure Resource Manager i en Automation PowerShell-runbook
Du kan skriva en Automation PowerShell-runbook som distribuerar en Azure-resurs med hjälp av 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, säker plats, till exempel Azure Storage.
I den här artikeln skapar vi en PowerShell-runbook som använder en Resource Manager som lagras i Azure Storage för att distribuera ett Azure Storage konto.
Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Förutsättningar
Ett Azure Automation-konto med minst en användar tilldelad hanterad identitet. Mer information finns i Använda en användar tilldelad hanterad identitet för ett Azure Automation konto.
Az-moduler:
Az.AccountsAz.ManagedServiceIdentity, , ochAz.ResourcesAz.Storage. importerats till Automation-kontot. Mer information finns i Importera Az-moduler.Azure Storage konto där mallen Resource Manager ska lagras.
Azure PowerShell installerat på en lokal dator. Se Installera Azure PowerShell modulen för information om hur du hämtar Azure PowerShell. Du behöver även modulen Az.ManagedServiceIdentity.
Az.ManagedServiceIdentityär en förhandsversionsmodul och installeras inte som en del av Az-modulen. Installera det 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 hjälp Anslut-AzAccount-cmdleten och följ instruktionerna.
# 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 till
readerden system tilldelade 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 till
Storage Account Contributorden användar tilldelade 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 som distribuerar ett nytt Azure Storage konto. Skapa en lokal fil med storageTemplate.json namnet 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 Portal finns i Kom igång med Azure Files på Windows.
Kör följande kommandon för att skapa en filresurs och ladda upp Resource Manager mallen till den 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 filen Azure Storage och distribuerar mallen för storageTemplate.json att skapa ett nytt Azure Storage konto. Skapa en lokal fil med runbookScript.ps1 namnet 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 Portal finns i Hantera runbooks i Azure Automation.
Om du runbookScript.ps1 vill importera 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 Portal finns i Starting a runbook in 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 mallen Resource Manager och använder den för att distribuera ett nytt Azure Storage konto. Du kan se att det nya lagringskontot har skapats genom att köra följande kommando:
Get-AzStorageAccount
Nästa steg
- Mer information om Resource Manager finns i Azure Resource Manager översikt.
- Kom igång med Azure Storage i Introduktion till Azure Storage.
- Om du vill hitta Azure Automation användbara runbooks kan du gå till Använda runbooks och moduler i Azure Automation.