Criar um Recurso do Azure usando scripts do Azure PowerShell

Concluído

No modo interativo, o PowerShell permite escrever comandos e executá-los imediatamente.

Lembre-se de que a meta geral no exemplo de CRM (gerenciamento de relacionamento com o cliente) é criar três ambientes de teste contendo máquinas virtuais. Você usa grupos de recursos para garantir que as VMs sejam organizadas em ambientes separados: um para teste de unidade, outro para teste de integração e outro para teste de aceitação. Você precisará criar os grupos de recursos apenas uma vez, portanto o modo interativo do PowerShell neste caso de uso é uma boa opção.

Quando você insere um comando no PowerShell, ele faz a correspondência com um cmdlet e executa a ação solicitada. Primeiro, examinaremos alguns dos comandos comuns que você pode usar e, então, veremos como instalar o Suporte do Azure para PowerShell.

O que são os cmdlets do PowerShell?

Um comando do PowerShell é chamado de um cmdlet (pronunciado "comând-lét"). Um cmdlet é um comando que manipula um único recurso. O termo cmdlet destina-se a implicar "comando pequeno". Por convenção, os autores de cmdlets são incentivados a manter os cmdlets simples e de uso único.

O produto base do PowerShell é fornecido com os cmdlets que funcionam com recursos tais como sessões e trabalhos em segundo plano. Você pode adicionar módulos à sua instalação do PowerShell para obter cmdlets que manipulam outros recursos. Por exemplo, há módulos de terceiros para trabalhar com FTP, administrar seu sistema operacional, acessar o sistema de arquivos e assim por diante.

Os cmdlets seguem uma convenção de nomenclatura de verbo-substantivo. Por exemplo, Get-Process, Format-Table e Start-Service. Também há uma convenção para escolha de verbo: "get" para recuperar dados, "set" para inserir ou atualizar dados, "format" para formatar dados, "out" para produzir uma saída direta para um destino e assim por diante.

Os autores de cmdlets são incentivados a incluir um arquivo de ajuda para cada cmdlet. O cmdlet Get-Help exibe o arquivo de ajuda para qualquer cmdlet. Por exemplo, para obter ajuda com o cmdlet Get-ChildItem, insira a seguinte instrução em uma sessão do Windows PowerShell:

Get-Help -Name Get-ChildItem -Detailed

O que é um módulo do PowerShell?

Os cmdlets são fornecidos em módulos. Um Módulo PowerShell é uma biblioteca de vínculo dinâmico (DLL) que inclui o código para processar cada cmdlet disponível. Você carrega cmdlets no PowerShell carregando o módulo no qual eles estão contidos. Você pode obter uma lista de módulos carregados usando o comando Get-Module:

Get-Module

