Programa
Gerenciar a infraestrutura em nuvem costumava significar passar um monte de tempo clicando em portais da web e navegando por menus sem fim. Depois de meses frustrado com processos manuais, descobrir a CLI do Azure mudou completamente a minha forma de lidar com o gerenciamento de recursos na nuvem. gerenciamento de recursos na nuvem. Este não é só mais um guia de instalação; é o seu roteiro para dominar a ferramenta multiplataforma mais poderosa da Microsoft para administração do Azure.
Comece com o Azure Nuvem Shell para ter acesso imediato sem a complexidade da instalação.
A CLI do Azure oferece uma experiência consistente e poderosa para gerenciar recursos do Azure em todos os principais sistemas operacionais.
O que é o Azure CLI?
A CLI do Azure é a maneira mais direta de controlar seus recursos na nuvem. Ele substitui as limitações de um navegador da Web por uma interface poderosa e programável que se comunica diretamente com as principais APIs do Azure. Isso te dá o poder de automatizar em grande escala, com comandos consistentes e confiáveis em qualquer sistema operacional.
O que eu curto na CLI é como ela me deixa explorar os serviços enquanto aprendo e, depois, colocar essas etapas exatas num script quando estou pronto pra construir de verdade. O segredo não é decorar comandos, mas sim aprender a pedir ajuda com as opções - az find ou ---help.
A CLI do Azure usa o modelo do Gerenciador de Recursos do Azure, dando acesso consistente a todos os serviços do Azure por meio de uma estrutura de comando unificada. Essa escolha arquitetônica significa que, seja você gerenciando máquinas virtuais, contas de armazenamento ou configurações de rede complexas, você está trabalhando com a mesma API subjacente que alimenta o próprio Portal do Azure.

