Implantar recursos com o Bicep e o Azure PowerShell

Este artigo explica como usar o Azure PowerShell com arquivos Bicep para implantar seus recursos no Azure. Se você não estiver familiarizado com os conceitos de implantação e gerenciamento de suas soluções do Azure, consulte Visão geral do Bicep.

Pré-requisitos

Você precisa de um arquivo Bicep para implantar. O arquivo deve ser local.

Você precisa do Azure PowerShell e estar conectado ao Azure:

Se você não tiver o PowerShell instalado, poderá usar o Azure Cloud Shell. Para obter mais informações, consulte Implantar arquivos Bicep do Azure Cloud Shell.

Permissões obrigatórias

Para implementar um ficheiro Bicep ou modelo do ARM, precisa de acesso de escrita nos recursos que está a implementar e acesso a todas as operações no tipo de recurso Microsoft.Resources/deployments. Por exemplo, para implantar uma máquina virtual, você precisa de Microsoft.Compute/virtualMachines/write permissões Microsoft.Resources/deployments/* . A operação hipotética tem os mesmos requisitos de permissão.

Para obter uma lista de funções e permissões, veja Funções incorporadas do Azure.

Âmbito da implementação

Você pode direcionar sua implantação para um grupo de recursos, assinatura, grupo de gerenciamento ou locatário. Dependendo do escopo da implantação, você usa comandos diferentes.

  • Para implantar em um grupo de recursos, use New-AzResourceGroupDeployment:

    New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-bicep>
    
  • Para implantar em uma assinatura, use New-AzSubscriptionDeployment, que é um alias do New-AzDeployment cmdlet:

    New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-bicep>
    

    Para obter mais informações sobre implantações no nível de assinatura, consulte Criar grupos de recursos e recursos no nível de assinatura.

  • Para implantar em um grupo de gerenciamento, use New-AzManagementGroupDeployment.

    New-AzManagementGroupDeployment -ManagementGroupId <management-group-id> -Location <location> -TemplateFile <path-to-bicep>
    

    Para obter mais informações sobre implantações no nível do grupo de gerenciamento, consulte Criar recursos no nível do grupo de gerenciamento.

  • Para implantar em um locatário, use New-AzTenantDeployment.

    New-AzTenantDeployment -Location <location> -TemplateFile <path-to-bicep>
    

    Para obter mais informações sobre implantações no nível do locatário, consulte Criar recursos no nível do locatário.

Para cada escopo, o usuário que implanta o modelo deve ter as permissões necessárias para criar recursos.

Implantar arquivo Bicep local

Você pode implantar um arquivo Bicep de sua máquina local ou um que é armazenado externamente. Esta seção descreve a implantação de um arquivo Bicep local.

Se você estiver implantando em um grupo de recursos que não existe, crie o grupo de recursos. O nome do grupo de recursos só pode incluir caracteres alfanuméricos, pontos, sublinhados, hífenes e parênteses. Pode ter até 90 caracteres. O nome não pode terminar em um ponto.

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

Para implantar um arquivo Bicep local, use a -TemplateFile opção no comando deployment.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile <path-to-bicep>

A implantação pode levar vários minutos para ser concluída.

Implantar arquivo Bicep remoto

Atualmente, o Azure PowerShell não oferece suporte à implantação de arquivos Bicep remotos. Use a CLI do Bicep para criar o arquivo Bicep em um modelo JSON e, em seguida, carregue o arquivo JSON para o local remoto.

Parâmetros

Para passar valores de parâmetro, você pode usar parâmetros embutidos ou um arquivo de parâmetros. O arquivo de parâmetros pode ser um arquivo de parâmetros Bicep ou um arquivo de parâmetros JSON.

Parâmetros em linha

Para passar parâmetros embutidos, forneça os nomes do parâmetro com o New-AzResourceGroupDeployment comando. Por exemplo, para passar uma cadeia de caracteres e uma matriz para um arquivo Bicep, use:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -exampleString "inline string" `
  -exampleArray $arrayParam

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-bicep> `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

Obter um valor de parâmetro de um arquivo é útil quando você precisa fornecer valores de configuração. Por exemplo, você pode fornecer valores 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-bicep> `
  -exampleArray $subnetArray

Arquivos de parâmetros do bíceps

Em vez de passar parâmetros como valores embutidos em seu script, você pode achar mais fácil usar um arquivo de parâmetros, um .bicepparam arquivo ou um arquivo de parâmetros JSON, que contém os valores de parâmetro. O arquivo de parâmetros do Bicep deve ser um arquivo local.

Com o Azure PowerShell versão 10.4.0 ou posterior e a CLI do Bicep versão 0.22.X ou superior, você pode implantar um arquivo Bicep utilizando um arquivo de parâmetro Bicep. Com a using instrução dentro do arquivo de parâmetros Bicep, não há necessidade de fornecer o -TemplateFile switch ao especificar um arquivo de parâmetro Bicep para o -TemplateParameterFile switch.

O exemplo a seguir mostra um arquivo de parâmetros chamado storage.bicepparam. O arquivo está no mesmo diretório onde o comando é executado.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateParameterFile storage.bicepparam

Para obter mais informações sobre o arquivo de parâmetros, consulte Criar arquivo de parâmetros do Gerenciador de Recursos.

Arquivos de parâmetros JSON

O arquivo de parâmetros JSON pode ser um arquivo local ou um arquivo externo com um URI acessível. Para obter mais informações sobre o arquivo de parâmetros, consulte Criar arquivo de parâmetros do Gerenciador de Recursos.

Para passar um arquivo de parâmetros locais, use o TemplateParameterFile switch com um arquivo de parâmetros JSON:

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\BicepFiles\storage.bicep `
  -TemplateParameterFile c:\BicepFiles\storage.parameters.json

Para passar um arquivo de parâmetros externos, use o TemplateParameterUri parâmetro:

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\BicepFiles\storage.bicep `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json

O TemplateParameterUri parâmetro não suporta .bicepparam arquivos, ele só suporta arquivos de parâmetros JSON.

Você pode usar parâmetros embutidos e um arquivo de parâmetros de localização na mesma operação de implantação. Para obter mais informações, consulte Precedência de parâmetros.

Pré-visualizar alterações

Antes de implantar seu arquivo Bicep, você pode visualizar as alterações que o arquivo Bicep fará em seu ambiente. Use a operação hipotética para verificar se o arquivo Bicep faz as alterações esperadas. O What-if também valida o arquivo Bicep em busca de erros.

Implantar especificações de modelo

Atualmente, o Azure PowerShell não oferece suporte à criação de especificações de modelo fornecendo arquivos Bicep. No entanto, você pode criar um arquivo Bicep com o recurso Microsoft.Resources/templateSpecs para implantar uma especificação de modelo. O exemplo Criar especificação de modelo mostra como criar uma especificação de modelo em um arquivo Bicep. Você também pode criar seu arquivo Bicep para JSON usando a CLI do Bicep e, em seguida, criar uma especificação de modelo com o modelo JSON.

Nome da implementação

Ao implantar um arquivo Bicep, você pode dar um nome à implantação. Esse nome pode ajudá-lo a recuperar a implantação do histórico de implantação. Se você não fornecer um nome para a implantação, o nome do arquivo Bicep será usado. Por exemplo, se você implantar um Bicep nomeado main.bicep e não especificar um nome de implantação, a implantação será nomeada main.

Sempre que você executa uma implantação, uma entrada é adicionada ao histórico de implantação do grupo de recursos com o nome da implantação. Se você executar outra implantação e lhe der o mesmo nome, a entrada anterior será substituída pela implantação atual. Se você quiser manter entradas exclusivas no histórico de implantação, dê a cada implantação um nome exclusivo.

Para criar um nome exclusivo, você pode atribuir um número aleatório.

$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix

Ou adicione 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 o mesmo nome que não foram concluídas são substituídas pela última implantação. Por exemplo, se você executar uma implantação nomeada newStorage que implanta uma conta de armazenamento chamada storage1, e ao mesmo tempo executar outra implantação nomeada newStorage que implanta uma conta de armazenamento chamada storage2, você implantará apenas uma conta de armazenamento. A conta de armazenamento resultante é denominada storage2.

No entanto, se você executar uma implantação nomeada newStorage que implanta uma conta de armazenamento chamada storage1, e imediatamente após sua conclusão executar outra implantação nomeada newStorage que implanta uma conta de armazenamento chamada storage2, então você terá duas contas de armazenamento. Um é chamado storage1, e o outro é chamado storage2. Mas, você só tem uma entrada no histórico de implantação.

Ao especificar um nome exclusivo para cada implantação, você pode executá-los simultaneamente sem conflito. Se você executar uma implantação nomeada newStorage1 que implanta uma conta de armazenamento chamada storage1e, ao mesmo tempo, executar outra implantação nomeada newStorage2 que implanta uma conta de armazenamento chamada storage2, terá duas contas de armazenamento e duas entradas no histórico de implantação.

Para evitar conflitos com implantações simultâneas e garantir entradas exclusivas no histórico de implantação, dê a cada implantação um nome exclusivo.

Próximos passos