Metadado | Descrição |
---|---|
Título | Automação de Start/Stop para VMs Azure (Azure VM Auto Start/Stop) |
Versão | 1.0.0 |
Data | 27/02/2025 |
Autor | Mathews Buzetti |
Tags | azure-automation , powershell , start-stop-vms , cost-optimization , azure-cost-management , devops , cloud-automation , infrastructure-as-code |
Status | ✅ Aprovado para ambiente de produção |
Automatize totalmente o ciclo de Start e Stop (Deallocate) das suas máquinas virtuais Azure com base em tags e agendamentos personalizados. Solução confiável e testada para ambientes de produção, desenvolvimento, testes, QA e homologação, garantindo máxima economia de recursos.
- Benefícios-Chave
- Como Funciona
- Pré-requisitos
- Guia de Configuração Detalhado
- Parâmetros do Script
- Versionamento
Benefício | Antes | Depois |
---|---|---|
💰 Economia Substancial | Máquinas virtuais executando 24/7 mesmo sem uso | VMs ligadas apenas quando necessárias com economia de até 70% |
⏱️ Gestão do Tempo | Intervenção manual diária para ligar/desligar VMs | Automação completa baseada em agendamentos personalizados |
🔄 Flexibilidade | Esquemas rígidos ou desligamentos manuais esquecidos | Agendamentos específicos para diferentes grupos de VMs por tag |
🔒 Segurança | Credenciais expostas ou senhas armazenadas | Autenticação segura via Identidade Gerenciada sem senhas |
📊 Monitoramento | Sem visibilidade das operações realizadas | Sistema detalhado de logs para auditoria e controle |
O script PowerShell opera através de um processo otimizado e seguro com sistema avançado de detecção e registro de erros:
flowchart TD
A[Início do Runbook Agendado] --> B[Autenticação via
Managed Identity]
B --> C[Busca VMs por tag
Nome: TagName
Valor: TagValue]
C --> D{Verificar parâmetro
Shutdown}
D -->|Shutdown = true| E[Filtrar VMs ligadas]
D -->|Shutdown = false| F[Filtrar VMs desligadas]
E --> G[Para cada VM em execução]
F --> H[Para cada VM parada]
G --> G1{VM está em
estado transitório?}
G1 -->|Sim| G2[Aguardar estabilização
ou pular]
G1 -->|Não| G3[Parar VM]
G3 --> G4[Registrar evento
no log]
G2 --> G4
H --> H1{VM está em
estado transitório?}
H1 -->|Sim| H2[Aguardar estabilização
ou pular]
H1 -->|Não| H3[Iniciar VM]
H3 --> H4[Registrar evento
no log]
H2 --> H4
G4 --> I[Fim do Runbook]
H4 --> I
-
📡 Conexão:
- Autentica-se ao Azure usando Managed Identity (sem credenciais expostas)
- Logs detalhados em caso de falha de autenticação com mensagem específica sobre permissões necessárias
-
🔍 Identificação:
- Localiza todas as VMs com as tags especificadas nos parâmetros
- Detecta quando nenhuma VM é encontrada e registra erro específico no log
- Exemplo de log:
"Nenhuma VM encontrada com a TagName 'start' e TagValue '08:00'."
-
📊 Avaliação Inteligente:
- Analisa o estado atual de cada VM para evitar operações redundantes
- Detecta automaticamente estados de provisionamento com falha
- Exemplo de log:
"VM WebServer01 já está iniciada."
(evitando operação desnecessária) - Exemplo de erro:
"A operação de provisionamento da VM WebServer02 falhou."
-
⚙️ Execução com Tratamento de Erros:
- Realiza operações separadamente para cada VM com tratamento individual de erros
- Se uma VM falhar, as demais continuam sendo processadas
- Captura detalhes específicos de cada erro com o try/catch
- Exemplo de erro:
"Falha ao iniciar a VM AppServer03: Insufficient quota to complete operation."
-
📝 Sistema de Logs de 4 Níveis:
- INFO: Registra ações e estados normais
- SUCCESS: Confirma operações bem-sucedidas
- WARNING: Alerta sobre situações que precisam de atenção
- ERROR: Detalha falhas com informações para troubleshooting
- Todos os logs incluem timestamp para auditoria precisa:
"2025-02-25 08:00:12 - SUCCESS: VM DBServer01 iniciada com sucesso."
- Conta Azure ativa com permissões de Owner na subscription
Warning
A conta usada para configurar a automação precisa ter permissões suficientes para atribuir a role "Virtual Machine Contributor" à Managed Identity da Automation Account.
- Acesse o Portal Azure (portal.azure.com)
- Clique em Create a resource
- Pesquise por Automation e selecione Automation Account
- Clique em Create
- Preencha os campos necessários:
- Name: Um nome exclusivo para sua conta (ex: AutomationVMs)
- Subscription: Selecione sua assinatura Azure
- Resource group: Selecione existente ou crie um novo
- Region: Escolha a região mais próxima de você
- Clique em Review + create e depois em Create
- Aguarde a criação da Automation Account
- No menu lateral, em Settings, selecione Identity
- Na aba System Assigned, defina o Status como On
- Clique em Save
- Na mesma tela acesse a opção Azure role assignments:
-
Na tela Azure role assignments preencha os dados
- Scope: Subscription
- Subscription: sua Assinatura
- Role: Virtual Machine Contributor
Warning
Não atribua mais permissões do que o necessário à Managed Identity. O princípio de "least privilege" deve ser aplicado para maior segurança.
- Acesse sua Automation Account no Portal Azure
- No menu lateral, em Process Automation, selecione Runbooks
- Clique em + Create a runbook
- Preencha as informações:
- Name: START_STOP_VMs
- Runbook type: PowerShell
- Runtime version: 5.1
- Description: "Automação para iniciar e parar VMs com base em tags"
- Clique em Create
- No editor do runbook que acabou de abrir, apague qualquer código existente
- Copie e cole o conteúdo completo do script Start-StopAzureVMsByTag.ps1
- Clique em Save
- Depois em Publish
Warning
Não altere os nomes dos parâmetros, pois os agendamentos farão referência a esses nomes específicos.
Depois de publicar vai voltar para tela inicial do runbook. Para configurar o Agendamento, siga os passos:
- Acesse a opção Resources e depois Schedules:
- Na tela de Schedules, clique em Add a Schedule e aparecerão duas opções conforme a imagem abaixo:
- Vamos configurar primeiro o Schedule. Neste exemplo, configurei para ligar VMs às 08:00 da manhã:
Preencha as informações:
- Name: StartVMs_Morning
- Description: "Inicia as VMs nos dias úteis pela manhã"
- Starts: Selecione a data e hora de início (recomendado: próximo dia útil às 8h)
- Time zone: Selecione seu fuso horário local
- Recurrence: Recurring
- Recur every: 1 Day
- Set expiration: No
- Week days: Selecione apenas os dias úteis (Monday to Friday)
Warning
O Azure Automation usa UTC por padrão. Certifique-se de selecionar o fuso horário correto para que as VMs sejam iniciadas no horário local desejado.
- Agora configure os Parameters:
- TagName: start
- TagValue: 08:00
- Shutdown: false (para iniciar)
- Depois clique em OK para criar o agendamento:
Para criar o agendamento de Stop, vamos seguir o mesmo processo, porém alterando o horário para 19:00:
- Na tela de Schedules, clique em Add a Schedule:
- Configure o Schedule para desligar as VMs às 19:00:
Preencha as informações:
- Name: StopVMs_Evening
- Description: "Para as VMs nos dias úteis à noite"
- Starts: Selecione a data e hora de início (recomendado: próximo dia útil às 19h)
- Time zone: Selecione seu fuso horário local (mesmo do agendamento anterior)
- Recurrence: Recurring
- Recur every: 1 Day
- Set expiration: No
- Week days: Selecione apenas os dias úteis (Monday to Friday)
Warning
O Azure Automation usa UTC por padrão. Certifique-se de selecionar o fuso horário correto para que as VMs sejam paradas no horário local desejado.
- Configure os Parameters:
- TagName: stop
- TagValue: 19:00
- Shutdown: true (para desligar)
- Depois clique em OK para criar o agendamento:
Para cada VM que você deseja incluir na automação:
- No Portal Azure, acesse Virtual Machines
- Clique na VM que deseja gerenciar
- No menu lateral, selecione Tags
- Adicione a tag com o mesmo nome e valor configurados nos agendamentos:
- Name: Digite o nome da tag (ex: "start")
- Value: Digite o valor da tag (ex: "07:00")
- Name: Digite o nome da tag (ex: "stop")
- Value: Digite o valor da tag (ex: "19:00")
- Clique em Apply
Warning
Certifique-se de que o nome e valor das tags nas VMs correspondam exatamente ao configurado nos agendamentos do Runbook.
- Acesse sua Automation Account no Portal Azure
- No menu lateral, em Process Automation, selecione Runbooks
- Clique no runbook START_STOP_VMs
- Selecione a aba Jobs para ver todas as execuções
- Clique no job específico que deseja analisar
- Na aba Output, analise os logs detalhados da execução
- Procure por mensagens de erro ou avisos que possam indicar o problema
Warning
Dica de diagnóstico: O script utiliza diferentes níveis de log (INFO, SUCCESS, ERROR, WARNING) que podem ajudar a identificar o problema. Preste atenção especial às mensagens marcadas como ERROR ou WARNING.
Os parâmetros abaixo devem ser configurados nos agendamentos do Runbook:
Parâmetro | Descrição | Valores Possíveis | Exemplo | Obrigatório |
---|---|---|---|---|
TagName |
Nome da tag usada para identificar as VMs que serão gerenciadas | Qualquer string válida para tag do Azure | "start" |
✅ |
TagValue |
Valor da tag para filtrar as VMs que receberão a ação | Qualquer string válida | "08:00" |
✅ |
Shutdown |
Define se as VMs serão iniciadas ou desligadas | $true (desligar VMs)$false (iniciar VMs) |
$true |
✅ |
Note
Para agendamento de início (manhã), use Shutdown = $false
Para agendamento de parada (noite), use Shutdown = $true
- Versão: 1.0.0
- Última atualização: 27/02/2025