Todos os comandos da CLI do Azure são unificados por meio do Azure Resource Manager (ARM), o mesmo mecanismo que alimenta o Portal do Azure.
CLI do Azure vs Portal do Azure
Depois de gerenciar centenas de implantações do Azure por meio das duas interfaces, a CLI se torna essencial para:
- Automação e escalabilidade: Os scripts podem gerenciar várias coisas ao mesmo tempo, algo que não dá pra fazer manualmente no Portal.
- Integração de controle de versão: Seus comandos de infraestrutura viram código, são programados e revisados como qualquer outro artefato de software.
- Consistência entre plataformas: Os mesmos comandos funcionam da mesma forma nos ambientes Windows, Linux e macOS.
- Velocidade e eficiência: Administradores experientes podem fazer operações complexas em segundos, em vez de minutos.
Como instalar o Azure CLI
O primeiro passo é instalar o Azure CLI, mas é aí que vejo muita gente se atrapalhando. O jeito certo de fazer isso num Mac pessoal é totalmente diferente do que uma grande empresa precisa para seus computadores Windows bloqueados. Vamos dar uma olhada nas opções para que você acerte na primeira tentativa e evite problemas com versões incompatíveis ou administradores de TI frustrados.
Instalação em diferentes plataformas
Métodos de instalação do Windows
Os usuários do Windows têm vários caminhos de instalação, cada um adequado a diferentes requisitos organizacionais:
Gerenciador de Pacotes WinGet (Recomendado para desenvolvedores individuais):
winget install -e --id Microsoft.AzureCLI
O comando acima usa o gerenciador de pacotes moderno do Windows para atualizações automáticas e instalações limpas.
Instalador MSI (ideal para implementações empresariais):
Baixe o MSI mais recente na página oficial de download do Azure CLI e siga o assistente de instalação. Esse método dá mais controle sobre os diretórios de instalação e a integração do sistema.
Instalação do PowerShell MSI (ótimo para scripts de configuração automáticos):
$ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; rm .\AzureCLI.msi
Esse script do PowerShell baixa, instala e limpa o pacote MSI automaticamente.
Use o WinGet para máquinas de desenvolvimento e instaladores MSI para implantações de produção.
Instalação do Linux e do WSL
As distribuições Linux precisam de gerenciadores de pacotes diferentes, e entender a sua distribuição específica evita erros comuns de instalação:
Ubuntu/Debian (apt):
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Esse script de instalação configura automaticamente o repositório de pacotes da Microsoft e instala o Azure CLI.
Red Hat Enterprise Linux/CentOS Stream (dnf):
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo dnf install -y https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm
sudo dnf install azure-cli
Esses comandos importam a chave de assinatura da Microsoft e configuram o repositório de pacotes antes da instalação.
Script de instalação universal:
curl -L https://aka.ms/InstallAzureCli | bash
Esse script detecta sua distribuição e usa automaticamente o gerenciador de pacotes apropriado.
Instalação no macOS
Os usuários do macOS aproveitam o gerenciamento de pacotes do Homebrew:
brew update && brew install azure-cli
Esse comando atualiza as listas de pacotes do Homebrew e instala a versão mais recente do Azure CLI.
Para sistemas sem Homebrew:
curl -L https://aka.ms/InstallAzureCli | bash
Abordagem do contêiner Docker
Executar o Azure CLI em contêineres Docker oferece isolamento total:
docker run -it mcr.microsoft.com/azure-cli:latest
Esse comando inicia um contêiner interativo com o Azure CLI pré-instalado e configurado.
Azure Nuvem Shell: Opção sem instalação
O Azure Cloud Shell dá acesso imediato à CLI sem precisar instalar nada no seu computador. Esse ambiente baseado em navegador já vem com a versão mais recente do Azure CLI e inclui ferramentas extras, como terraform, kubectl e vários editores de texto.
Verificando versões e atualizações
Depois de instalar, dá uma olhada nas informações completas da versão pra conferir se tá tudo certo:
az version
Esse comando mostra um JSON detalhado com a versão do Azure CLI, os componentes principais e as extensões instaladas.
Entender essa saída ajuda a resolver problemas de compatibilidade e garante que seus scripts sejam direcionados às versões apropriadas da CLI. A Microsoft publica notas detalhadas sobre o lançamento que documentam as alterações significativas e os novos recursos.
Sempre dá uma olhada na compatibilidade das extensões quando atualizar as versões do Azure CLI.
Autenticação com o Azure CLI
A autenticação é a base de segurança da sua experiência com a CLI do Azure, com mudanças recentes nas políticas que mudaram completamente a forma como as organizações lidam com o gerenciamento de credenciais. As estratégias modernas de autenticação precisam equilibrar os requisitos de segurança com a eficiência operacional, principalmente porque a Microsoft está aplicando padrões de autenticação mais rígidos em todos os serviços do Azure.
Métodos de autenticação
Login automático no Azure Cloud Shell
O Nuvem Shell faz a autenticação automaticamente usando sua sessão atual do Portal do Azure. Essa integração perfeita elimina a complexidade da autenticação para casos de uso interativos, tornando-a perfeita para tarefas administrativas ad hoc e de aprendizagem.
Login interativo
A abordagem padrão de autenticação usa o fluxo de código do dispositivo:
az login
Esse comando abre o seu navegador padrão para autenticação do Microsoft Entra ID com tratamento automático de MFA.
Para ambientes sem interface gráfica:
az login --use-device-code
Esse comando mostra um código de dispositivo para autenticação em https://microsoft.com/devicelogin a partir de qualquer dispositivo conectado à Internet.
Autenticação de identidade gerenciada
Os recursos do Azure fazem a autenticação usando identidades gerenciadas:
az login --identity
Esse método de autenticação elimina a sobrecarga de gerenciamento de credenciais para aplicativos em execução no Azure.
Autenticação do principal de serviço
Abordagem baseada em credenciais legadas (agora não compatível sem federação de identidades de carga de trabalho):
Esse método de autenticação por senha é o principal sistema afetado pela implementação da MFA em setembro de 2025. Os scripts que usam esse método provavelmente não vão funcionar e precisam ser atualizados.
az login --service-principal --username <app-id> --password <password> --tenant <tenant-id>
Esse comando faz a autenticação usando credenciais do aplicativo para cenários automatizados.
Navegando pela aplicação da MFA em outubro de 2025
A partir de 1º de outubro de 2025, a autenticação multifatorial (MFA) obrigatória da Microsoft vai começar a valer. Se você usa entidades de serviço com autenticação baseada em senha, seus scripts de automação vão parar de funcionar depois dessa data. Essa é a mudança mais importante na automação da CLI do Azure em anos.
Essa atualização de segurança muda completamente a forma como as organizações lidam com a automação da CLI do Azure. Isso afeta os padrões de autenticação do principal de serviço e exige uma mudança para identidades de carga de trabalho em muitos cenários automatizados.
Sua automação está em risco. Priorize a migração para a federação de identidades de carga de trabalho agora para evitar interrupções no serviço em 1º de outubro.

