PowerShell e a nuvem (visão geral)
LidoEsta aula apresenta uma visão geral de como o PowerShell pode ser utilizado com serviços de nuvem, focando no módulo Az para Azure. Exploraremos os conceitos de automação na nuvem, casos de uso práticos e recursos essenciais para começar. O objetivo é capacitar o aluno a entender o potencial do PowerShell no gerenciamento de infraestrutura em nuvem.
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 -ForceApó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 $vmConfigEsse 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.
- 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.
- 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). - 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.
- Exercício 4: Pesquise na documentação oficial do Az module sobre o cmdlet
Get-AzResourcee explique como ele pode ser usado para listar todos os recursos de uma assinatura. Dê um exemplo de comando. - 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).
Install-Module -Name Az -AllowClobber -Force
Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId 'seu-id'O comando Set-AzContext define a assinatura padrão.$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.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.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, ResourceGroupNameEle é útil para inventariar recursos.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.