Implantar um modelo do Azure Resource Manager em um runbook do PowerShell de Automação
Você pode escrever um runbook do PowerShell de Automação que implanta um recurso do Azure usando um modelo do Azure Resource Manager. Os modelos permitem-lhe utilizar a Automatização do Azure para automatizar a implementação dos seus recursos do Azure. Pode manter os seus modelos do Resource Manager numa localização central e segura, como o Armazenamento do Microsoft Azure.
Neste artigo, criamos um runbook do PowerShell que usa um modelo do Gerenciador de Recursos armazenado no Armazenamento do Azure para implantar uma nova conta de Armazenamento do Azure.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Uma conta da Automatização do Azure com, pelo menos, uma identidade gerida atribuída pelo utilizador. Para obter mais informações, consulte Usando uma identidade gerenciada atribuída pelo usuário para uma conta de Automação do Azure.
Módulos Az:
Az.Accounts
,Az.ManagedServiceIdentity
,Az.Resources
, eAz.Storage
. Importado para a conta de Automatização. Para mais informações, consulte Importar módulos Az.Conta de Armazenamento do Microsoft Azure na qual armazenar o modelo do Resource Manager.
Azure PowerShell instalado num computador local. Consulte Instalar o Módulo do Azure PowerShell para obter informações sobre como obter o Azure PowerShell. Você também precisará do módulo Az.ManagedServiceIdentity.
Az.ManagedServiceIdentity
é um módulo de visualização e não está instalado como parte do módulo Az. Para instalá-lo, executeInstall-Module -Name Az.ManagedServiceIdentity
Atribuir permissões a identidades geridas
Atribua permissões às identidades gerenciadas para executar as tarefas relacionadas ao armazenamento no Runbook.
Entre no Azure interativamente usando o cmdlet Connect-AzAccount e siga as instruções.
# 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>
Forneça um valor apropriado para as variáveis abaixo e, em seguida, execute o script.
$resourceGroup = "resourceGroup" $automationAccount = "automationAccount" $storageAccount = "storageAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity" $storageTemplate = "path\storageTemplate.json" $runbookScript = "path\runbookScript.ps1"
Atribua a função
reader
à identidade gerenciada atribuída pelo sistema para executar o cmdletGet-AzUserAssignedIdentity
.$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Atribua a função
Storage Account Contributor
à identidade gerenciada atribuída pelo usuário para ações em relação à conta de armazenamento.$UAMI_ID = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI_ID ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Storage Account Contributor"
Criar o modelo do Resource Manager
Neste exemplo, você usa um modelo do Gerenciador de Recursos que implanta uma nova conta de Armazenamento do Azure. Crie um arquivo local chamado storageTemplate.json
e, em seguida, cole o seguinte código:
{
"$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')]"
}
}
}
Guardar o modelo do Resource Manager nos Ficheiros do Azure
Use o PowerShell para criar um compartilhamento de arquivos do Azure e carregar storageTemplate.json
o . Para obter instruções sobre como criar um compartilhamento de arquivos e carregar um arquivo no portal do Azure, consulte Introdução aos Arquivos do Azure no Windows.
Execute os comandos a seguir para criar um compartilhamento de arquivos e carregar o modelo do Gerenciador de Recursos para esse compartilhamento de arquivos.
# 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
Criar o script do runbook do PowerShell
Crie um script do PowerShell que obtém o storageTemplate.json
arquivo do Armazenamento do Azure e implanta o modelo para criar uma nova conta de Armazenamento do Azure. Crie um arquivo local chamado runbookScript.ps1
e, em seguida, cole o seguinte código:
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
Importar e publicar o runbook para a sua conta de Automatização do Azure
Use o PowerShell para importar o runbook para sua conta de automação e, em seguida, publique o runbook. Para obter informações sobre como importar e publicar runbooks no portal do Azure, consulte Gerenciar runbooks na Automação do Azure.
Para importar runbookScript.ps1
para sua conta de automação como um runbook do PowerShell, execute os seguintes comandos do 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
Iniciar o runbook
Agora, iniciamos o runbook chamando o cmdlet Start-AzAutomationRunbook . Para obter informações sobre como iniciar um runbook no portal do Azure, consulte Iniciando um runbook na Automação do Azure.
Execute os seguintes comandos no console do 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
Depois que o runbook for executado, você poderá verificar seu status recuperando o valor da propriedade do objeto $job.Status
de trabalho.
O runbook obtém o modelo do Gerenciador de Recursos e o usa para implantar uma nova conta de Armazenamento do Azure. Você pode ver que a nova conta de armazenamento foi criada executando o seguinte comando:
Get-AzStorageAccount
Próximos passos
- Para saber mais sobre os modelos do Resource Manager, consulte Visão geral do Azure Resource Manager.
- Para começar a usar o Armazenamento do Azure, consulte Introdução ao Armazenamento do Azure.
- Para encontrar outros runbooks úteis da Automação do Azure, consulte Usar runbooks e módulos na Automação do Azure.