Azure ARM Templates: Como eu monto uma infra pra um AlwaysON em minutos?

Tempo de leitura estimado: 9 minutos

O Azure já está aí há algum tempo e eu confesso: demorei pra aceitar ele na minha vida. E uma das coisas que me distanciavam dele era criar um ambiente no portal:

  • Escolhe máquina, escolhe tamanho de máquina, escolhe a imagem…
  • Escolhe virtual network, dá nome, define ip define subnet…
  • Disco, escolhe tamanho, escolhe tipo, etc.
  • Coloca usuário, coloca senha…
  • Ip público, configura , nome dns…  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah, que saco isso!
    http://www.memes.at/faces/bloody_keyboard.gif

    eu no portal do azure criando um ambiente pra testar um AlwaysON

Olha o tanto de configuração pra subir 1 máquina… E se eu quiser subir um ambiente em cluster pra testar alwayson? Rapaz… Imagina… Faz tudo isso ai pra cada máquina que precisa subir (domain controller, nodes, etc.)… Já viu como é configurar um domínio? Configura o AD, adiciona cada máquina… Brincando, só pra preparar o ambiente pra você conseguir montar um cluster do Windows, voce deve levar umas 4 horas… Só preparar o ambiente…

Ah Rodrigo… Mas tem o Powershell…

Tá… É até aceitável… Mas tenho que instalar módulos do Azure toda vez que estiver numa máquina nova, logar, etc… Confesso que gosto dessa ideia: Abre o portal do Azure e escolhe o que você quer… Mas não precisa escolher tanto né… Que tal somente o básico: usuário, senha, imagem… O resto, bem que podia ser automático hein…

É ai onde entra o Azure Resource Manager Templates (daqui pra frente chamarei de ARM Templates). A ideia disso é que você possa descrever os recursos usando um arquivo de configuração, que neste caso é um JSON com um formato específico. Eu posso parametrizar e executar pelo powershell, pelo portal, e onde mais conseguir interpretar esse JSON! Simplesmente, genial!

Se você ficou interessado e quer começar vá neste link. O meu objetivo aqui é compartilhar os meus templates e fazer uma rápida explicação de como usá-los! Também mostrarei como você pode usar estes templates no portal.

O processo é simples:

  • Alguém escreve um JSON descrevendo os recursos. Por exemplo:
    • Virtual Machines
    • Virtual Network
    • Managed disks
    • E tudo mais de recursos que o Azure te provê!
  • Este mesmo alguém pode parametrizar… Por exemplo, ele pode definir um parâmetro que recebe o nome do usuário ou o tamanho da máquina.
  • Então ele disponibiliza esse template em algum lugar para que alguém no mundo possa usá-lo
  • Você pode pegar esse template e usar na sua conta do Azure, cadastrando ele no portal ou fazer o download para sua máquina e usar com powershell, por exemplo!
      • Isso é chamado de Deploy (ou, no bom português, Implantação).
      • Ou seja, é a hora em que você usa o template, especifica os parâmetros conforme sua necessidade e tcharam: O Azure cria tudo pra você!

Quem escreve e disponibiliza o template também disponibiliza a documentação (ou, pelo menos, deveria): O quê o template faz, explica os parâmetros, etc.! E nada melhor que o github para ajudar a organizar isso! A Microsoft criou um repositório só para hospedar os mais variados templates criados pela comunidade em https://github.com/Azure/azure-quickstart-templates

Eu resolvi, por enquanto, manter os meus templates no meu repositório: https://github.com/rrg92/azure-arm

No próprio repositório eu explico como ele está organizado (e ainda não está no padrão da Microsoft, mas pretendo deixar em breve!)

Atenção aos custos
Aqui vale um alerta: Caso deseje usar um dos templates que eu estou disponibilizando, tenha ciência que você será cobrado pelos recursos que você subir. Recomendo revisar e criar por sua própria conta e risco.

Como importar os templates no portal do Azure

