Se existe uma coisa que incentiva (pra não dizer obriga) as empresas a se reinventarem, é a “crise”. Isso se dá fundamentalmente em duas esferas: vendas e redução de custos. Os motivos parecem óbvios:
- Quem não procura novas formas de atingir seus clientes com suas mensagens fatalmente corre o risco de perde-los e além disso, dificilmente consegue alavancar as vendas.
- Se as entradas diminuem (isso é uma constante em cenários de crise), é impossível manter o mesmo nível de despesas, ou seja, elas precisam ser reduzidas.
Toquei nestes dois pontos pra destacar o segundo. Redução de custos é algo que tem que ser cuidadosamente avaliado por aqueles que fazem a gestão dos recursos. Trazendo este cenário para o departamento de TI ou mesmo para empresas cujo core é TI, é conhecido já de todos que ir para a nuvem por si só, na grande maioria dos casos, é sinônimo de redução de custos com infraestrutura mas, em tempos de dólar a R$ 4,00, mesmo nestes ambientes é preciso encontrar maneiras eficientes de utilizar os tais recursos.
Azure Automation
Se consideramos o contexto apresentado na introdução deste artigo, o modelo principal de billing (pague pelo uso) das principais plataformas de computação em nuvem do mercado e o Microsoft Azure como provedor de nuvem pública, vamos ver que o Automation irá se tornar um forte aliado para você que precisa reduzir custos de infraestrutura de TI sem comprometer a eficiência, robustez e alta disponibilidade da mesma.
Isso porque o Azure Automation, como o próprio nome já sugere, tem o poder de automatizar de maneira segura e simplificada uma série de atividades que são executadas em um datacenter. Apenas para citar alguns exemplos clássicos: verificação de atualizações disponíveis para determinado grupo de servidores, ligar/desligar máquinas virtuais que não estão em uso, (des)provisionar ambientes de dev/homolog, dentre tantas outras possibilidades.
O Azure Automation foi disponibilizado para uso de forma geral em Outubro de 2014. Ele permite realizar operações automatizadas em todos os principais recursos da plataforma, tais como: máquinas virtuais, web apps, cloud services (Web e Worker Roles), etc.
Um exemplo prático – Ligar/desligar máquinas virtuais de forma automatizada
Para justificar minha afirmação, cito o exemplo de ligar/desligar máquinas virtuais de acordo com a necessidade. Façamos juntos uma conta super simples (irei utilizar a calculadora do Azure como fonte de informação em relação a valores).
https://azure.microsoft.com/pt-br/pricing/calculator/ (Calculadora do Azure)
Imagine que possuamos uma máquina virtual Linux, por exemplo, que rode um determinado software que é utilizado na empresa apenas em horário comercial e durante dias úteis. Assim, poderíamos ter o seguinte ambiente hipotético:
- Máquina A1 com 1.75 GB RAM e 40 GB disco
- Linux Ubuntu 15.10
- Demais configurações de ambiente (instalações de Apache, MySQL ou quaisquer outras coisas)
- Custo por hora de uso da máquina: 0,218
Este texto está sendo escrito em Dezembro de 2015, portanto, vamos utilizar o mês corrente como exemplo para realizar a conta. Se um mês de 31 dias possui um total de 744 horas e sabemos ainda que o custo por hora de uma máquina A1 com a configuração mencionada é de quase R$ 0,22 centavos, temos um custo total mensal aproximado de R$ 162,00. Certo? Veja a Figura 1 (da calculadora do Azure).
Figura 1. A calculadora apresentando os valores dos quais falamos anteriormente
O problema é que queremos economizar e portanto, precisamos reduzir custos operacionais. Sabemos que, deste total de 744 horas, utilizamos apenas 176 (22 dias úteis * 8 horas). Se realizarmos uma simples conta de multiplicação (176 * 0,218), saberemos que nosso custo virá para aproximadamente R$ 38,00. Assim, se conseguíssemos desligar a referida máquina nos momentos em que ela não é utilizada, economizaríamos cerca de R$ 124,00 mensais (162,00 – 38,00). Em um ano, estamos falando de uma economia de aproximadamente R$ 1.500,00. Legal, né?! Vamos ver então como implementar isso?
Mas, como implemento tal economia?
É aqui que entra o Azure Automation. Criaremos basicamente dois scripts Power Shell e os devidos agendamentos para que sozinho, o Azure faça o turn off e o turn on da máquina virtual de exemplo para nós.
Mas antes de seguir, você precisa ter em mente algumas coisas. Vamos a elas:
- O Azure Automation é um serviço gratuito até 500 minutos de operação mensais. Dá pra fazer bastante testes com esta primeira camada. Caso sejam necessários mais minutos, você deverá optar pela camada “Basic” e aí, cada minuto operacional, tem o custo praticamente irrisório de R$ 0,008.
- Algumas operações relacionadas ao Azure Automation ainda não estavam disponíveis no novo portal de gerenciamento do Microsoft Azure e por isso, vamos utilizar o portal antigo para as demonstrações deste post.
- Tudo o que faremos aqui também pode ser realizado de maneira muito suave via Power Shell diretamente. Podemos falar sobre isso em um futuro próximo.
- Sobre o agendamento, até a data em que este post foi escrito, apenas o modelo UTC era suportado. Atualizarei aqui assim que novidades forem informadas a este respeito. Portanto, tenha em mente o fato de que você precisará converter o horário padrão do servidor destino para UTC para que o serviço funcione corretamente.
- Para que o Azure possa modificar os estados dos serviços de destino, ele precisa de algum tipo de autorização. Hoje estão disponíveis basicamente dois modelos: 1) Integração com o Active Directory; 2) Certificados digitais; Em nosso exemplo, utilizaremos a segunda abordagem.
Agora que temos todos os parâmetros alinhados, vamos a implementação. A faremos através de duas grandes etapas:
- Criaremos um certificado para validar em tempo de execução se a assinatura sob a qual o serviço de automação irá rodar é válida. Se for o script poderá rodar normalmente, senão, um erro será gerado. Criaremos o certificado e adicionaremos ao portal do Azure.
- Criaremos os scripts e os respectivos agendamentos para rodar o “ligar/desligar” da máquina virtual.
Etapa 1 – Criando o certificado
O primeiro passo consiste na criação do certificado (com a extensão *.cer) que servirá como agente autorizador do Automation. Para isso, utilizaremos o aplicativo MakeCert.exe, disponibilizado junto com o SDK for Windows (8 e 8.1). Portanto, se você não possui este SDK, você poderá baixá-lo e instalá-lo seguindo o link a seguir.
https://msdn.microsoft.com/en-us/library/windows/desktop/hh852363.aspx
O processo de instalação é super simples, no melhor modelo “Next-Next-Finish“. Ao final, você terá o MakeCert.exe disponível no seguinte caminho em seu computador: “C:\Program Files (x86)\Windows Kits\8.1\bin\x86\makecert.exe” ou “C:\Program Files (x86)\Windows Kits\8.1\bin\x64\makecert.exe“. A Figura 2 apresenta o conteúdo destes diretórios.
Figura 2. Diretório onde se encontra o executável “MakeCert.exe”
Agora, com a ferramenta instalada, vamos criar nosso certificado. Execute o prompt de comandos do Windows como administrador, retorne o patch ao drive C:\ e lá digite a linha apresentada pela Listagem 1.
Listagem 1. Criando o certificado através do MakeCert.exe
Vamos entender o comando?
- “C:\Program Files (x86)\Windows Kits\8.1\bin\x86\makecert.exe”: aqui estamos executando o aplicativo makecert.exe e na sequência passando uma série de parâmetros que o certificado possuirá.
- -sky: a diretiva -sky permite que você especifique a forma como o certificado será usado. Usando o argumento complementar “exchange” (como é o nosso caso) você diz ao Windows que o certificado pode ser usado tanto para assinar quanto para criptografar determinada carga de informação. Outra opção é o valor “signature”, que faz com que o certificado possa ser usado apenas como assinatura de determinada informação.
- -r: ao passar este parâmetro, estamos dizendo que o certificado criado deve ser auto-assinado.
- -n: ao passar este parâmetro, indicamos que iremos informar um nome personalizado para o certificado. Ele usa uma variável CN (acrônimo para Canonical Name) e recebe como valor uma string entre aspas duplas.
- -pe: com este parâmetro dizemos que a chave primária do certificado pode ser exportada para posterior inclusão em outro arquivo. Isso é necessário porque precisaremos desta chave no arquivo de acesso que criaremos no próximo passo.
- -a: especifique na sequência o algoritmo de encriptação. Para nosso exemplo, estamos usando o algoritmo sha256. sha384 e sha512 também estão disponíveis.
- -len: especifique o tamanho da chave gerada (em bits).
- -ss: a opção -ss especifica o tipo de armazenamento de certificados na saída dos dados. Em nosso exemplo, o certificado é adicionado no modelo armazenamento pessoal padrão da máquina, como indicado pela variável “My“.
Ao pressionar o enter após digitar a linha de comando apresentada na Listagem 1, você deverá receber a mensagem de sucesso na operação. Na sequência, ao navegar até o diretório “C:\”, você visualizará o arquivo com a extensão *.cer com o nome personalizado dado por você. Algo semelhante ao que apresenta a Figura 3.
Figura 3. O certificado criado em C:\
Primeiro passo concluído. Agora, precisamos gerar um segundo arquivo de informações pessoais de acesso (*.pfx). Este arquivo fechará a chave de criptografia com o certificado. Antes deverão ser enviados para o Azure no momento apropriado. Este arquivo deverá ter o mesmo nome do certificado recém criado.
Vamos utilizar o Power Shell (não esqueça que o prompt deverá ser executado como administrador) para criar este novo arquivo, apesar de ser possível criar este arquivo de outras maneiras. Considere as linhas de código apresentadas pela Listagem 2.
Listagem 2. Criando o arquivo .pfx com base no certificado recém criado
Uma das vantagens do Power Shell em relação ao prompt tradicional de comandos é a verbosidade. É fácil entender o que está acontecendo apenas olhando as linhas de comandos. O que estamos fazendo aqui é criar uma senha de acesso, amarrá-la ao certificado recém criado (fechando a chave de criptografia) e na sequência, exportamos o arquivo .pfx com o mesmo nome do certificado no C:\. Simples, não? A Figura 4 apresenta o segundo arquivo (.pfx) recém criado.
Figura 4. Arquivo .pfx criado no C:\
Pronto. Temos tudo o que precisamos em termos de recursos offline. Agora vamos para o portal do Azure fazer os devidos uploads e as configurações iniciais.
Acesse o portal antigo do Azure (http://manage.windowsazure.com) e no menu superior direito, clique sobre a opção “Subscriptions”. No menu suspenso que se abrirá, clique sobre a opção “Manage Subscriptions/directory”, conforme apresenta a Figura 5.
Figura 5. Selecionando a opção de gestão de assinatura
Uma nova tela de gestão da assinatura irá se abrir. Nela, selecione a opção “Management Certificates”. Na barra inferior, selecione a opção upload. Nesta nova janela, navegue até a raiz do computador (C:\) e selecione o certificado criado (.cer). A Figura 6 apresenta este processo.
Figura 6. Selecionando o certificado e enviando para o Azure
Se tudo correu bem, o certificado será apresentado na listagem geral, junto com outros certificados já existentes, conforme apresenta a Figura 7.
Figura 7. Certificado carregado com sucesso
Tudo ok com o certificado. Agora podemos seguir para a segunda parte do exemplo, isto é, criar os serviços automatizados do Azure Automation com base no arquivo de autenticação (.pfx) que fecha a chave de criptografia.
Como este processo é relativamente extenso, acho melhor colocar esta segunda parte em um novo post. Assim, paro por aqui com a certeza de que tudo funcionou perfeitamente.
Por hora é isso. Forte abraço e até a próxima!
Pingback: Microsoft Azure Automation: ligando e desligando servidores – Fabrício Sanchez