Seu plano de ação em quatro etapas para corrigir falhas na automação e cumprir os novos requisitos de MFA.
Gerenciando assinaturas
Os ambientes de produção geralmente exigem um gerenciamento explícito de assinaturas:
az account list --output table
az account set --subscription "Your Subscription Name"
Esses comandos mostram as assinaturas disponíveis e definem o padrão para os comandos seguintes.
Tokens de acesso
Cenários avançados exigem que você mexa diretamente nos tokens de acesso:
az account get-access-token
Esse comando mostra os tokens de acesso com detalhes de validade para usar em programas.
Introdução aos comandos da CLI do Azure
O domínio do comando começa com a compreensão da filosofia organizacional e dos mecanismos de descoberta da CLI. Em vez de decorar centenas de comandos, o segredo é aprender a navegar com eficiência pelo vasto ecossistema de serviços do Azure através do sistema de ajuda inteligente da CLI.
Encontrando comandos
Os recursos de descoberta da CLI do Azure diminuem bastante a curva de aprendizado:
az find "virtual machine"
A pesquisa com inteligência artificial encontra comandos relevantes com exemplos de uso.
Para detalhes específicos do comando:
az vm create --help
Esse comando de ajuda mostra parâmetros, subgrupos e exemplos práticos pra você dar uma olhada rapidinho.

Use “az find” para obter sugestões baseadas em IA e descobrir o comando exato que você precisa.
Estrutura de comando
A CLI do Azure segue uma estrutura hierárquica consistente: az [parameters]
Exemplo de criação de máquina virtual:
az vm create --resource-group myResourceGroup --name myVM --image UbuntuLTS --admin-username azureuser --generate-ssh-keys
Esse comando cria uma máquina virtual com os parâmetros de configuração especificados.
Argumentos globais
Vários argumentos funcionam em todos os comandos:
- --output ou -o: Controla o formato de saída (json, tabela, yaml, jsonc, tsv)
- --query: Filtra os resultados usando a sintaxe JMESPath
- --verbose: Fornece informações detalhadas sobre a execução
- --debug: Mostra todos os detalhes da solicitação/resposta HTTP
Use --output tabela para resultados legíveis e --output json para processamento de script.
Modo interativo e recursos de produtividade
O modo interativo transforma a experiência da linha de comando por meio de assistência inteligente e orientação contextual. Essa abordagem preenche a lacuna entre aprender novos comandos e executá-los com confiança, oferecendo validação em tempo real e sugestões que aceleram as fases de descoberta e execução do domínio da CLI.
Modo interativo da CLI do Azure
O modo interativo oferece uma experiência aprimorada da linha de comando:
az interactive
Esse comando inicia o modo interativo com autocompletar comandos, dicas de parâmetros e ajuda contextual.

