Bem-vindo a esta aula sobre PowerShell e a nuvem! O PowerShell, tradicionalmente uma ferramenta de automação para sistemas Windows, evoluiu para se tornar uma poderosa aliada no gerenciamento de recursos em nuvem. Com a crescente adoção de serviços como Microsoft Azure, AWS e Google Cloud, o PowerShell oferece módulos específicos que permitem criar, configurar, monitorar e automatizar recursos cloud diretamente do terminal.

Nesta visão geral, focaremos principalmente no ecossistema Azure, pois é onde o PowerShell tem integração mais nativa e madura. Você aprenderá sobre o módulo Az, como ele se encaixa na automação em nuvem, casos de uso comuns e quais recursos explorar para aprofundar seus conhecimentos.

Az module (visão geral)

O módulo Az é o módulo oficial do PowerShell para gerenciar recursos do Microsoft Azure. Ele substituiu o antigo módulo AzureRM e oferece uma abordagem mais moderna, com melhor desempenho, suporte multiplataforma (Windows, Linux e macOS) e compatibilidade com o PowerShell Core (7+). O Az module é composto por dezenas de sub-módulos, cada um responsável por uma área de serviço do Azure, como computação (VMs), rede, armazenamento, bancos de dados, identidade, etc.

Para começar a usar, é necessário instalar o módulo e autenticar-se na sua conta Azure. A instalação é simples:

Install-Module -Name Az -AllowClobber -Force

Após a instalação, você pode conectar-se à sua assinatura Azure usando o cmdlet Connect-AzAccount. Ele abrirá uma janela de autenticação ou fornecerá um código para autenticação via navegador. Uma vez autenticado, você pode listar suas assinaturas, selecionar uma padrão e começar a gerenciar recursos. Por exemplo:

Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId 'seu-id-aqui'

O Az module segue uma convenção de nomenclatura de cmdlets: Verbo-AzNomeDoServiço. Por exemplo, Get-AzVM lista máquinas virtuais, New-AzResourceGroup cria um grupo de recursos, e Remove-AzStorageAccount exclui uma conta de armazenamento. Essa padronização facilita a descoberta de comandos e a transição de conhecimento entre diferentes serviços.

Automação na nuvem

Automação na nuvem é o processo de usar scripts e ferramentas para provisionar, configurar e gerenciar recursos de nuvem sem intervenção manual. O PowerShell é uma excelente escolha para essa tarefa, pois permite criar scripts reutilizáveis que podem ser executados localmente, em pipelines de CI/CD, ou em serviços como o Azure Automation e o Azure DevOps.

Com o Az module, você pode automatizar tarefas repetitivas, como criar ambientes de desenvolvimento, escalar recursos sob demanda, aplicar políticas de segurança e até mesmo realizar implantações completas de infraestrutura usando modelos ARM ou Bicep (ambos podem ser invocados via PowerShell). Além disso, o PowerShell pode ser usado para orquestrar tarefas em várias nuvens, embora o suporte a outras nuvens (AWS, GCP) seja feito por módulos separados.

Um exemplo simples de automação: criar um grupo de recursos e uma VM em sequência, com verificação de erros:

$rgName = "rg-demo"
$location = "eastus"

# Criar grupo de recursos
New-AzResourceGroup -Name $rgName -Location $location

# Criar VM simples (requer parâmetros adicionais)
$vmConfig = New-AzVMConfig -VMName "vm-demo" -VMSize "Standard_B1s"
$vmConfig = Set-AzVMOperatingSystem -VM $vmConfig -Windows -ComputerName "vm-demo" -Credential (Get-Credential)
$vmConfig = Set-AzVMSourceImage -VM $vmConfig -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2019-Datacenter" -Version "latest"
$vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id (Get-AzNetworkInterface -Name "myNic" -ResourceGroupName $rgName).Id

New-AzVM -ResourceGroupName $rgName -Location $location -VM $vmConfig

Esse script, embora simplificado, demonstra como encadear comandos para criar recursos. Na prática, você usaria parâmetros, funções e tratamento de erros para tornar o script robusto e reutilizável.

Casos de uso

O PowerShell com Az module pode ser aplicado em diversos cenários reais. Aqui estão alguns casos de uso comuns:

  • Provisionamento de infraestrutura: Criação automática de ambientes de desenvolvimento, teste e produção usando scripts ou modelos ARM.
  • Gerenciamento de recursos: Listar, iniciar, parar, redimensionar e excluir VMs, bancos de dados, etc., em lote.
  • Automação de tarefas de manutenção: Agendar backups, aplicar patches, limpar recursos obsoletos.
  • Relatórios e monitoramento: Coletar métricas, status de recursos e gerar relatórios em CSV ou HTML.
  • Integração com CI/CD: Executar scripts PowerShell em pipelines do Azure DevOps ou GitHub Actions para deploy de aplicações.

