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 que você use a Automação do Azure para automatizar a implantação de seus recursos do Azure. Você pode manter seus modelos do Gerenciador de Recursos em um local central seguro, como o Armazenamento do 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 você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Uma conta da Automação do Azure com pelo menos uma identidade gerenciada atribuída pelo usuário. Para obter mais informações, confira Como usar uma identidade gerenciada atribuída pelo usuário para uma conta da Automação do Azure.
Módulos Az:
Az.Accounts
,Az.ManagedServiceIdentity
,Az.Resources
eAz.Storage
. importados para a conta da Automação. Para obter mais informações, confira Importar módulos Az.Conta de Armazenamento do Microsoft Azure na qual será armazenado o modelo do Resource Manager.
Azure PowerShell instalado em um computador local. Confira 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 é instalado como parte do módulo AZ. Para instalar, executeInstall-Module -Name Az.ManagedServiceIdentity
Atribuir permissões a identidades gerenciadas
Atribua permissões às identidades gerenciadas para realizar as tarefas relacionadas ao armazenamento no Runbook.
Entre no Azure de modo interativo 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 Gerenciador de Recursos
Neste exemplo, você usa um modelo do Gerenciador de Recursos que implanta uma nova conta de Armazenamento do Microsoft Azure. Crie um arquivo local chamado storageTemplate.json
e cole o código a seguir:
{
"$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')]"
}
}
}
Salvar o modelo do Resource Manager nos Arquivos do Azure
Use o PowerShell para criar um compartilhamento de arquivos do Azure e carregar o storageTemplate.json
. 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 seguintes comandos para criar um compartilhamento de arquivos e carregar o modelo do Resource Manager para o 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 de runbook do PowerShell
Crie um script do PowerShell que obtém o arquivo storageTemplate.json
do Armazenamento do Azure e implante o modelo para criar uma nova conta de Armazenamento do Azure. Crie um arquivo local chamado runbookScript.ps1
e cole o código a seguir:
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 em sua conta de Automaçã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 importar e publicar runbooks no portal do Azure, confira Gerenciar runbooks na Automação do Azure.
Para importar runbookScript.ps1
para sua conta de Automação como 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 vamos iniciar o runbook chamando o cmdlet Start-AzAutomationRunbook. Para obter informações sobre como iniciar um runbook no portal do Azure, consulte Iniciar 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 de trabalho $job.Status
.
O runbook obtém o modelo do Resource Manager e o utiliza 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óximas etapas
- Para saber mais sobre os modelos do Resource Manager, confira Visão geral do Azure Resource Manager.
- Para começar a usar o Armazenamento do Azure, consulte Introdução ao Armazenamento do Azure.
- Para localizar outros runbooks úteis da Automação do Azure, confira Usar runbooks e módulos na Automação do Azure.