Implantar recursos com modelos do Resource Manager e o Azure PowerShell
Este artigo explica como usar o Azure PowerShell com modelos do Azure Resource Manager (ARM) para implantar recursos no Azure. Se você não estiver familiarizado com os conceitos de implantação e gerenciamento das soluções do Azure, confira Visão geral da implantação de modelos.
Dica
Recomendamos o Bicep porque ele oferece as mesmas funcionalidades que os modelos do ARM e a sintaxe é mais fácil de usar. Para saber mais, confira Implantar recursos com o Bicep e o Azure PowerShell.
Pré-requisitos
Você precisa de um modelo para implantar. Caso não tenha nenhum, baixe e salve um exemplo de modelo no repositório de modelos do Início Rápido do Azure. O nome de arquivo local usado neste artigo é C:\MyTemplates\azuredeploy.json.
Você precisa instalar o Azure PowerShell e se conectar ao Azure:
- Instalar cmdlets do Azure PowerShell em seu computador local. Para obter mais informações, consulte Introdução ao Azure PowerShell.
- Conectar-se ao Azure usando Connect-AZAccount. Se você tiver várias assinaturas do Azure, talvez precise executar também Set-AzContext. Para saber mais, confira Use multiple Azure subscriptions (Usar várias assinaturas do Azure).
Se você não tiver o PowerShell instalado, use o Azure Cloud Shell. Para obter mais informações, confira Implantar modelos ARM a partir do Azure Cloud Shell.
Permissões necessárias
Para implantar um arquivo Bicep ou um modelo do ARM, você precisa de acesso de gravação nos recursos que está implantando e acesso a todas as operações no tipo de recurso Microsoft.Resources/implantações. Por exemplo, para implantar uma máquina virtual, você precisa Microsoft.Compute/virtualMachines/write
e permissões Microsoft.Resources/deployments/*
. A operação do teste de hipóteses tem os mesmos requisitos de permissão.
Para ver uma lista de funções e permissões, consulte Funções interna do Azure.
Escopo da implantação
É possível direcionar a implantação para um grupo de gerenciamento, uma assinatura, um grupo de gerenciamento ou um locatário. Dependendo do escopo da implantação, você usará comandos diferentes.
Para implantar em um grupo de recursos, use New-AzResourceGroupDeployment:
New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>
Para implantar em uma assinatura, use New-AzSubscriptionDeployment, que é um alias do cmdlet
New-AzDeployment
:New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-template>
Para saber mais sobre as implantações de nível de assinatura, confira Criar grupos de recursos e recursos no nível da assinatura.
Para implantar em um grupo de gerenciamento, use New-AzManagementGroupDeployment.
New-AzManagementGroupDeployment -Location <location> -TemplateFile <path-to-template>
Para saber mais sobre implantações de nível de grupo de gerenciamento, confira Criar recursos no nível de grupo de gerenciamento.
Para implantar em um locatário, use New-AzTenantDeployment.
New-AzTenantDeployment -Location <location> -TemplateFile <path-to-template>
Para saber mais sobre implantações de nível de locatário, confira Criar recursos no nível de locatário.
Para cada escopo, o usuário que está implantando o modelo deve ter as permissões necessárias para criar recursos.
Nome da implantação
Você pode escolher um nome para o modelo ARM que será implantado. Esse nome pode ajudar a recuperar a implantação do histórico de implantações. Caso você não forneça um nome à implantação, será usado o nome do arquivo de modelo por padrão. Por exemplo, se você implantar um modelo chamado azuredeploy.json
e não especificar o nome da implantação, ela será chamada de azuredeploy
.
Sempre que você executa uma implantação, é adicionada uma entrada ao histórico de implantações do grupo de recursos com o nome da implantação. Se você executar outra implantação e atribuir o mesmo nome, a entrada anterior será substituída pela implantação atual. Caso você queira manter entradas exclusivas no histórico de implantações, dê a cada implantação um nome exclusivo.
Para criar um nome exclusivo, você pode designar um número aleatório.
$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix
Ou adicionar um valor de data.
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"
Se você executar implantações simultâneas no mesmo grupo de recursos com o mesmo nome de implantação, somente a última implantação será concluída. Todas as implantações com nome idêntico que não tenham sido concluídas serão substituídas pela última implantação. Por exemplo, se você executar uma implantação chamada newStorage
que implanta uma conta de armazenamento denominada storage1
e, ao mesmo tempo, executar outra implantação chamada newStorage
que implanta uma conta de armazenamento denominada storage2
, apenas uma conta de armazenamento será implantada. A conta de armazenamento resultante será denominada storage2
.
No entanto, se você executar uma implantação chamada newStorage
que implanta uma conta de armazenamento denominada storage1
e, logo após a conclusão, executar outra implantação chamada newStorage
que implanta uma conta de armazenamento denominada storage2
, serão geradas duas contas de armazenamento: uma chamada storage1
e outra denominada storage2
. No entanto, apenas uma entrada será registrada no histórico de implantações.
Quando você especifica um nome exclusivo para cada implantação, pode executá-las simultaneamente sem conflitos. Se você executar uma implantação chamada newStorage1
que implanta uma conta de armazenamento denominada storage1
e, ao mesmo tempo, executar outra implantação chamada newStorage2
que implanta uma conta de armazenamento denominada storage2
, serão geradas duas contas de armazenamento e serão registradas duas entradas no histórico de implantações.
Para evitar conflitos com implantações simultâneas e garantir entradas exclusivas no histórico de implantações, atribua a cada implantação um nome exclusivo.
Implantar o modelo local
É possível implantar um modelo armazenado tanto no computador local como externamente. Esta seção descreve a implantação de um modelo local.
Se você estiver implantando em um grupo de recursos que ainda não existe, precisará criá-lo. O nome do grupo de recursos pode incluir somente caracteres alfanuméricos, pontos, sublinhados, hifens e parênteses. Pode ter até 90 caracteres. O nome não pode terminar em ponto.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Para implantar um modelo local, use o parâmetro -TemplateFile
no comando de implantação. O exemplo a seguir também mostra como definir um valor de parâmetro proveniente do modelo.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile <path-to-template>
A implantação pode levar vários minutos para ser concluída.
Implantar modelo remoto
Em vez de armazenar modelos ARM no computador local, talvez você prefira armazená-los em um local externo. É possível armazenar modelos em um repositório de controle de código-fonte (como o GitHub). Ou ainda armazená-los em uma conta de armazenamento do Azure para acesso compartilhado na sua organização.
Observação
Para implantar um modelo ou fazer referência a um modelo vinculado armazenado em um repositório do GitHub privado, consulte uma solução personalizada documentada em Criar uma oferta personalizada e segura portal do Azure. Você pode criar uma função do Azure que efetue pull do token do GitHub do Azure Key Vault.
Se você estiver implantando em um grupo de recursos que ainda não existe, precisará criá-lo. O nome do grupo de recursos pode incluir somente caracteres alfanuméricos, pontos, sublinhados, hifens e parênteses. Pode ter até 90 caracteres. O nome não pode terminar em ponto.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Para implantar um modelo externo, use o parâmetro -TemplateUri
.
New-AzResourceGroupDeployment `
-Name remoteTemplateDeployment `
-ResourceGroupName ExampleGroup `
-TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
O exemplo anterior requer um URI acessível publicamente para o modelo, que funciona para a maioria dos cenários porque seu modelo não deve incluir dados confidenciais. Se você precisar especificar dados confidenciais (como uma senha de administrador), passe esse valor como um parâmetro seguro. No entanto, se você quiser gerenciar o acesso ao modelo, considere a possibilidade de usar especificações de modelo.
Para implantar modelos vinculados remotos com caminho relativo que são agrupados em uma conta de armazenamento, use QueryString
para especificar o token SAS:
New-AzResourceGroupDeployment `
-Name linkedTemplateWithRelativePath `
-ResourceGroupName "myResourceGroup" `
-TemplateUri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" `
-QueryString "$sasToken"
Para obter mais informações, confira Usar caminho relativo para modelos vinculados.
Implantar especificação de modelo
Em vez de implantar um modelo local ou remoto, você pode criar uma especificação de modelo. Trata-se de um recurso na assinatura do Azure que contém um modelo ARM. Ela facilita o compartilhamento seguro do modelo com os usuários na organização. Use o Controle de Acesso Baseado em Função do Azure (Azure RBAC) para conceder acesso à especificação de modelo. Este recurso está atualmente em versão prévia.
Os exemplos a seguir mostram como criar e implantar uma especificação de modelo.
Primeiro, crie a especificação de modelo fornecendo o modelo ARM.
New-AzTemplateSpec `
-Name storageSpec `
-Version 1.0 `
-ResourceGroupName templateSpecsRg `
-Location westus2 `
-TemplateJsonFile ./mainTemplate.json
Em seguida, obtenha a ID da especificação de modelo e implante-a.
$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Versions.Id
New-AzResourceGroupDeployment `
-ResourceGroupName demoRG `
-TemplateSpecId $id
Para obter mais informações, confira Especificações de modelo do Azure Resource Manager.
Visualizar alterações
Antes de implantar o modelo, você pode visualizar as alterações que ele fará no ambiente. Use o teste de hipóteses para conferir se o modelo faz as alterações que você espera. O teste de hipóteses também verifica se há erros no modelo.
Passar valores de parâmetro
Para passar valores de parâmetros, você pode usar parâmetros embutidos ou um arquivo de parâmetros. O arquivo de parâmetro pode ser um arquivo de parâmetros Bicep ou um arquivo de parâmetros JSON.
Parâmetros embutidos
Para passar parâmetros inline, forneça os nomes do parâmetro com o comando New-AzResourceGroupDeployment
. Por exemplo, para passar uma string e array para um template, use:
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleString "inline string" `
-exampleArray $arrayParam
Você pode usar o parâmetro TemplateParameterObject
para passar por uma hashtable que contém os parâmetros do modelo.
$params = @{
exampleString = "inline string"
exampleArray = "value1", "value2"
}
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-TemplateParameterObject $params
Você também pode obter o conteúdo do arquivo e fornecer esse conteúdo como um parâmetro embutido.
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
-exampleArray $arrayParam
Obtendo um valor de parâmetro de um arquivo é útil quando você precisa fornecer valores de configuração. Por exemplo, você pode fornecer valores de cloud-init para uma máquina virtual Linux.
Se você precisar passar uma matriz de objetos, crie tabelas de hash no PowerShell e adicione-as a uma matriz. Passe essa matriz como um parâmetro durante a implantação.
$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleArray $subnetArray
Arquivos de parâmetro JSON
Em vez de passar parâmetros como valores embutidos no script, talvez seja mais fácil usar um arquivo JSON que contenha os valores de parâmetro. O arquivo de parâmetro pode ser um arquivo local ou um arquivo externo com um URI acessível.
Para saber mais sobre o arquivo de parâmetro, confira Criar arquivo de parâmetro do Resource Manager.
Para passar um arquivo de parâmetros local, use o parâmetro TemplateParameterFile
:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile <path-to-template> `
-TemplateParameterFile c:\MyTemplates\storage.parameters.json
Para passar um arquivo de parâmetros externo, use o parâmetro TemplateParameterUri
:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json `
-TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json
Para obter mais informações sobre o arquivo de parâmetros, consulte Criar arquivo de parâmetros do Gerenciador de Recursos.
Arquivos do parâmetro Bicep
Com o Azure PowerShell versão 10.4.0, ou posterior e a CLI do Bicep versão 0.22.6 ou posterior, você pode implantar um arquivo de modelo ARM usando um arquivo de parâmetro Bicep. Com a instrução using
dentro do arquivo de parâmetros Bicep, não é necessário fornecer a opção -TemplateFile
ao especificar um arquivo de parâmetro Bicep para a opção -TemplateParameterFile
.
O exemplo a seguir mostra um arquivo de parâmetros chamado storage.bicepparam. O arquivo está no mesmo diretório em que o comando é executado.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateParameterFile storage.bicepparam
Para obter mais informações sobre o arquivo de parâmetros Bicep, consulte Arquivo de parâmetros Bicep.
Próximas etapas
- Para reverter para uma implantação bem-sucedida quando você receber um erro, confira Reverter em caso de erro para uma implantação bem-sucedida.
- Para especificar como lidar com os recursos existentes no grupo de recursos, mas que não estão definidos no modelo, confira Modos de implantação do Azure Resource Manager.
- Para entender como definir parâmetros no modelo, confira Noções básicas sobre a estrutura e a sintaxe de modelos ARM.
- Para obter informações sobre como implantar um modelo que exija um token SAS, confira Implantar modelo ARM privado com token SAS.