O modo interativo do Azure CLI dá sugestões inteligentes, transformando comandos complexos numa experiência guiada.
Completar com a tecla Tab
Maior produtividade com a integração do shell:
Bash:
echo 'source /etc/bash_completion.d/azure-cli' >> ~/.bashrc
Esse comando ativa o preenchimento automático por tabulação para comandos da CLI do Azure no Bash.
PowerShell:
Register-ArgumentCompleter -Native -CommandName az -ScriptBlock { ... }
Essa configuração do PowerShell permite o preenchimento automático de comandos da CLI do Azure.
Integração com o VS Code
A extensão Azure CLI para o Visual Studio Code oferece destaque de sintaxe, IntelliSense e suporte integrado para terminal.
Usando o Azure CLI para gerenciamento de recursos
Agora que você já instalou e configurou a CLI, é hora de colocá-la em ação. Nesta seção, vamos passar da teoria para a prática e começar a gerenciar recursos reais do Azure. Vamos além de comandos individuais e analisar os padrões que você usará todos os dias para construir, conectar e gerenciar sua infraestrutura em nuvem.
Operações do Grupo de Recursos
Os grupos de recursos funcionam como recipientes lógicos para os recursos do Azure:
az group create --name myResourceGroup --location eastus
az group list --output table
az group delete --name myResourceGroup --yes --no-wait
Esses comandos criam, listam e excluem grupos de recursos com processamento assíncrono.
Criação de recursos comuns
Criação de máquina virtual:
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image UbuntuLTS \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys
Esse comando cria uma máquina virtual Linux com autenticação por chave SSH.
Criação de conta de armazenamento:
az storage account create \
--name mystorageaccount \
--resource-group myResourceGroup \
--location eastus \
--sku Standard_LRS \
--kind StorageV2
Esse comando cria uma conta de armazenamento v2 de uso geral com armazenamento localmente redundante.
Formatação de consultas e resultados
O JMESPath pega as saídas dos comandos de filtro e transformação:
az vm list --query "[].{Name:name, PowerState:powerState}" --output table
az vm list --query "[?location=='eastus'].name" --output tsv
Essas consultas JMESPath pegam campos específicos e filtram os resultados com base em critérios.
Domine as consultas JMESPath para extrair exatamente os dados que você precisa de respostas JSON complexas.
Automatizando com o CLI do Azure
A automação transforma comandos individuais em fluxos de trabalho repetíveis e confiáveis que vão além das operações manuais. A verdadeira mágica acontece quando você para de pensar nos comandos CLI como tarefas pontuais e começa a incorporá-los em sistemas que cuidam de tudo, desde o provisionamento de recursos até a recuperação de desastres.
Lembro da primeira vez que automatizei a atualização semanal do nosso ambiente de desenvolvimento. O que antes levava três horas de cliques manuais e espera se transformou em um script de 15 minutos que eu podia executar enquanto tomava um café. Esse script de automação economizou dezenas de horas por mês para nossa equipe e eliminou os inevitáveis erros humanos que ocorriam nos processos manuais.
Comece a automação aos poucos — automatize primeiro as tarefas diárias mais repetitivas e, depois, expanda para fluxos de trabalho completos de infraestrutura.
Melhores práticas de scripting
Modelo de script robusto com tratamento de erros e registro em log:
#!/bin/bash
set -euo pipefail # Exit on errors, undefined variables, pipe failures
RESOURCE_GROUP="automation-rg"
LOCATION="eastus"
VM_NAME="automated-vm"
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}
cleanup() {
log "Cleaning up resources due to script failure"
az group delete --name "$RESOURCE_GROUP" --yes --no-wait 2>/dev/null || true
}
trap cleanup ERR
log "Starting Azure resource provisioning"
if ! az group show --name "$RESOURCE_GROUP" &>/dev/null; then
log "Creating resource group: $RESOURCE_GROUP"
az group create --name "$RESOURCE_GROUP" --location "$LOCATION"
fi
VM_RESULT=$(az vm create \
--resource-group "$RESOURCE_GROUP" \
--name "$VM_NAME" \
--image UbuntuLTS \
--generate-ssh-keys \
--output json)
PUBLIC_IP=$(echo "$VM_RESULT" | jq -r '.publicIpAddress')
log "VM created successfully. Public IP: $PUBLIC_IP"
Esse modelo de script tem um jeito bem completo de lidar com erros, registrar tudo e limpar as coisas.
Segurança para automação
Nunca coloque credenciais diretamente nos scripts. Use autenticação baseada em certificado sempre que possível:
# Certificate-based authentication (recommended)
export ARM_CLIENT_ID="your-client-id"
export ARM_CERTIFICATE_PATH="/path/to/certificate.pem"
export ARM_TENANT_ID="your-tenant-id"
az login --service-principal -u "$ARM_CLIENT_ID" --certificate-path "$ARM_CERTIFICATE_PATH" --tenant "$ARM_TENANT_ID"
# Secret-based authentication (use only when certificates aren't feasible)
export ARM_CLIENT_ID="your-client-id"
export ARM_CLIENT_SECRET="your-client-secret"
export ARM_TENANT_ID="your-tenant-id"
az login --service-principal -u "$ARM_CLIENT_ID" -p "$ARM_CLIENT_SECRET" --tenant "$ARM_TENANT_ID"
Armazene valores confidenciais no Azure Key Vault e recupere-os programaticamente. Prefira certificados em vez de segredos para aumentar a segurança.
Integração do pipeline de CI/CD
Exemplo de pipeline YAML do Azure DevOps:
steps:
- task: AzureCLI@2
displayName: 'Deploy Infrastructure'
inputs:
azureSubscription: 'Your-Service-Connection'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
set -euo pipefail
echo "Creating resource group"
az group create --name $(resourceGroup) --location $(location)
Essa configuração de pipeline junta os comandos da CLI do Azure com pipelines de implantação automatizados.

