Redução de custos com VMs (Parte 2)

Fala pessoal, tudo bem com vocês?

Vamos a nossa parte dois de dicas para economizar com as máquinas virtuais do Azure nesse período de crise. Quem quiser conferir a parte 1 clique aqui.

Nesse tutorial vamos em alternativas mais radicais em quesito de contenção de gastos, o primeiro deles é desligar a máquina virtual completamente e só ligá-la quando for usar. Pensando nesse cenário vamos colocar o controle de ligar/desligar a máquina na mão do usuário e vou ensinar um jeito de fazer isso com Webhook

1 – Ligar/Desligar máquina via webhook.

No post anterior mostrei como criar uma conta de automação e um runbook, então vou pular algumas etapas e já vamos direto criar 2 runbooks, 1 para desligar a máquina e outro para ligar a máquina virtual

Runbook shutdown VM

Primeiro vamos criar um runbook do tipo Powershell com o nome Shutdown-VM dentro da conta de automação:

Após criado, vamos editar o runbook e colocar o seguinte código* e depois clicar em publicar:

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID `
-ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

Stop-AzureRmVM -force -Name NOMEDAVM -ResourceGroupName NOMEDOGRUPODERECURSOS

*(lembrando que os campos NOMEDAVM e NOMEDOGRUPODERECURSOS devem conter as informações de sua conta)

No meu caso ficou assim:

Runbook startup VM

Agora vamos criar mais um runbook do tipo powershell para iniciar nossa VM e vamos repetir o processo anterior, conforme imagem abaixo:

Após criado, vamos editar o runbook e colocar o seguinte código* e depois clicar em publicar:

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID `
-ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

Start-AzureRmVM -Name NOMEDAVM -ResourceGroupName NOMEDOGRUPODERECURSOS

*(lembrando que os campos NOMEDAVM e NOMEDOGRUPODERECURSOS devem conter as informações de sua conta)

No meu caso ficou assim:

Agora dois runbooks foram criados, um para desligar e outro para ligar a VM, agora vamos configurar o webhook para esses runbooks.

Webhook é um serviço externo que inicia um runbook específico na automação do Azure por meio de uma solicitação HTTP, para isso precisamos publicar a url externa para cada runbook.

Vamos clicar no runbook recém-criado e no menu ao lado esquerdo no item “Recursos” vamos abrir o “Webhook” e depois “Adicionar Webhook”:

Depois que clicou em Adicionar Webhook, ira aparecer uma tela onde você deverá preencher o nome do webhook, e a data para expirar. No último item terá a nossa URL, copie essa url

Esse ultimo item URL será a nossa url externa que vamos utilizar, copie essa url e clique em ok, a url será algo parecido com isso:

https://s11events.azure-automation.net/webhooks?token=91I0y%2bykcQFrsb6nd6wvW0p0

pronto! Nosso primeiro webhook foi criado:

Agora precisa repetir o mesmo processo para o segundo runbook e no final teremos duas urls:

Shutdown-vm (webhook do runbook shutdown-vm)

https://s11events.azure-automation.net/webhooks?token=91I0y%2bykcQFrsb6nd6wvW0p0

Startup-vm (webhook do runbook startup-vm)

https://s11events.azure-automation.net/webhooks?token=Ea%2fMRHz9Pm9r8FxOyymYxpIw4pJewC6iWHjgRUA%3d

Agora vamos criar dois scripts powershell, um para cada url! A sintaxe do comando será igual abaixo:

Invoke-WebRequest -Method Post -Uri https://sua_url_webhook No computador, basta abrir o bloco de notas e colar o seu comando e salvar com extensão ps1

Faça o mesmo processo para as duas urls e no final você terá os dois scritps! Um para ligar a máquina e outro para desligar

Em alguns casos ao executar o script apresenta uma tela de erro informando que o script não é assinado, para contornar esse problema, basta executar no powershell como administrador o comando “set-executionpolicy remotesigned”:

Feito isso o usuário não terá mais problemas em executar o script e agora já pode testar os scripts recém criados

Para iniciar a máquina virtual, basta executar o script “startup-vm” e para desligar a máquina virtual basta executar o script “shutdown-vm”. Você pode acompanhar se o script foi executado com êxito, dentro do portal do azure na conta de automação ou na tela do runbook:

Com tudo isso, você pode deixar a VM maior parte do tempo desligada e dar a autonomia para o usuário ligar só quando for usar e desligar se não for usar mais.