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 (
StartouStop); - 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
- 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:

