ARM: Azure Resource Manager, o básico pra viver.

Anselmo Borges
Rescue Point
Published in
7 min readJan 24, 2022
Um Data Engineer metido a Devops explicando IaC

Esse artigo é a base de um plano mirabolante que estou criando. Mais pra frente eu explico o que eu estou bolando…

Vai vir coisa boa ae!

O que é o ARM?

A Azure é uma coleção de serviços e recursos disponíveis em um portal, onde você os contrata e paga pelo uso. Mas como automatizar a criação desses ambientes na ausência do portal Web?

Todas as implantações como código:

  • Criação de rede
  • Criação de Storage Account e configuração dentro da rede criada
  • Criação de VM e uso de um Management disk desse Storage Account
  • Atribuição de uma chave do Azure Vault? Mas não tem? Cria um no ARM também!

Essas e muitas outras funcionalidades com um código, que podem ser "versionadas", acompanhadas e reaproveitadas caso necessário.

Isso é o ARM!

Como se usa o ARM?

Dei o exemplo do uso dele sem a necessidade do portal, mas é possível inserir o código no portal e coloca-lo pra executar, outra vantagem é a criação do ambiente pelo portal e gerar o código ARM para reaproveitamento posterior.

Sendo assim posso usa-lo via Portal ou API Rest que veremos mais pra frente. Também posso usar os SDKs Microsoft pra Linguagens como C++, Java e Python, onde via um programa posso criar uma infra necessária, temporariamente ou definitiva.

Um outro método de usar o ARM é via PowerShell ou Azure CLI.

O que eu preciso saber sobre o ARM?

É que se trata de uma Infra as a Code fácil de usar mas com alguma regrinhas que se seguidas podem evitar muitos problemas.

Na Cloud o Hardware teoricamente não existe e tudo é criado por código, a vantagem de usar o código ao seu favor é evitar possíveis erros em execuções manuais ou via portal. Por exemplo, você precisa criar os ambiente de DEV, HML e PRD na sequencia, lógico que eles tem diferenças de size entre eles, mas isso entra como variável, sua implantação seria bem mais rápida e pontual do que logar no portal e criar ambiente por ambiente.

Outro ponto é que cada recurso tem sua dependência, por exemplo, não posso criar a Maquina virtual por exemplo antes da rede, não posso usar um Managed disk sem um storage Account, não consigo liberar uma porta sem Um security group e coisas assim.

A inversão dessas ordens pode quebrar seu script, por isso é recomendado dividir o projeto por recurso e criar uma ordem coerente na execução do script. Se liga no exemplo abaixo.

O campo "dependOn" do exemplo acima

No campo dependsOn eu seto as dependências para a criação dessa VM por exemplo, como rede e storage account que proíbem que eu prossiga sem elas, mas vamos explicar gerando um ARM.

Como Gerar ARMs?

Vamos partir do princípio que não tenho nada e quero começar a usar o ARM na Azure, então vamos fazer o seguinte, vamos criar uma maquina virtual básicona, chamada rescue01, com size B1 e Ubuntu como sistema operacional.

Agora entra nossa primeira geração de ARM.

Gerando de uma maquina criada ou em criação

Pelo portal da Azure durante a criação dessa VM, na ultima tela de Review, existe uma opção pra fazer o download do ARM da VM, se liga.

Clique em Download a template for automation

Vou deixar pra mostrar o conteúdo depois, a idéia desse tópico é mostrar as possibilidades de templates por enquanto.

Gerando um ARM de um resource group inteiro

No exemplo abaixo eu tenho um resource group chamado dlc-rg que possui um storage account e um Data Factory já criados, vamos supor que quero levar esse ambiente de teste para DEV, HML e PRD. Eu posso simplesmente exportar o ARM, que por sua vez vai gerar 2 arquivos:

  • Template: A base da sua implantação, bem a casca mesmo, sem informações de nomes, redes, IPs, basicamente quais serviços apenas você vai criar.
  • Parameters: O arquivo que possui as informações que alimenta esse template, por exemplo, qual rede vou usar, qual nome dos meus recursos, tipo de storage account que vou criar, liberações de firewall entre outras.

Imagine, se seus recursos são os mesmos nos 3 ambientes, você só entra com um arquivo de parâmetros para cada um deles (mesmo porque cada ambiente tem um size e rede diferente) e coloca pra rodar de forma automatizada, em um deploy mais rápido e sem erros, se liga como exporto esse cara.

Clicamos em Export template no menu lateral dentro do perfil do resource group.
Não pega nada esses dados que é um ambiente de sandbox que vou apagar rs

