Automação no Azure

Tem-se falado bastante de DevOps e nas vantagens que essa mudança de cultura pode trazer dentro de um projeto de desenvolvimento de software. Dando continuidade ao assunto, hoje vamos abordar a automação no Azure visando agilizar processos do dia a dia com o intuito de economizar tempo e reduzir custos.

Como exemplo, vamos ensinar passo a passo como automatizar a execução de Máquinas Virtuais no Azure. A primeira vista isso pode parecer algo sem muita importância pois podemos controlar as VMs de uma maneira simples através do Portal de Gerenciamento do Azure. Mas será que assim conseguiremos atingir a agilidade desejada? E a redução de custos?

Vamos começar demonstrando como ligar e desligar as VMs automaticamente. Queremos que essas máquinas sejam ligadas às 08:00h e desligadas às 18:00h. Com isso pretendemos obter uma economia de 70% na nossa conta mensal do Azure. Na prática, estamos falando que se usarmos 10 instâncias de máquinas Standard A2 com Windows, podemos economizar até R$ 2.378,88 por mês com essa simples automação.

0_automacacao_no_azure_calculadora

E aí? Se interessou? Vamos mostrar como fazer!

Pré-Requisitos

  • Uma conta do Microsoft Azure. Se você ainda não tem uma, faça o cadastro gratuito que te dá direito a um mês de avaliação.
  • Ao menos uma Máquina Virtual em execução. Podemos ter várias.
  • Um usuário com privilégio de coadministrador. Veja aqui como criá-lo.

Importante!!! Sem esse usuário coadministrador, teremos erros nas próximas etapas desse tutorial: Add-AzureAccount: unknown_user_type: Unknown User Type e Get-AzureVM: No default subscription has been designated. Use Select-AzureSubscription -Default to set the default subscription.

Desligando todas as VMs

Escolhendo um Runbook

Runbooks são scripts de automação do Windows PowerShell que contêm fluxos de trabalho. A boa notícia é que o Azure já oferece uma galeria contendo diversos scripts que podem ser importados. E felizmente as opções de ligar e desligar as VMs estão entre eles.

No Portal de Gerenciamento do Azure clique no botão “+Novo” localizado no canto inferior esquerdo. Selecione o item Serviços de Aplicativo -> Automação -> Runbook -> Da Galeria.

1_automacacao_no_azure_escolher_runbook_da_galeria

Irão aparecer diversas opções disponíveis de Runbooks para importar. Para facilitar a procura pelo que estamos querendo, filtre por VM Lifecycle Management e em seguida selecione o item Azure Automation Workflow to Schedule stopping of all Azure Virtual Machines.

2_automacacao_no_azure_selecionar_runbook

A próxima tela solicitará a revisão do Runbook. Não se preocupe com isso agora e avance para o próximo item.

3_automacacao_no_azure_revisar_definicao_runbook

Dê um nome para o seu Runbook. Utilizaremos aqui o nome Parar-TodasAzureVM. Selecione a opção Criar uma nova conta de automação e também dê um nome para ela. No nosso caso, ela se chamará AutomacaoTalkitbr. Escolha uma assinatura do Azure e a região desejada.

4_automacacao_no_azure_inserir_detalhes_runbook

Criamos aqui um novo serviço de automação com um Runbook atrelado a ela.

5_automacacao_no_azure_automacao_criada

Criando uma credencial

Até agora configuramos um serviço automatizado que será executado para desligar nossas VMs. O próximo passo é definir uma credencial para que nosso script consiga obter informações sobre nossas VMs.

Dentro da conta de automação que acabamos de criar, acesse a aba Ativos e clique no ícone Adicionar Configuração localizado no rodapé da página.

6_automacacao_no_azure_adicionar_ativo

Quando questionado sobre o tipo de configuração que vamos adicionar, selecione a opção Adicionar Credencial.

7_automacacao_no_azure_adicionar_credencial

Selecione o tipo de credencial Credencial do Windows PowerShell e dê um nome para ela. Usaremos aqui o nome Credencial.Windows.PowerShell. Não é obrigatório, mas se você desejar, pode adicionar uma descrição para essa credencial.

8_automacacao_no_azure_definir_credencial

Agora o passo mais importante de todos é vincular o usuário. Esse usuário, e sua respectiva senha, tem que ser obrigatoriamente aquele criado com o privilégio de coadministrador. Se você não sabe do que estamos falando, confira o post Criando coadministradores na sua conta Azure.

9_automacacao_no_azure_definir_senha_credencial

Editando o Runbook