Um exemplo prático de caso de uso é desligar VMs fora do horário de expediente para economizar custos. Você pode criar um script que identifica todas as VMs em um grupo de recursos e as desliga, e agendá-lo no Azure Automation para rodar às 20h todos os dias:

$vms = Get-AzVM -ResourceGroupName "rg-prod"
foreach ($vm in $vms) {
    Stop-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force
    Write-Host "VM $($vm.Name) desligada."
}

Outro caso: criar um script que verifica se há contas de armazenamento com acesso público e aplica uma política de bloqueio. Esses são exemplos de como o PowerShell pode ser usado para governança e segurança.

Recursos

Para aprofundar seus conhecimentos, explore os seguintes recursos oficiais e comunidades:

  • Documentação do Az module: A referência completa de cmdlets e guias de início rápido.
  • Exemplos e amostras: Repositórios com scripts prontos para cenários comuns.
  • Módulos de terceiros: Para AWS (AWSPowerShell.NetCore) e GCP (Google Cloud PowerShell).
  • Ferramentas como Azure CLI: Alternativa ao PowerShell, mas que pode ser usada em conjunto.
  • Cursos e tutoriais: Plataformas como Microsoft Learn oferecem trilhas específicas.

Além disso, é importante conhecer o PowerShell Gallery (PSGallery), onde você pode encontrar módulos adicionais e scripts da comunidade. O Az module é mantido pela Microsoft e recebe atualizações frequentes, então verifique regularmente por atualizações com Update-Module Az.

Boas práticas

Ao trabalhar com PowerShell e nuvem, siga estas boas práticas:

  • Use o princípio do menor privilégio: autentique-se com permissões mínimas necessárias.
  • Armazene credenciais e segredos de forma segura, usando Azure Key Vault ou variáveis de ambiente.
  • Sempre teste scripts em um ambiente de desenvolvimento antes de aplicar em produção.
  • Utilize módulos e funções para modularizar seu código e facilitar manutenção.
  • Documente seus scripts com comentários e inclua tratamento de erros robusto.

Essas práticas ajudarão a criar soluções confiáveis e seguras.

Exercícios

Para fixar o conteúdo, resolva os exercícios abaixo. Tente fazer antes de consultar as respostas.

  1. Exercício 1: Instale o módulo Az em sua máquina e conecte-se à sua conta Azure. Liste as assinaturas disponíveis e selecione uma delas como padrão. Escreva o comando usado.
  2. Exercício 2: Crie um script PowerShell que liste todos os grupos de recursos em sua assinatura e, para cada um, exiba a quantidade de VMs (usando Get-AzVM).
  3. Exercício 3: Escreva um script que crie um grupo de recursos chamado 'rg-exercicio' na região 'eastus' e, em seguida, crie uma conta de armazenamento simples dentro dele.
  4. Exercício 4: Pesquise na documentação oficial do Az module sobre o cmdlet Get-AzResource e explique como ele pode ser usado para listar todos os recursos de uma assinatura. Dê um exemplo de comando.
  5. Exercício 5: Descreva um caso de uso real (diferente dos citados) onde você usaria PowerShell para automatizar uma tarefa na nuvem. Explique o cenário e esboce o script (pode ser pseudocódigo).

✓ Resposta: Para instalar e conectar, use:
Install-Module -Name Az -AllowClobber -Force
Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId 'seu-id'
O comando Set-AzContext define a assinatura padrão.

✓ Resposta: Script:
$rgs = Get-AzResourceGroup
foreach ($rg in $rgs) {
    $vmCount = (Get-AzVM -ResourceGroupName $rg.ResourceGroupName).Count
    Write-Host "RG: $($rg.ResourceGroupName) - VMs: $vmCount"
}
Isso lista cada grupo e a contagem de VMs.

✓ Resposta: Script:
New-AzResourceGroup -Name "rg-exercicio" -Location "eastus"
$storage = New-AzStorageAccount -ResourceGroupName "rg-exercicio" -Name "storageexe" -Location "eastus" -SkuName "Standard_LRS"
O nome da conta de armazenamento deve ser globalmente único.

✓ Resposta: O cmdlet Get-AzResource lista todos os recursos em uma assinatura ou escopo. Você pode filtrar por tipo, grupo, etc. Exemplo:
Get-AzResource | Select-Object ResourceName, ResourceType, ResourceGroupName
Ele é útil para inventariar recursos.

✓ Resposta: Exemplo: Automatizar a criação de usuários no Azure AD (Entra ID) com base em um arquivo CSV. O script leria o CSV e usaria New-AzADUser para criar cada usuário, tratando erros. Pseudocódigo:
$users = Import-Csv "users.csv"
foreach ($u in $users) {
    try {
        New-AzADUser -UserPrincipalName $u.Email -DisplayName $u.Name -Password $u.Password -MailNickname $u.Nick
    } catch {
        Write-Warning "Falha ao criar $($u.Email): $_"
    }
}
Isso economiza tempo e evita erros manuais.

Referências