Note que consigo gerar os 2 tipos de arquivo, o Template e o Parameters, inclusive tenho a opção de gera-lo ou não. Depois podemos fazer o download dos arquivos, adicionar a library (o que falaremos mais pra frente) , fazer o deploy caso ele não exista e visualizar o template que é um recurso muito legal, dá uma olhada.

Ele me mostra um desenho do que o template vai criar a interligação entre os recursos

OBS: Nesse desenho não mostrou meu Data Factory, porque se você olhar no slide anterior a versão V2 dele ainda não suporta ser exportada como template, esse ai teríamos que criar na mão mesmo por enquanto mas é rapidão também!

Azure Quickstart templates

Uma outra opção de templates é uma base da própria Azure com alguns cenários distintos, onde você pode pegar um de acordo com seu projeto e dar uma customizada se necessário, são os Quickstart templates.

Você pode acessá-los nesse link abaixo:

Por exemplo vou baixar um template que já cria todo o esquema de um EventHub (o Kafka da Microsoft), consumer group e tudo que ele precisa pra viver.

Procura ele ai e vamos dar uma olhada.

Ele já te dá varias opções logo de cara:

  • Ir pro GitHub e baixar o repositório
  • Rodar já no seu portal Azure caso esteja logado
  • Executar via PowerShell
  • Executar via Azure CLI

Tem outras opções mas nem vou entrar no caso, o ponto legal é que se você tem algum case legal de infra criada no Azure consegue compartilhar seu template também, legal né? Tornando um Hub e evitando retrabalho, eu mesmo vou pesquisar muita coisa aqui, rs.

A preguiça é a base do meu sucesso! rs

Vamos dar uma olhada no conteúdo desse template:

Como disse acima são várias opções.

Vamos botar pra rodar aqui pra ver o que vai dar…

Tela inicial pós clique na parada.

Como podem ver eu posso logo de cara, editar template, os parâmetros e dar uma visualizada no que vai ser criado. Como sou curioso e não quero pagar uma fortuna vou dar uma olhada.

Pra minha alegria nada muito elaborado… rs

Agora vou preencher os dados e mandar fazer o deploy.

Preenchi a parada e já contou como válido e pronto pra deploy

Como podem ver acima eu vou criar um EventHub com os seguintes dados:

  • Resource Group: rescue-rg
  • Região: Brazil South
  • Namespace (nome do Eventhub): eventhubrescue001
  • SKU: Standard
  • Capacidade (partitions e tal): 1
  • Nome do tópico: topicorescue
  • Consumer Group: app01

Se não for o "tópico Kafka" mais rápido que você já criou, eu não sei qual é! Só clicar no CREATE e boa.

Demorou míseros 38 segundos…

Agora só ver se a mágica aconteceu mesmo…

Um eventhub pronto pra uso mais rápido que um pastel de queijo.

Criação de ARM via Visual Studio

Por último se você é daqueles brutos que quer fazer a parada na unha, do zero, também tem uma opção pra você, developer monstro, zica do código, (só deixo claro que não sou esse cara, rs).

Existem 2 extensões no Visual Studio Code que quero deixar de dica aqui, baixe essas 2:

Extensões malandras
  • Azure Resource Manager (ARM) Tools: Essa extensão valida o código, tem snippets, auto completa o código e se você já tem a sua conta do Azure conectada no Visual Studio Code ela até faz o deploy pra você.
  • ARM Template Viewer: Esse ai é aquela mesma visualização que mostrei que era no portal só que no Visual Studio Code, ela precisa do .Net core pra ser usada (é tipo um java, facinho de instalar). Se liga na exibição abaixo de um template exemplo de maquina virtual que fiz.
Achei legal a integração e dependência dos recursos criados.

Achei muito foda as possibilidades que podem aparecer daí por isso a minha animação de falar sobre o assunto, eu quero automatizar todo e qualquer deploy de ambiente da minha área usando ARM. Após isso quer usar o Azure Devops criando uma esteira de dados automatizada nos ambientes de DEV, HML e PRD.

BEMMM LOCOOOO!

Era isso por aqui, mais pra frente quero fazer alguns outros artigos fazendo deploy de ARM com Azure CLI e PowerShell, até faria nesse mas ia dar um livro e não um post.

Nos vemos no próximo deixa a palminha, segue a gente ai que sempre tem coisa boa por aqui.

Abraço!
Anselmo Borges.

--

--

Anselmo Borges
Rescue Point

Bigdata Engineer, Cloud Architect, Nerd, Alcoholic, Brazilian Jiujitsu Black belt and hide and seek World champion.