Criar automação para desligamento automático de VM com Azure PowerShell

O Azure fornece uma poderosa ferramenta para DevOps que nos permite automatizar todo gerenciamento da conta Azure. Abaixo descrevo como gerenciar o período de execução das VM durante o dia.

Controlar o tempo que suas VMs permanecem em execução contribui muito para uma economia financeira. A Microsoft cobra horas de computação por VM que esteja ligar e alocada. Muitas vezes há um desperdício financeiro por deixar VM ligada durante horas que não tem um uso do sistema.

Dependências

Para seguir este manual é necessário que você tenha os módulos abaixo instalados e configurado no PowerShell.

Criando script para desligar as VMs

Crie uma arquivo nomeado DesligarVMs.ps1 contendo o script abaixo.

Criando script para ligar as VMs

Crie um arquivo nomeado LigarVMs.ps1 contendo o script abaixo.

Caso você deseja que este comportamento de desligar seja aplicado apenas para algumas VMs especificas, você pode insolar-las num grupo de recurso e no comando que recupera as VMs filtrar pelo seu grupo de recurso conforme exemplo abaixo.

Criando a automação para ligar/desligar as VMs diariamente

Para execução de um script PowerShell de automação no Azure, é necessário a criação e vinculação de uma conta de um Usuário AzureAD que tenha permissões de administração na conta especifica do Azure. Esta primeira etapa é a criação e atribuição de perfil para o usuário que a automação utilizará.

Substitua as variáveis de acordo com os dados da sua conta.

Como esta automação controla as VMs de uma conta Azure, é necessário um usuário com acesso a está conta para manipular as VMs. Este usuário não pode ser uma conta microsoft (hotmail, outlook…) porque este tipo de conta não permite a autenticação por credencial do PowerShell, por isso o script abaixo cria uma conta com o seu domínio no azure (ex: seuemailoutlook.onmicrosoft.com) configurado para não precisar trocar a senha no primeiro login e também para a senha não expirar.

A senha de atender a politica de segurança do Azure AD, ou seja, tem que ser uma senha forte.

Caso não exista o grupo de recurso definido para salvar os recursos da automação, ele deve ser criado neste momento.

Primeiro é criado uma conta de automação, nela pode configurar diversos scripts para serem executados com períodos configurados individualmente.

Vinculo do usuário criado para execução dos scripts de automação, esta credencial pode ser consumida por todos os scripts internos desta conta de automação. Após criada a credencial não é possível descobrir a senha utilizada por ela.

Criação do Runbook (script) para Desligar as VMs. Observe que está sendo feita uma importação do script criado anteriormente e nomeado como DesligarVMs.ps1, este arquivo deve estar salvo no mesmo diretório onde está sendo executado o script abaixo.

Criação do Runbook para Ligar as VMs.

Configurando os agendamentos (intervalo) para execução dos scripts de Ligar e Desligar VMs. Existe diversas possibilidades de configuração de intervalo (hora, diário, semanal, mensal, dias específicos da semana..) neste exemplo será executado diariamente as 8:00 para ligar e 17:00 para desligar (fuso horário de São Paulo).

Vinculando o agendamento ao Runbook.

Estes scripts estão disponíveis no meu GitHub.