,

🔄 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