top of page

Auto Start/Stop VM com Azure Functions

  • Foto do escritor: fernando freitas do vale
    fernando freitas do vale
  • 17 de jun. de 2022
  • 3 min de leitura

Atualizado: 29 de set. de 2022

Fala moçada, hoje vamos falar de um recurso muito importante para otimização de custos, a Automação para Inicializar ou Desligar as VM's automaticamente. Existem alguns métodos disponíveis como Azure Automation e Azure Functions. Aqui vamos abordar o uso com Azure Functions. Vantagens: É facilmente escalável, é de fácil gerenciamento e tem um custo mais barato que outras opções.

Vamos iniciar? Pré-requisitos: 1) Azure subscription 2) Azure Resource Group (RG) 3) Function App com App Service plan consumption-based 4) System-assigned managed identity habilitado para a Function App e conceder as permissões na subscription ou grupo gerenciado. 5) At least one Azure virtual machine is deployed in the desired RG. Please check the following quickstart guide to create a Linux or Windows virtual machine. Acesse o portal e vá em Create Resource em seguida procure por Function App

Em seguida, preencha as informações adequadamente, atenção ao campo Runtime Stack esse campo define o código que iremos usar dentro da Function, aqui usaremos o Powershell Core

Em seguida, será necessário preencher as informações de Hosting, onde irá selecionar o Storage Account e definir o tipo do plano, aqui escolhemos Consumption. No caso escolhemos esse plano por ser pago pelo uso.

Em Networking não terá alteração já que está disponível somente nos demais planos.


No caso de Monitoring não irei habilitar, mas fica a critério caso seja um ambiente que exija uma monitoramento do uso do recurso basta habilitar.


Em seguida, coloque as Tags de acordo com seu ambiente e vá para Review + create


Com a Function criada temos que habilitar o System Assigned para isso vá até a Function:

Agora iremos conceder a permissão IAM para o recurso que desejamos que Function tenha acesso, nesse caso vamos fazer a nível de RG:



Agora vamos criar a Function com a Trigger



Em seguida escolha Time Trigger

Com a Timer Trigger criada, vá em Integration


Em seguida clique em Temporizador(Timer)

Em seguida abrirá a janela de configuração do Timer, o temporizador é utilizado com formato Cron então basta adequar a sua necessidade. Uma observação é que esse temporizador vai disparar a função que estamos criando, e não desligar a máquina de acordo com o Cron, ou seja, vamos dizer que você deseja que a VM desligue somente as 22 horas, porém a função dispara de hora em hora, o que vai acontecer? A VM vai desligar somente as 22, a função vai ser disparada para verificar se existe alguma VM que atende os critérios para serem desligadas ou ligadas somente isso. Nesse caso ele foi configurado para disparar de hora em hora (muito bom para desligar VM baseada em CPU por exemplo) e de segunda a sexta.

Agora vamos inserir o código powershell que vai ser a função propriamente dita, não vou entrar em muitos detalhes do código, e como lembra configuramos a Stack do powershell quando criamos a função. Somente a observação de alterar a subscription de acordo com a(s) sua(s): Altere o código abaixo e em seguida copie:

Caso rode somente em uma subscription indico o seguinte código:


Vá agora em Code+test e cole o script, não altere o nome dele.

Apenas salve o script, para testar precisamos configurar outra dependência. Vá na Function e navegue conforme a imagem:


Em seguida abrirá uma nova aba, então tira o comentário da linha conforme a imagem:

O último passo agora, é implementar as Tags das VM's. A Tag é que determina o horário. Os nomes devem ser os mesmos que colocarei aqui, se alterar o nome deve alterar no código que foi implementado. O horário fica a seu critério.

Um detalhe importante: Lembra que colocamos a função para rodar de hora em hora em segundos e minutos fechados? 08:00:00 por exemplo. Se você colocar um horário quebrado, como por exemplo 08:15:00 não vai rolar, simplesmente pq a função não dispara nesse horário. Então caso queira em horário diferentes os horários cheios, tem que alterar o cron do timer. Pronto configuração realizada, agora só testar. Volte na função lá em code + test

Na primeira execução ele vai baixar o módulo AZ:

Em seguida a execução:


Comments


bottom of page