Você pode deixar os templates de sua preferência criados na sua conta do Azure. Com isso, eles ficam salvos na sua conta e você pode acessar de qualquer lugar, e inclusive, fazer o Deploy deles diretamente do portal. E você não paga nada mais para manter os templates criados lá. Só paga pelos recursos que os templates criam (na hora em que for fazer o Deploy).

  1. Acesse o portal do Azure
  2. Na barra de pesquisa, digite template (ou modelos, se estiver em português)

  3. Você vai cair na tela com a lista de templates que você já importou:

  4. Clique no botão “Add” (Adicionar, em português). Então uma tela semelhante a essa irá abrir:

  5. Na seção General/Geral, preencha o nome e a descrição do seu template. Coloque algo que facilite seu entendimento sobre o que o template faz:

  6. Clique em ok no final e ele vai te levar para a seção ARM Template (Modelo ARM):

  7. Copie e cole o JSON do seu template aí (pode colar por cima de tudo isso). Esse JSON deverá ser disponiblizado pelo autor do template, de alguma maneira. Por exemplo, eu peguei este meu

  8. Clique em “OK” no final dessa coluna e depois em “Add”(Adicionar) no final da tela.
    Se o JSON estiver ok ele vai salvar e voltar a lista de templates. Clique no botão de refresh/atualizar para que ele atualize a lista com o seu novo template.

Fazendo o Deploy de um Template usando o Portal

