Wdrażanie szablonu usługi Azure Resource Manager w elemecie Runbook programu PowerShell usługi Automation
Możesz napisać element Runbook programu PowerShell usługi Automation, który wdraża zasób platformy Azure przy użyciu szablonu usługi Azure Resource Manager. Szablony umożliwiają używanie usługi Azure Automation do automatyzacji wdrażania zasobów platformy Azure. Szablony usługi Resource Manager można przechowywać w centralnej, bezpiecznej lokalizacji, takiej jak usługa Azure Storage.
W tym artykule utworzymy element Runbook programu PowerShell, który używa szablonu usługi Resource Manager przechowywanego w usłudze Azure Storage w celu wdrożenia nowego konta usługi Azure Storage .
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wymagania wstępne
Konto usługi Azure Automation z co najmniej jedną tożsamością zarządzaną przypisaną przez użytkownika. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej przypisanej przez użytkownika dla konta usługi Azure Automation.
Moduły Az:
Az.Accounts
, ,Az.ManagedServiceIdentity
Az.Resources
iAz.Storage
. zaimportowane do konta usługi Automation. Aby uzyskać więcej informacji, zobacz Importuj moduły platformy Azure.Konto usługi Azure Storage, na którym ma być przechowywany szablon usługi Resource Manager.
Program Azure PowerShell zainstalowany na komputerze lokalnym. Zobacz Instaluj moduł programu Azure PowerShell, aby uzyskać informacje o tym, jak pobrać program Azure PowerShell. Będziesz również potrzebować modułu Az.ManagedServiceIdentity.
Az.ManagedServiceIdentity
jest modułem w wersji zapoznawczej i nie jest zainstalowany w ramach modułu Az. Aby go zainstalować, uruchom polecenieInstall-Module -Name Az.ManagedServiceIdentity
Przypisywanie uprawnień do tożsamości zarządzanych
Przypisz uprawnienia do tożsamości zarządzanych, aby wykonywać zadania związane z magazynem w elemecie Runbook.
Zaloguj się interaktywnie na platformie Azure przy użyciu polecenia cmdlet Połączenie-AzAccount i postępuj zgodnie z instrukcjami.
# 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>
Podaj odpowiednią wartość dla poniższych zmiennych, a następnie wykonaj skrypt.
$resourceGroup = "resourceGroup" $automationAccount = "automationAccount" $storageAccount = "storageAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity" $storageTemplate = "path\storageTemplate.json" $runbookScript = "path\runbookScript.ps1"
Przypisz rolę
reader
do przypisanej przez system tożsamości zarządzanej, aby wykonać polecenie cmdletGet-AzUserAssignedIdentity
.$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Przypisz rolę
Storage Account Contributor
do tożsamości zarządzanej przypisanej przez użytkownika w celu wykonania akcji względem konta magazynu.$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
Tworzenie szablonu usługi Resource Manager
W tym przykładzie użyjesz szablonu usługi Resource Manager, który wdraża nowe konto usługi Azure Storage. Utwórz plik lokalny o nazwie storageTemplate.json
, a następnie wklej następujący 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')]"
}
}
}
Zapisz szablon usługi Resource Manager w usłudze Azure Files
Użyj programu PowerShell, aby utworzyć udział plików platformy Azure i przekazać plik storageTemplate.json
. Aby uzyskać instrukcje dotyczące tworzenia udziału plików i przekazywania pliku w witrynie Azure Portal, zobacz Rozpoczynanie pracy z usługą Azure Files w systemie Windows.
Uruchom następujące polecenia, aby utworzyć udział plików i przekazać szablon usługi Resource Manager do tego udziału plików.
# 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
Utwórz skrypt elementu Runbook programu PowerShell
Utwórz skrypt programu PowerShell, który pobiera storageTemplate.json
plik z usługi Azure Storage i wdraża szablon w celu utworzenia nowego konta usługi Azure Storage. Utwórz plik lokalny o nazwie runbookScript.ps1
, a następnie wklej następujący 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
Importuj i publikuj element Runbook na swoim koncie usługi Azure Automation
Za pomocą programu PowerShell zaimportuj element Runbook do konta usługi Automation, a następnie opublikuj element Runbook. Aby uzyskać informacje na temat importowania i publikowania elementów Runbook w witrynie Azure Portal, zobacz Zarządzanie elementami Runbook w usłudze Azure Automation.
Aby zaimportować runbookScript.ps1
do konta usługi Automation jako element Runbook programu PowerShell, uruchom następujące polecenia programu 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
Uruchamianie elementu runbook
Teraz uruchomimy element Runbook, wywołując polecenie cmdlet Start-AzAutomationRunbook . Aby uzyskać informacje na temat uruchamiania elementu Runbook w witrynie Azure Portal, zobacz Uruchamianie elementu Runbook w usłudze Azure Automation.
Uruchom następujące polecenia w konsoli programu 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
Po uruchomieniu elementu Runbook możesz sprawdzić jego stan, pobierając wartość właściwości obiektu $job.Status
zadania .
Element Runbook pobiera szablon usługi Resource Manager i używa go do wdrożenia nowego konta usługi Azure Storage. Nowe konto magazynu zostało utworzone, uruchamiając następujące polecenie:
Get-AzStorageAccount
Następne kroki
- Aby dowiedzieć się więcej na temat szablonów usługi Resource Manager, zobacz Omówienie usługi Azure Resource Manager.
- Aby rozpocząć pracę z usługą Azure Storage, zobacz Wprowadzenie do usługi Azure Storage.
- Aby znaleźć inne przydatne elementy Runbook usługi Azure Automation, zobacz Używanie elementów Runbook i modułów w usłudze Azure Automation.