Um pipeline bem-sucedido executado no Azure DevOps, usando comandos da CLI do Azure para automatizar a implantação da infraestrutura.
Problemas comuns e solução de problemas da CLI do Azure
Mesmo quem tem bastante experiência pode ter problemas com autenticação, incompatibilidade de versões e conflitos de configuração que podem atrapalhar a produtividade. Entender os padrões comuns de falhas e suas estratégias de resolução transforma esses obstáculos de impedimentos ao fluxo de trabalho em pequenos inconvenientes que você pode resolver de forma rápida e confiante.
Falhas de autenticação
Problema: Meus scripts de automação que usam az login --service-principal pararam de funcionar de repente em setembro de 2025 com erros de autenticação.
Solução: Isso é resultado direto da aplicação obrigatória da autenticação de dois fatores (MFA). Os princípios de serviço baseados em senha agora são vistos como um método de autenticação antigo e menos seguro. Você precisa mudar sua automação para um padrão compatível. Dá uma olhada no nosso Navegando pela aplicação da MFA em setembro de 2025 acima para ver o plano de ação em quatro etapas, com foco na implementação da Federação de Identidade de Carga de Trabalho ou Autenticação Baseada em Certificado.
Problema: Os erros “Por favor, execute 'az login' para configurar a conta” continuam aparecendo mesmo depois de fazer login com sucesso.
Solução: Limpe o cache de autenticação e faça a autenticação de novo:
Uma sessão de depuração me mostrou o valor do sinalizador ` --debug ` da CLI do Azure quando você se depara com mistérios de autenticação. O que parecia ser falhas aleatórias de login acabou sendo problemas com o proxy corporativo que estavam atrapalhando as trocas de tokens. A saída de depuração mostrou exatamente quais endpoints HTTP estavam sendo bloqueados, o que levou a uma solução rápida e economizou um monte de tempo de especulação.
az account clear
az login --debug
az account list --output table
Esses comandos limpam as credenciais armazenadas em cache e fornecem depuração detalhada de autenticação que revela problemas de rede, certificado ou política.
Problemas com comandos não encontrados
Problema: “az: comando não encontrado” depois da instalação.
Solução: Esse erro clássico ainda pega desenvolvedores experientes de surpresa. Uma vez, perdi uma hora inteira por causa de um erro “comando não encontrado” em uma nova VM Linux, só para perceber que tinha esquecido de executar o comando ` source ~/.bashrc ` após a instalação. É um erro simples que até mesmo os veteranos cometem.
which az
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc
Esses comandos localizam a instalação do Azure CLI e atualizam a configuração do PATH do shell.
Compatibilidade de versões
Problema: Os scripts falham com erros do tipo “argumento não reconhecido”.
Solução: Verifique a compatibilidade da versão da CLI e atualize conforme detalhado em nossa seção de verificação de versão:
az version
Esse comando mostra a versão atual. Dá uma olhada na seção de instalação pra ver os comandos de atualização específicos pra cada plataforma.
Lembre-se de manter o Azure CLI atualizado para acessar novos recursos e patches de segurança.
Dicas avançadas de produtividade
O domínio vai além da execução básica de comandos e inclui técnicas sofisticadas de consulta, otimização de configuração e melhorias de desempenho que diferenciam os profissionais experientes. Esses padrões avançados são essenciais pra gerenciar ambientes Azure de grande escala, onde a eficiência e a precisão afetam diretamente o sucesso operacional.
Domínio da consulta JMESPath
Consultas avançadas transformam a extração de dados:
az vm list --query "[?tags.Environment=='production' && tags.Team=='backend'].{Name:name, Location:location, Size:hardwareProfile.vmSize}"
Essa consulta avançada filtra VMs por várias condições de tag e extrai propriedades específicas.

