🔄 Automatize o Start/Stop de Máquinas Virtuais na Azure com Tags usando PowerShell

Reduzir custos com recursos ociosos é uma das práticas mais simples e eficazes de FinOps em ambientes de nuvem. Pensando nisso, desenvolvi um script em PowerShell que automatiza o processo de ligar ou desligar máquinas virtuais no Azure com base em tags personalizadas. Neste artigo, mostro como funciona esse runbook e como você pode utilizá-lo facilmente no seu ambiente.

Repositório no GitHub: https://github.com/ErickMedeiros/ps-startstopvmta

✅ O Problema

Muitas empresas mantêm suas VMs de desenvolvimento, testes ou laboratórios rodando 24/7, mesmo quando não estão em uso. Isso representa um desperdício considerável, especialmente em workloads temporários ou que só precisam estar online durante o horário comercial.

💡 A Solução

Utilizando Azure Automation + PowerShell + Tags, podemos identificar quais VMs precisam ser iniciadas ou desligadas automaticamente. Com um simples runbook, podemos:

  • Buscar VMs com uma tag específica (AutoShutdown = true);
  • Verificar o status atual da VM;
  • Iniciar ou desligar conforme o parâmetro recebido (Start ou Stop);
  • Executar essa rotina de forma agendada, sem intervenção humana

Obs: exemplo a seguir utiliza um agendamento para ligar e desligar a VM a cada hora como exemplo desta publicação. Você pode alterar a TAG = AutoShutdowm e seu valor também no script. Há tag que estiver no script dever ser aplicada igualmente na marcação da máquina virtual.

🧪 Como Usar

  1. Criando uma conta de automação no Azure

Neste exemplo crio uma conta de automação chamada aa-startstopvmtag, seguindo um padrão:

Com a conta de automação criada. Vamos para o segundo passo:

2. Na VM vamos definir a tag e seu valor: aqui iremos usando AutoShutdown com o valor True.

Neste momento a máquina VM-DEV-0001 está desligada.

3. Managed Identity

Iremos configurar uma identidade gerenciada para a conta de automação aa-startstopvmtag

Iremos dá uma permissão para a conta de automação de Contributor. Vamos escolher a opção de Managed Identity e selecionar a conta de automação:

Após selecionar e definir a conta é só seguir para finalizar.

4. Criando o Rumbook:

Vamos acessar o repositório https://github.com/ErickMedeiros/ps-startstopvmtag e acessar o arquivo startstopvmtag.ps1 e copia o código.

Agora na conta de automação vamos acessar a opção Runbook para criar um customizado:

Segue as configuração do novo Rumbook:

Configurado no tipo Powershell e na versão 5.1 , depois

Com o Rumbook criado em sua área de código, vamos colar o script da área de transferência, ele deve surgir igual da imagem. Clique nas opções em sequência, Salvar e depois em Publicar.

Com o Runbook já publicado, vamos iniciar as configurações de Schedule.

Obs.: configure o schedule de acordo com sua necessidade, existe diversos tipos de configuração.

Vamos crias os agendamentos para StartVM e StopVM, conforme as imagems em sequência.

Defina o nome do primeiro agendamento para StartVM-Tag. Essa configuração da start na Vm a cada hora em que ela quando ela estiver desligada com o estado “Deallocated

Vamos criar o agendamento para Stop-VM, segue a mesma configuração anterior para um horário posterior para desligar a vm. Agora quando a Vm estiver com o status de “running”, desligará a mesma.

Segue os agendamento já criados:

5. Criando o Jobs:

Essa é a última etapa, configurar os (Job) dentro do Schedule nas configurações do Rumbook . Vamos clicar na opção do Rumbook para iniciar:

Vamos criar duas opção para start e depois stop. Selecione o Schedule StartVM-TAG. Digitando o comandos start, em seguida as tags configuradas na máquina virtual.

Finalize a configuração.

Crie a mesma opção para Stop:

Segue as configurações dos agendamento. Agora é só aguardar as execuções ser disparar ações

Segue os resultados da ações:

Vm que estava desligada agora com status de running.

Agora vamos observar quando a mesma estiver desligando após alguns minutos na ação para StopVM-TAG

💰 Benefícios

  • Redução imediata de custos com VMs ociosas;
  • Governança simplificada usando tags;
  • Escalável para múltiplas subscriptions;
  • Segurança nativa com Managed Identity (sem senhas no código);

📎 Conclusão

Essa é uma solução simples, porém poderosa, para controlar recursos computacionais de forma automatizada e inteligente. Em um mundo de orçamentos enxutos e escalabilidade, a automação baseada em tags se torna uma prática essencial de governança e eficiência operacional.

Você pode acessar o projeto completo, com instruções e exemplos, neste repositório:

🔗 https://github.com/ErickMedeiros/ps-startstopvmtag