Provisionando Lab com AZ CLI + Bash
Quem nunca precisou de um lab, seja para estudar alguma tecnologia nova ou realizar algum teste?
Com a flexibilidade em ambientes cloud isso facilita muito no dia a dia e ter a possibilidade de criar e recriar um ambiente com alguns cliques conseguimos agilidade.
Provisionar um recurso pelo painel pode ser bem simples e intuitivo, porém com o poder das ferramentas de linha de comando conseguimos automatizar algumas tarefas. Atualmente temos várias ferramentas para esse tipo de provisionamento por exemplo:
Inclusive tem um conteúdo bacana sobre Terraform publicado pelo Vanderlei Mota aqui.
Costumo utilizar az cli + bash no dia a dia para automatizar algumas tarefas e economizar alguns minutos do meu dia. Em breve compartilho alguns scripts que utilizo.
A documentação da Microsoft é bem ampla sobre a ferramenta de linha de comando e possui diversos exemplos de utilização dos comandos.
O ambiente que estou utilizando para esse tutorial é baseado em Linux e com o az cli instalado e devidamente logado na minha subscription.
Após seguir o processo de instalação do az cli, basta efetuar o login:
A janela do browser abrirá e basta você logar com a sua conta.
Basta fechar essa janela e voltar para o Shell.
Caso você possua mais de uma subscription, garanta que o campo “isDefault” esteja como True na subscription que você deseja utilizar.
Você pode consultar qual está como default pelo comando:
$ az account list -o table | grep -i true |
Caso precise alterar a subscription, basta configurar ela:
$ az account set –subscription “Nome da sua Subscription” |
Agora já temos nosso cli devidamente configurado.
Vamos provisionar uma infra básica contendo 2 servidores linux, dentro da mesma VNET e com acesso restrito a porta SSH (22) somente para o nosso IP de origem.
Vamos executar o script parte a parte para entender os passos:
Definir os valores para as variáveis, nome de RG, location, VNET, Subnet, SO e size:
resourceGroup=Lab-Tera resourceLocation=eastus vnetAddress=10.0.0.0/16 subnetAddress=10.0.0.0/24 vnetName=Vnet-Lab-Tera subnetName=Subnet-Lab-Tera nsgSubnetName=NSG-Subnet-Lab-Tera vmImage=UbuntuLTS vmSize=Standard_B1ls |
Criando Resource Group
$ az group create –name $resourceGroup –location $resourceLocation |
Criando VNet
$ az network vnet create \ –resource-group $resourceGroup \ –location $resourceLocation \ –address-prefix $vnetAddress \ –name $vnetName |
Criando NSG para a Subnet
$ az network nsg create \ –resource-group $resourceGroup \ –name $nsgSubnetName |
Criando Subnet e adicionando a NSG
$ az network vnet subnet create \ –resource-group $resourceGroup \ –vnet-name $vnetName \ –name $subnetName \ –address-prefixes $subnetAddress \ –network-security-group $nsgSubnetName |
Atribuindo o ID da subnet para utilizar na criação das VMs
$ subnetId=$(az network vnet
subnet show \ –resource-group $resourceGroup –name $subnetName \ –vnet-name $vnetName –query id -o tsv) |
Criando 2 VMs
$ for i in `seq 1 2`; do az vm create \ –resource-group $resourceGroup \ –name VM$i \ –image $vmImage \ –size $vmSize \ –generate-ssh-keys \ –subnet $subnetId \ –no-wait done |
Pegando o IP de origem para criar NSG de entrada para as VMs
$ sourceIp=$(curl ifconfig.me) |
Criando regra de entrada na subnet para SSH com IP de origem
$ az network nsg rule create \ –resource-group $resourceGroup \ –nsg-name $nsgSubnetName \ –name Allow-Source-Home \ –priority 300 \ –source-address-prefixes $sourceIp/32 –source-port-ranges ‘*’ \ –destination-address-prefixes ‘*’ –destination-port-ranges 22 –access Allow \ –protocol Tcp –description “Allow SSH from my home” |
Criando regra na NSG das VMs para SSH com IP de origem
$ for i in `seq 1 2`; do while [ ! $(az network nsg rule list -g $resourceGroup –nsg-name VM${i}NSG) ]; do echo ‘Aguardando NSG ser criada…’ done |
az network nsg rule create \ –resource-group $resourceGroup \ –nsg-name VM${i}NSG \ –name Allow-Source-Home \ –priority 300 \ –source-address-prefixes $sourceIp/32 –source-port-ranges ‘*’ \ –destination-address-prefixes ‘*’ –destination-port-ranges 22 –access Allow \ –protocol Tcp –description “Allow SSH from my home” |
az network nsg rule delete \ –resource-group $resourceGroup \ –nsg-name VM${i}NSG \ –name default-allow-ssh done |
O usuário criado na VM é o mesmo da sua sessão no shell e as chaves são as mesma que estão no seu perfil.
Pegando os IPs Públicos
$ for i in `seq 1 2`; do az vm show -d -g $resourceGroup -n VM$i –query ‘[name,publicIps]’ -o tsv done |
Pronto, seu Lab está provisionado.
Para deletar o Lab basta executar:
$ az group delete -n Lab-Tera |
Caso queira escolher outro size, pesquise pelo cli o nome do size e troque na variável $vmSize
$ az vm list-sizes –location “eastus” -o table |