Uma vez que você salvou os seus templates fazer o deploy é muito simples:

  1. Acesse o portal, e vá para a lista de templates, como fez anteriormente
  2. Na lista de templates, escolha o template que deseja fazer o Deploy. No meu caso, vou escolher um chamado sql-ad

  3.  Na tela que abriu, clique no botão “Deploy” (em português será Implantar):

  4. Então você irá para a página onde você configura o deploy. Isto é, você vai especificar algumas configurações e os valores dos parâmetros do template:
  5. A parte “Basics” permite que você especifique informações padrões para qualquer template:
    1. A assinatura (subscription)
    2. O resource group (você pode criar uma na hora)
      O Resource Group é onde ele irá criar por padrão… O autor do template pode escolher usar este resource group ou definir um diretamente para cada serviço que ele for criar… Por isso, e outras questões, voce deve sempre entender o que o template faz e usar autores de sua confiança!
    3. Localização (região)
      Do mesmo modo, o autor pode optar criar em regiões diferentes, e este parâmetro apenas indica onde o Resource Group será criado e pode ser usado pelo autor, ou não.

  6. A segunda parte é a lista de parâmetros definidos no templates. Esta irá variar dependendo de cada template.
    1. No meu caso, o meu template tem vários parâmetros já preenchidos, como os IP das máquinas envolvidas, quantidade de discos em cada SQL, imagens, etc.
    2. Somente três parâmetros são obrigatórios: O nome do usuário, senha e nome do domínio  (o * indica que é obrigatório.
      Se clicar no ícone com um “i” dentro da bolinha, você pode ter mais detalhes do parâmetro. Essa é uma descrição fornecida pelo autor.
    3. E por fim, altere os parâmetros que julgar necessário
    4. No meu caso, deixei assim e não alterei o resto dos parâmetros:

  7. Após revisar tudo, você pode ir para o final da página, ler, aceitar os termos e clicar no botão para COMPRAR:



    Aqui vou reforçar novamente. Os templates vão criar recursos no Azure, igual criaria se você usasse um outro caminho… Então, dependendo do que você especificou o azure irá te cobrar conforme os preços do recurso. Garanta que você entendeu tudo o que o template cria e certifique-se de revisar ao final, tudo o que foi criado.


  8. Ao clicar no botão, ele irá fazer algumas validações. Dependendo da sua assinatura escolhida, região, etc., ele pode disparar alguns erros, como impossibilidade de criar um recurso por limitações da sua conta, etc.  Se tudo de certo, ele vai iniciar o deploy e você poderá acompanhar, bastando clicar nesse link que irá aparecer na suas notificações (ícone da campainha no canto superior direito):
  9. Nesta tela você poderá ver todo o andamento e os recursos no qual ele está trabalhando. No meu caso, o template cria uma série de recursos, como discos, ip públicos, máquinas virtuais, scripts, etc:

  10. Ele vai te mostrar cada  recurso que está sendo criado e só resta esperar. No caso desse template, ele pode demorar conforme o tamanho dos recursos escolhidos. Com os valores padrões, ele demora em média cerca de 30min.
    Neste momento podem ocorrer erros. Fique de olho sempre. Você também pode encontrar os deployments em andamento em um determinado resource group:

A seguir vou fazer uma rápida explicação sobre como utilizo os templates que disponibilizei no meu git!

 

TEMPLATE X-VM

Este é útil para criação rápida de várias máquinas virtuais, que estão na mesma rede. Este template cria uma VIRTUAL NETWORK, as subnets, interfaces e ip públicos para cada máquina virtual. Você especifica a quantidade de máquina virtuais informando o ip de cada um delas no parâmetro “Ips”. Os parâmetros obrigatórios são o usuário e senha, e todas as máquinas criadas usarão estes mesmos valores. Por padrão ele sobe duas máquinas, cada uma com o seu IP privado e público.

Eu uso ele quando eu quero subir um SQL com uma versão específica ou quando eu preciso de um espaço específico para testar algo. Por exemplo, na Power Tuning, eu atuei num caso onde um cliente perdeu a máquina por causa de um ransomware! Eles resolveram refazer a máquina, mas era demorado. Até lá, nós precisávamos agilizar os testes e descobrir se os backups mais recentes estavam íntegros. Enquanto a equipe preparava a máquina principal,  eu usei este template para subir um SQL e fazer um restore de teste e confirmar que eles estavam íntegros. Como os backups eram grandes, trazer para a minha máquina iria demorar muito eu não teria o espaço suficiente! Porém, esse template me ajudou a ter rapidamente um ambiente SQL Server na mesma versão onde eu pude testar o backup.

Em menos de 5 minutos, eu consegui subir uma máquina já com o SQL instalado e a quantidade de discos que eu precisava e pedi que fizessem o upload os arquivos usando o one drive. Então, rapidamente conseguimos fazer os testes de restore e certificar que o backup estava ok.

O objetivo central desse template é poder subir quantas máquinas você quiser, na mesma rede. Por padrão, o template cria duas máquinas com imagens de um Windows Server 2019 Datacenter. Cada máquina usa a imagem Standard D4S V3 e usa Spot.

 

TEMPLATE SQL-AD

Esse é meu favorito! Uma dos maiores limitadores para se montar um ambiente de alta disponibilidade com SQL Server, é ter um domínio. Montar um domínio profissional com Active Directory não é pra qualquer um e requer um amplo conhecimento. Mas, felizmente, quando o assunto é estudar e testar, precisamos apenas de um domínio básico para construir um cluster, AlwaysOn, etc.

Esse template requer que você especifique apenas três informações:

  • Nome do usuário admin
  • Senha
  • Nome do domínio (ex.: thesqltimes.corp)

Então, magicamente, por padrão, ele constrói uma infraestrutura completa com três máquinas:

  • 1 máquina, que será o domain controller (por padrão é um Windows core para que se usa uma máquina muito pequena)
    • Após subir a máquina ele transforma ela em Domain Controller com base no domínio que você especificou no parâmetro
  • 2 máquinas com SQL instalado
    • Você pode ainda especificar a imagem SQL que você quiser (versão e edição)
    • E também, se tiver recurso na sua conta, pode subir quantos máquinas SQL voce puder

Imagina fazer tudo isso na mão? Imagina configurar três máquinas, três ip públicos, três interfaces… Todo esse processo, com os parâmetros default do template, leva em média, uns 30 minutos, dependendo das configurações da máquina. Subir as máquinas é relativamente rápido. Dependendo do tamanho delas, a instalação do domínio e inclusão de cada máquina é quem demora mais.

Uma vez no ar, eu entro e configuro um cluster e subo AlwaysON! Eu uso ele para qundo quero testar o AlwaysOn. Até hoje não usei ele para subir um ambiente real de produção… Quem sabe um dia…

E quem sabe tambem um dia eu não disponibilize um template que faça tudo isso também? Sobe máquinas, configura domínio, configura o AlwaysON…

Com o Azure e estes templates, por alguns centavos por mês  eu consigo subir ambientes inteiros para explorar o máximo que eu posso sobre o SQL Server e o próprio Azure, e o melhor: foco no SQL!

Estrutura e domínio com os parâmetros default

3 máquinas, cada uma com sua interface conectadas na mesma rede virtual. 1 AD e 2 SQL, inclusos no domínio!

Não deixe de ficar de olho no repositório e acompanhar as novidades! Se você tiver dúvidas de como usar estes templates, abra um issue no git que tento explicar melhorar e também tento melhorar documentação!

Até lá, aproveite esse recurso fantástico do Azure para poupar tempo e focar no seu SQL Server!

E se voce quiser aprender mais sobre AlwaysON, Alta Disponibilidade, Disaster Recovery, etc.,  confira os cursos de HADR na plataforma de cursos da PowerTuning! O módulo 01 é FREE!

Compartilhe este post!

Leave a Reply