Já temos o serviço de automação e também nossa credencial. Precisamos agora fazer uma pequena modificação no script do Runbook.

Para isso vá até a aba Runbooks e selecione o nome do Runbook recém criado.

10_automacacao_no_azure_configurar_runbook

Encontre a aba Autor e altere o script aplicando o nome da credencial criada e também o nome da assinatura do Azure. Deve-se publicar as alterações após essas modificações.

11_automacacao_no_azure_editar_autor

Neste ponto, podemos testar o nosso script. Se tudo estiver certo, clique no ícone Publicar.

Configurando agendamentos

Já temos nosso Runbook testado e publicado. Precisamos agora dizer quando ele será executado. Para isso, clique na aba Agendar e selecione o Link para uma nova agenda.

12_automacacao_no_azure_novo_agendamento

Dê um nome para esse agendamento. Aqui também fica a seu critério colocar ou não uma descrição. 13_automacacao_no_azure_configurar_agendamento

Agora precisamos selecionar o tipo de agendamento. Nesse caso, a melhor opção é Diário. Especifique também a data de início do agendamento e a que horas ele deve ocorrer. No nosso caso, vamos querer desligar as máquinas todos os dias às 18:00 horas.

14_automacacao_no_azure_definir_horario_agendamento

Pronto. Com isso, o Runbook responsável por desligar as máquinas será executado diariamente no horário pré-determinado por você.

Ligando todas as VMs

Vimos até aqui como desligar todas as máquinas. Precisamos agora criar um novo Runbook para ligá-las. O processo todo é semelhante ao descrito anteriormente. A diferença é que vamos importar da galeria o Runbook Azure Automation Workflow to Schedule starting of all Azure Virtual Machines. Podemos também deixar de lado o passo da credencial, uma vez que ela já foi criada. Porém precisamos editar o Runbook e configurar o seu agendamento.

Melhorias

O Runbook para iniciar as máquinas já contempla a inicialização de todas as VMs configuradas no Azure. Mas será que temos algum ponto em que ainda podemos melhorar? Sim! Se vocês repararam, estamos ligando as máquinas todos os dias, o que pode ser um desperdício em muitos casos. Como então evitar que essas máquinas não sejam ligadas durante o final de semana?

Existem duas opções: uma delas seria resolvido ao criarmos um agendamento diário para cada dia da semana e especificarmos para que ele seja repetido a cada 7 dias. O outro seria modificar o código do Runbook para fazer esse tratamento. É está opção que vamos mostrar aqui:

workflow Start-AllAzureVM
{
	# First of all, checking the day of week to avoid start the VM during the weekend
	$DayOfWeek = (Get-Date).DayOfWeek

	if ($DayOfWeek -eq 'Saturday' -or $DayOfWeek -eq 'Sunday')
	{
		Write-Output "Trying to start VM on $($DayOfWeek). Aborting it..."
		return
	}

	# Add the credential used to authenticate to Azure
	$Cred = Get-AutomationPSCredential -Name "Credencial.Windows.PowerShell"

	# Connect to Azure
	Add-AzureAccount -Credential $Cred

	# Select the Azure subscription you want to work against
	Select-AzureSubscription -SubscriptionName "Visual Studio Professional com MSDN"

	# Get VMs
	$VMs = Get-AzureVM

	# Start everything all at once
	foreach -parallel ($vm in $VMs)
	{
		Write-Output "Trying to start $($VM.Name)"

		if ($VM.status -like 'Stopped*')
		{
			$startRtn = Start-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName -ea SilentlyContinue
			$count = 1

			if (($startRtn.OperationStatus) -ne 'Succeeded')
			{
				do
				{
					Write-Output "Failed to start $($VM.Name). Retrying in 60 seconds..."

					sleep 60

					$startRtn = Start-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName  -ea SilentlyContinue
					$count++
				}
				while (($startRtn.OperationStatus) -ne 'Succeeded' -and $count -lt 5)
			}

			if ($startRtn)
			{
				Write-Output "Start-AzureVM cmdlet for $($VM.Name) $($startRtn.OperationStatus) on attempt number $count of 5."
			}
		}
		else
		{
			Write-Output "Ignoring $($VM.Name) because it's already $($VM.status)"
		}
	}
}

Conclusão

Notem que existem diversos outros tipos de Runbooks além da possibilidade de criar o seu próprio. A automação, com certeza, trará diversos benefícios para seus projetos.

Ficou com alguma dúvida? Tem alguma experiência sobre automação que você queira compartilhar? Deixe aqui os seus comentários e até a próxima!

Imagem capa: Microsoft

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s