Instalación y Configuración de Azure CLI en Linux

Azure CLI es la herramienta de línea de comandos de Microsoft para gestionar recursos de Azure directamente desde tu servidor Linux. Con Azure CLI instalado en tu VPS, puedes administrar máquinas virtuales, cuentas de almacenamiento, grupos de recursos y suscripciones sin necesidad del portal web. Esta guía cubre la instalación, autenticación, gestión de suscripciones y ejemplos prácticos de automatización.

Requisitos Previos

  • Servidor Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+, Rocky Linux 8+)
  • Acceso root o usuario con privilegios sudo
  • Conexión a internet
  • Cuenta de Microsoft Azure activa

Instalación de Azure CLI

Ubuntu/Debian (método recomendado)

# Instalar dependencias necesarias
sudo apt-get update
sudo apt-get install -y ca-certificates curl apt-transport-https lsb-release gnupg

# Descargar e instalar la clave de firma de Microsoft
sudo mkdir -p /etc/apt/keyrings
curl -sLS https://packages.microsoft.com/keys/microsoft.asc | \
  gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/microsoft.gpg

# Añadir el repositorio de Azure CLI
AZ_DIST=$(lsb_release -cs)
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ $AZ_DIST main" | \
  sudo tee /etc/apt/sources.list.d/azure-cli.list

# Instalar Azure CLI
sudo apt-get update
sudo apt-get install -y azure-cli

CentOS/Rocky Linux

# Importar la clave GPG de Microsoft
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

# Añadir el repositorio
sudo dnf install -y https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm

# Instalar Azure CLI
sudo dnf install -y azure-cli

Instalación con script automático

# Script de instalación automática (válido en la mayoría de distribuciones)
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Verificar la instalación

# Comprobar versión instalada
az --version

# Ver la ayuda general
az help

Autenticación en Azure

Inicio de sesión interactivo

# Autenticar con cuenta de usuario (requiere navegador o código de dispositivo)
az login

# Autenticación sin navegador (para servidores remotos)
az login --use-device-code

El comando mostrará un código y una URL. Visita la URL desde cualquier dispositivo e introduce el código para autenticarte.

Verificar la sesión activa

# Ver la cuenta activa
az account show

# Listar todas las cuentas configuradas
az account list --output table

Gestión de Suscripciones

# Listar todas las suscripciones disponibles
az account list --output table

# Establecer la suscripción activa por ID
az account set --subscription "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Establecer la suscripción activa por nombre
az account set --subscription "Mi Suscripción de Producción"

# Ver la suscripción actualmente activa
az account show --output table

Grupos de Recursos

Los grupos de recursos son contenedores lógicos para organizar los recursos de Azure.

# Listar todos los grupos de recursos
az group list --output table

# Crear un grupo de recursos
az group create \
  --name mi-grupo-recursos \
  --location westeurope

# Ver los recursos dentro de un grupo
az resource list --resource-group mi-grupo-recursos --output table

# Eliminar un grupo de recursos (y todos sus recursos)
az group delete --name mi-grupo-recursos --yes

# Ver las ubicaciones disponibles
az account list-locations --output table

Máquinas Virtuales

# Listar todas las máquinas virtuales
az vm list --output table

# Crear una máquina virtual Ubuntu
az vm create \
  --resource-group mi-grupo-recursos \
  --name mi-vm \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --output json

# Iniciar una VM detenida
az vm start --resource-group mi-grupo-recursos --name mi-vm

# Detener (desasignar) una VM para no incurrir en costes
az vm deallocate --resource-group mi-grupo-recursos --name mi-vm

# Reiniciar una VM
az vm restart --resource-group mi-grupo-recursos --name mi-vm

# Ver el estado de una VM
az vm show \
  --resource-group mi-grupo-recursos \
  --name mi-vm \
  --show-details \
  --query "[name, powerState, publicIps]" \
  --output table