Este comando produz algo semelhante ao seguinte:

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Binary     1.0.0.1    PackageManagement                   {Find-Package, Find-PackageProvider, Get-Package, Get-Pack...
Script     1.0.0.1    PowerShellGet                       {Find-Command, Find-DscResource, Find-Module, Find-RoleCap...
Script     2.0.0      PSReadline                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PS...

O que é o módulo Az PowerShell?

Az é o nome formal do módulo do Azure PowerShell que contém cmdlets para trabalhar com os recursos do Azure. Ele contém centenas de cmdlets que permitem controlar quase todos os aspectos de cada recurso do Azure. Você pode trabalhar com grupos de recursos, armazenamento, máquinas virtuais, Microsoft Entra ID, contêineres, aprendizado de máquina e assim por diante. O módulo Az é um componente de código aberto disponível no GitHub.

Observação

Você pode ter visto ou usado comandos do Azure PowerShell que utilizavam um formato -AzureRM. Como os módulos do AZ PowerShell agora têm todas as funcionalidades dos módulos do AzureRM PowerShell e muito mais, vamos desativar os módulos do AzureRM PowerShell em 29 de fevereiro de 2024. Para evitar interrupções de serviço, atualize seus scripts que usam módulos do AzureRM PowerShell para usar módulos do AZ PowerShell em 29 de fevereiro de 2024. Para atualizar seus scripts automaticamente, siga o guia de início rápido.

Instalar o módulo do Az PowerShell

O módulo Az PowerShell fica disponível em um repositório global chamado Galeria do PowerShell. Você pode instalar o módulo em seu computador local usando o cmdlet Install-Module.

Para instalar o módulo do Azure Az PowerShell mais recente, execute os seguintes comandos:

  1. Abra o menu Iniciar e digite PowerShell.

  2. Selecione o ícone PowerShell.

  3. Digite o comando a seguir e pressione Enter:

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery
    

O comando anterior instala o módulo para o usuário atual (controlado pelo parâmetro Scope).

O comando depende do NuGet para recuperar componentes. Portanto, dependendo da versão instalada, você poderá ver um prompt para baixar e instalar a versão mais recente do NuGet.

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\<username>\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import
 the NuGet provider now?
 [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

Insira Y e pressione Enter.

Por padrão, a Galeria do PowerShell não está configurada como um repositório confiável para o PowerShellGet. Cada vez que você executar uma instalação de um repositório não confiável, será solicitado que você confirme se deseja instalar o módulo com a seguinte saída:

You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):

Insira Y ou A e, em seguida, pressione Enter.

Falha na execução do script

Dependendo da configuração de segurança, Import-Module pode falhar mais ou menos como a saída abaixo:

import-module : File C:\Program Files\PowerShell\Modules\az\6.3.0\Az.psm1 cannot be loaded
because running scripts is disabled on this system. For more information, see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ import-module Az
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

Ele também poderá falhar e ficar sem resposta. Nesse caso, pressione Ctrl+C para interromper o programa.

Normalmente, os dois comportamentos indicam que a política de execução é "Restrita", o que significa que não é possível executar módulos baixados de uma fonte externa, incluindo a Galeria do PowerShell. Verifique executando o cmdlet Get-ExecutionPolicy. Se o cmdlet retornar "Restrito", então:

  1. Use o cmdlet Set-ExecutionPolicy a fim de alterar a política para "RemoteSigned":

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    Será solicitado que você forneça permissão:

    The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
    you to the security risks described in the about_Execution_Policies help topic at
    https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
    
  2. Insira Y ou A e, em seguida, pressione Enter.

  3. No prompt de comando, use a seta para cima no teclado e execute novamente o comando Install-Module para o Azure.

Você deve conseguir ver o carregamento do módulo Az PowerShell. Após a conclusão, você poderá usar Import-Module para carregar os cmdlets.

A instalação do Azure PowerShell no Linux ou no macOS usa os mesmos comandos.

  1. Em um terminal, execute o comando a seguir para iniciar o PowerShell.

    pwsh
    
  2. Para instalar o Azure PowerShell, execute o comando a seguir no prompt do PowerShell.

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
    
  3. Se for perguntado se você confia em módulos da PSGallery, responda Sim ou Sim para tudo.

Atualizar um módulo do PowerShell

Você pode receber uma mensagem de aviso ou erro indicando que uma versão do módulo Azure PowerShell já está instalada. Nesse caso, você pode emitir o comando a seguir para atualizar para a versão mais recente.

Update-Module -Name Az

Assim como ocorre com o cmdlet Install-Module, responda Sim ou Sim para Tudo quando precisar confiar no módulo. Use também o comando Update-Module para reinstalar um módulo se estiver tendo problemas com ele.

Exemplo: como criar um grupo de recursos com o Azure PowerShell

Depois de instalar o módulo do Azure, você poderá começar a trabalhar com o Azure. Vamos fazer uma tarefa comum: criar um Grupo de Recursos. Como você sabe, podemos usar os grupos de recursos para administrar recursos relacionados simultaneamente. A criação de um grupo de recursos é uma das primeiras tarefas que você terá de realizar ao iniciar uma nova solução do Azure.

Há quatro etapas que você precisa executar:

  1. Importe os cmdlets do Azure.

  2. Conecte-se à sua assinatura do Azure.

  3. Crie o grupo de recursos.

  4. Verifique se a criação foi bem-sucedida.

A ilustração a seguir mostra uma visão geral dessas etapas:

Diagram showing the steps to create a resource group.

Cada etapa corresponde a um cmdlet diferente.

Importar os cmdlets do Azure

Iniciando com o PowerShell 3.0, os módulos são carregados automaticamente quando você usa um cmdlet dentro do módulo. Não é mais necessário importar manualmente os módulos do PowerShell, a menos que você tenha alterado as configurações de carregamento automático do módulo padrão.

Conectar

Se você estiver trabalhando com uma instalação local do Azure PowerShell, precisará fazer a autenticação para executar comandos do Azure. O cmdlet Connect-AzAccount solicita as credenciais do Azure e, em seguida, conecta-se à sua assinatura do Azure. Ele tem muitos parâmetros opcionais, mas, se tudo o que você precisa é de um prompt interativo, não há a necessidade de parâmetros:

Connect-AzAccount

Trabalhar com assinaturas

Se você ainda não está familiarizado com o Azure, provavelmente tem apenas uma assinatura única. No entanto, se você já usa o Azure por algum tempo, talvez já tenha criado várias assinaturas do Azure. Você pode configurar o Azure PowerShell para executar comandos em uma assinatura específica.

Você só pode estar em uma assinatura de cada vez. Use o cmdlet Get-AzContext para determinar qual assinatura está ativa. Se não for o correto, você poderá alterar as assinaturas usando outro cmdlet.

  1. Obtenha uma lista de todos os nomes de assinatura em sua conta com o comando Get-AzSubscription.

  2. Altere a assinatura passando o nome da que deve ser selecionada.

Set-AzContext -Subscription '00000000-0000-0000-0000-000000000000'

Se você precisar procurar a ID da Assinatura, vá para o portal do Azure e selecione Assinaturas na página inicial.

Obter uma lista de todos os grupos de recursos

Você pode recuperar uma lista de todos os grupos de recursos na assinatura ativa.

Get-AzResourceGroup

Para obter uma exibição mais concisa, você pode enviar a saída de Get-AzResourceGroup para o cmdlet Format-Table usando um pipe '|'.

Get-AzResourceGroup | Format-Table

A saída é parecida com esta:

ResourceGroupName                  Location       ProvisioningState Tags TagsTable ResourceId
-----------------                  --------       ----------------- ---- --------- ----------
cloud-shell-storage-southcentralus southcentralus Succeeded                        /subscriptions/00000000-0000-0000...
ExerciseResources                  eastus         Succeeded                        /subscriptions/00000000-0000-0000...

Criar um grupo de recursos

Como você sabe, ao criar recursos no Azure, você sempre os coloca em um grupo de recursos para fins de gerenciamento. Um grupo de recursos geralmente é uma das primeiras coisas que você cria ao iniciar um novo aplicativo.

Crie grupos de recursos usando o cmdlet New-AzResourceGroup. Você precisa especificar um nome e uma localização. O nome deve ser exclusivo dentro de sua assinatura. A localização determina o local onde os metadados do seu grupo de recursos são armazenados (o que pode ser importante para você por motivos de conformidade). Você pode usar cadeias de caracteres como "Oeste dos EUA", "Norte da Europa" ou "Oeste da Índia" para especificar o local. Assim como ocorre com a maioria dos cmdlets do Azure, o New-AzResourceGroup tem muitos parâmetros opcionais. No entanto, a sintaxe principal é:

New-AzResourceGroup -Name <name> -Location <location>

Observação

Lembre-se de que trabalharemos na área restrita ativa do Azure, que cria o Grupo de Recursos para você. Use o comando anterior se preferir trabalhar em sua assinatura.

Verificar os recursos

O Get-AzResource lista os recursos do Azure, o que é útil aqui para verificar se a criação dos recursos e do grupo de recursos foi bem-sucedida.

Get-AzResource

Semelhante ao comando Get-AzResourceGroup, você pode obter uma exibição mais concisa por meio do cmdlet Format-Table:

Get-AzResource | Format-Table

Você também pode filtrá-lo por grupos de recursos específicos a fim de listar somente os recursos associados ao grupo:

Get-AzResource -ResourceGroupName ExerciseResources

Crie uma Máquina Virtual do Azure

Outra tarefa comum que você pode fazer com o PowerShell é criar VMs.

O Azure PowerShell fornece o cmdlet New-AzVm para criar uma máquina virtual. O cmdlet tem vários parâmetros para permitir que ela manipule o grande número de definições de configuração de VM. A maioria dos parâmetros tem valores padrão razoáveis, portanto, só precisamos especificar cinco itens:

  • ResourceGroupName: o grupo de recursos no qual a nova VM deve ser colocada.
  • Nome: o nome da VM no Azure.
  • Localização: a localização geográfica onde a VM deve ser provisionada.
  • Credencial: um objeto que contém o nome de usuário e a senha para a conta do administrador da VM. Nós usamos o cmdlet Get-Credential. Esse cmdlet solicita um nome de usuário e uma senha e os empacota em um objeto de credencial.
  • Imagem: a imagem do sistema operacional a ser usada para a VM, que normalmente é uma distribuição do Linux ou Windows Server.
   New-AzVm
       -ResourceGroupName <resource group name>
       -Name <machine name>
       -Credential <credentials object>
       -Location <location>
       -Image <image name>

Forneça esses parâmetros diretamente para o cmdlet, conforme mostrado no exemplo anterior. Como alternativa, você pode usar outros cmdlets para configurar a máquina virtual, como Set-AzVMOperatingSystem, Set-AzVMSourceImage, Add-AzVMNetworkInterface e Set-AzVMOSDisk.

Aqui está um exemplo que coloca o cmdlet Get-Credential junto com o parâmetro -Credential na cadeia de caracteres:

New-AzVM -Name MyVm -ResourceGroupName ExerciseResources -Credential (Get-Credential) ...

O sufixo AzVM é específico de comandos baseados em VM no PowerShell. Há vários outros que você pode usar:

Comando Descrição
Remove-AzVM Exclui uma VM do Azure
Start-AzVM Inicia uma VM parada
Stop-AzVM Interrompe uma VM em execução
Restart-AzVM Reinicia uma VM
Update-AzVM Atualiza a configuração de uma VM

Exemplo: como obter informações para uma VM

É possível listar as VMs em sua assinatura com o comando Get-AzVM -Status. Esse comando também dá suporte à inserção de uma VM específica incluindo a propriedade -Name. Aqui, nós a atribuímos a uma variável do PowerShell:

$vm = Get-AzVM  -Name MyVM -ResourceGroupName ExerciseResources

O interessante é que agora sua VM é um objeto com o qual você pode interagir. Por exemplo, você pode fazer alterações no objeto e efetuar push das alterações de volta para o Azure usando o comando Update-AzVM:

$ResourceGroupName = "ExerciseResources"
$vm = Get-AzVM  -Name MyVM -ResourceGroupName $ResourceGroupName
$vm.HardwareProfile.vmSize = "Standard_DS3_v2"

Update-AzVM -ResourceGroupName $ResourceGroupName  -VM $vm

O modo interativo no PowerShell é adequado para tarefas únicas. Em nosso exemplo, usamos o mesmo grupo de recursos para todo o tempo de vida do projeto, o que significa que é razoável criá-lo de modo interativo. O modo interativo é muitas vezes mais rápido e fácil para esta tarefa do que escrever um script e executar esse script exatamente uma vez.