Transforme uma saída JSON complicada em dados limpos e úteis com uma única consulta JMESPath.
Gerenciamento de configuração
Personalize o comportamento da CLI por meio de configurações persistentes que economizam tempo em operações repetitivas:
az configure --defaults output=table location=eastus group=myDefaultRG
az configure --list-defaults
Esses comandos definem valores padrão para parâmetros comuns e mostram a configuração atual. Essas configurações ficam guardadas em ~/.azure/config e só valem para o seu perfil de usuário, o que é ótimo para personalizar sua experiência com a CLI do Azure sem mexer nos outros usuários do mesmo sistema.
Otimização do desempenho
Melhorias em operações de grande escala:
az vm list --query "[].name" --output tsv | xargs -I {} -P 10 az vm show --name {} --resource-group myRG
az vm start --name myVM --resource-group myRG --no-wait
Esses comandos fazem as coisas ao mesmo tempo e usam um jeito de processamento que não precisa esperar para melhorar o desempenho.
Conclusão
Dominar a CLI do Azure simplifica o gerenciamento da nuvem, permitindo que você controle os recursos de forma eficiente e automatize os fluxos de trabalho com confiança. Comece com o modo interativo ou o Azure Nuvem Shell e, aos poucos, use scripts para implantações repetíveis.
Para desenvolver suas habilidades, confira Entendendo o Microsoft Azure ou o Fundamentos do Microsoft Azure (AZ-900) programa
Boa automação e um brinde a fluxos de trabalho mais inteligentes e rápidos no Azure!
Perguntas frequentes sobre a instalação da CLI do Azure
Como resolver erros de certificado SSL durante a instalação do Azure CLI em redes corporativas?
Os firewalls corporativos costumam bloquear conexões SSL. Configure seu gerenciador de pacotes para usar certificados corporativos ou instale usando métodos offline com pacotes baixados.
Posso instalar o Azure CLI sem privilégios de administrador no Windows?
Sim, use o pacote ZIP que pode ser extraído para um diretório do usuário. Adicione o caminho extraído à variável de ambiente PATH do usuário.
O que devo fazer se a instalação do Azure CLI danificar meu ambiente Python atual?
A CLI do Azure tem seu próprio tempo de execução Python. Se rolar algum problema, desinstale e reinstale usando o instalador MSI no Windows ou use gerenciadores de pacotes que lidam bem com dependências em outras plataformas.
Os scripts da CLI do Azure funcionam da mesma forma no Windows PowerShell e no bash do Linux?
Os comandos da CLI do Azure são iguais, mas os recursos específicos do shell, como sintaxe de variáveis, separadores de caminho e caracteres de continuação de linha, são diferentes. Use linguagens de script multiplataforma, como Python, para obter o máximo de portabilidade.
Como faço pra lidar com diferenças de caminho ao compartilhar scripts entre sistemas Windows e Unix?
Use barras inclinadas nos parâmetros da CLI do Azure (o Azure aceita isso universalmente) e guarde os caminhos específicos do sistema em variáveis de ambiente ou arquivos de configuração.
Engenheiro de dados com experiência em tecnologias de nuvem Python e Azure, especializado na criação de pipelines de dados escaláveis e processos de ETL. Atualmente está cursando Bacharelado em Ciência da Computação na Universidade de Tanta. Engenheiro de dados certificado pela DataCamp com experiência comprovada em gerenciamento e programação de dados. Ex-estagiário de engenharia de dados da Microsoft na Digital Egypt Pioneers Initiative e Microsoft Beta Student Ambassador, liderando workshops técnicos e organizando hackathons.