# Abrir el puerto 80 en el firewall (NSG)
az vm open-port \
  --resource-group mi-grupo-recursos \
  --name mi-vm \
  --port 80

# Eliminar una VM
az vm delete --resource-group mi-grupo-recursos --name mi-vm --yes

Almacenamiento de Azure

# Crear una cuenta de almacenamiento
az storage account create \
  --name mialmacenamiento \
  --resource-group mi-grupo-recursos \
  --location westeurope \
  --sku Standard_LRS

# Obtener la clave de acceso
az storage account keys list \
  --resource-group mi-grupo-recursos \
  --account-name mialmacenamiento \
  --output table

# Crear un contenedor de blobs
az storage container create \
  --name backups \
  --account-name mialmacenamiento

# Subir un archivo al contenedor
az storage blob upload \
  --account-name mialmacenamiento \
  --container-name backups \
  --name backup-2024.tar.gz \
  --file /var/backups/backup-2024.tar.gz

# Listar blobs en un contenedor
az storage blob list \
  --account-name mialmacenamiento \
  --container-name backups \
  --output table

# Descargar un blob
az storage blob download \
  --account-name mialmacenamiento \
  --container-name backups \
  --name backup-2024.tar.gz \
  --file ./backup-restaurado.tar.gz

Automatización con Service Principals

Para scripts de automatización en servidores, usa un Service Principal en lugar de credenciales de usuario.

# Crear un Service Principal con rol de colaborador
az ad sp create-for-rbac \
  --name "mi-sp-automatizacion" \
  --role contributor \
  --scopes /subscriptions/{subscription-id}

La salida contiene las credenciales que debes guardar de forma segura:

{
  "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "displayName": "mi-sp-automatizacion",
  "password": "xxxx~xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
# Autenticar con Service Principal en scripts
az login \
  --service-principal \
  --username APP_ID \
  --password PASSWORD \
  --tenant TENANT_ID

# Mejor práctica: usar variables de entorno
export AZURE_CLIENT_ID="appId"
export AZURE_CLIENT_SECRET="password"
export AZURE_TENANT_ID="tenant"
export AZURE_SUBSCRIPTION_ID="subscription-id"

Ejemplo de script de backup automatizado:

#!/bin/bash
# Script de backup automático a Azure Blob Storage

# Autenticar con Service Principal
az login --service-principal \
  --username "$AZURE_CLIENT_ID" \
  --password "$AZURE_CLIENT_SECRET" \
  --tenant "$AZURE_TENANT_ID"

# Crear backup y subir
FECHA=$(date +%Y%m%d)
tar czf /tmp/backup-$FECHA.tar.gz /var/www/

az storage blob upload \
  --account-name mialmacenamiento \
  --container-name backups \
  --name "backup-$FECHA.tar.gz" \
  --file "/tmp/backup-$FECHA.tar.gz"

# Limpiar el archivo temporal
rm /tmp/backup-$FECHA.tar.gz

Solución de Problemas

Error: az: command not found

# Verificar si Azure CLI está instalado
which az
# Recargar el entorno
source ~/.bashrc

Error: Please run 'az login' to setup account

# La sesión ha expirado, volver a autenticar
az login --use-device-code

Error: AuthorizationFailed

El usuario o Service Principal no tiene permisos suficientes. Verifica los roles asignados:

az role assignment list --assignee [email protected] --output table

Actualizar Azure CLI

# En Ubuntu/Debian
sudo apt-get update && sudo apt-get upgrade azure-cli

# En CentOS/Rocky
sudo dnf update azure-cli

Cambiar el formato de salida por defecto

# Configurar el formato de salida por defecto
az configure --defaults output=table

Conclusión

Azure CLI transforma la gestión de Microsoft Azure en una experiencia ágil desde la línea de comandos de tu servidor Linux. Con los Service Principals configurados y los comandos básicos dominados, puedes integrar Azure en tus pipelines de automatización, gestionar infraestructura como código y construir flujos de trabajo de backup y despliegue completamente automatizados.