Tanques el mòdul amb l'eina que més temps t'estalviarà durant la resta del curs i la resta de la teva carrera a Azure: la línia d'ordres. A la lliçó anterior va quedar clar que portal, CLI, PowerShell i plantilles parlen tots amb la mateixa API d'Azure Resource Manager. El que canvia és la velocitat, la precisió i —sobretot— la capacitat de repetir exactament el mateix demà.
Aquí aprendràs a instal·lar i fer servir Azure CLI, a consultar-ne les sortides amb --query, a manejar diverses subscripcions sense equivocar-te d'entorn, quan té més sentit Azure PowerShell, i com funciona Cloud Shell (i per què et crea un compte d'emmagatzematge). I acabaràs escrivint un script complet, comentat, parametritzat i idempotent que desplega la base de la plataforma de Contoso Airlines i sap esborrar-la després per no gastar de més.
Contingut
- Per què automatitzar des de la línia d'ordres
- Instal·lar Azure CLI i comprovar-ne la versió
- Iniciar sessió i treballar amb diverses subscripcions
- Anatomia d'una ordre
azi ajuda integrada - Formats de sortida i consultes amb
--query - Azure PowerShell i quan triar cada eina
- Cloud Shell
- Script complet: la base de Contoso Airlines
- Neteja: esborrar sense deixar rastre de despesa
- Errors Comuns i Consells
- Exercicis
- Conclusió
- Per què automatitzar des de la línia d'ordres
El portal és excel·lent per explorar. Per treballar, té tres problemes:
| Problema del portal | Què aporta la línia d'ordres |
|---|---|
| No és repetible: 40 clics avui, 40 clics diferents demà | Un script produeix sempre el mateix resultat |
| No és auditable: ningú no sap quines opcions vas marcar | L'script viu a Git, es revisa i es compara |
| No escala: crear 20 recursos iguals és una tarda perduda | Un bucle for ho fa en un minut |
És lent per a consultes: "dona'm totes les VM sense etiqueta propietario" no té botó |
Una consulta --query ho resol en una línia |
A més, la CLI és el pont natural cap al que ve després: les canalitzacions de desplegament del mòdul 5 executen ordres az, i els diagnòstics del mòdul 7 es recolzen en consultes de línia d'ordres.
Regla d'or, repetida a posta: el que fas una vegada, fes-ho al portal; el que faràs dues vegades, escriu-ho.
- Instal·lar Azure CLI i comprovar-ne la versió
Azure CLI és multiplataforma i està escrita en Python, però s'instal·la com un paquet natiu a cada sistema.
Windows
# Opció recomanada: gestor de paquets de Windows.
winget install --exact --id Microsoft.AzureCLI
# Alternativa amb MSI silenciós, útil en desplegaments corporatius.
# Baixa l'instal·lador oficial i executa'l amb /quiet.Després d'instal·lar-la, tanca i torna a obrir el terminal perquè s'actualitzi la variable PATH.
macOS
Linux (Debian/Ubuntu)
# Script oficial d'instal·lació: afegeix el repositori de Microsoft i instal·la el paquet.
# Revisa sempre un script abans d'executar-lo amb privilegis (bona pràctica general).
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bashPer a RHEL, Fedora o CentOS es fa servir dnf; per a openSUSE, zypper. La documentació oficial detalla cada cas.
Comprovar la instal·lació
Sortida d'exemple:
{
"azure-cli": "2.64.0",
"azure-cli-core": "2.64.0",
"azure-cli-telemetry": "1.1.0",
"extensions": {}
}Mantenir-la actualitzada
# Actualitza la CLI a l'última versió estable (funciona a la majoria de plataformes).
az upgrade
# Desactiva la pregunta de telemetria i les confirmacions interactives als scripts.
az config set core.collect_telemetry=falseAzure CLI s'actualitza cada poques setmanes. Treballar amb una versió molt antiga provoca errors del tipus "unrecognized arguments" quan segueixes documentació recent: si un paràmetre no existeix a la teva instal·lació, el primer que cal provar és actualitzar-la.
- Iniciar sessió i treballar amb diverses subscripcions
# Obre el navegador per autenticar-te de manera interactiva.
# Un cop iniciada la sessió, la CLI desa un testimoni local i ja no el demana a cada ordre.
az loginVariants útils:
# Sense navegador (servidors, SSH): mostra un codi per introduir a microsoft.com/devicelogin.
az login --use-device-code
# Especificar l'inquilí quan la teva identitat pertany a diversos directoris.
az login --tenant contoso-airlines.onmicrosoft.comPer a automatització desatesa (canalitzacions de CI/CD) no es fa servir
az logininteractiu, sinó una entitat de servei o una identitat administrada. Es veuen a les lliçons 04-02 i 05-03. No posis mai credencials d'usuari en un script.
Diverses subscripcions: l'error més car de tots
Si la teva identitat té accés a Contoso Airlines - Producción i a Contoso Airlines - Desarrollo, cada ordre az s'executa contra la subscripció activa. Confondre's aquí és com s'esborren coses en producció.
# Veure totes les subscripcions accessibles. IsDefault marca l'activa.
az account list --output tableName CloudName SubscriptionId State IsDefault -------------------------------- ----------- ------------------------------------ ------- --------- Contoso Airlines - Producción AzureCloud 8f4c2b7a-1d3e-4a55-9c11-0a7b6e2d4f90 Enabled True Contoso Airlines - Desarrollo AzureCloud 3b91e5d0-7c42-4f88-a2e6-5d9c1a8b3e77 Enabled False
# Canviar la subscripció activa (accepta nom o identificador).
az account set --subscription "Contoso Airlines - Desarrollo"
# Confirmar on ets abans de tocar res. Fes-ne un hàbit.
az account show --query "{Subscripcio:name, Id:id, Usuari:user.name}" --output tableDues defenses pràctiques:
- Comença tots els teus scripts fixant la subscripció explícitament amb
az account set. No et refiïs de la que estigui activa. - Fes servir el paràmetre
--subscriptiona les ordres crítiques, per no dependre de l'estat global:
az group delete --name rg-contoso-reservas-dev \
--subscription "Contoso Airlines - Desarrollo" --yes
- Anatomia d'una ordre
az i ajuda integrada
az i ajuda integradaTotes les ordres d'Azure CLI segueixen la mateixa estructura:
Exemple desglossat:
az storage account create --name sttarjetascontosodev --resource-group rg-contoso-reservas-dev --location westeurope --sku Standard_LRS| Part | Valor | Què és |
|---|---|---|
az |
— | El programa |
storage |
grup | La família de servei |
account |
subgrup | L'objecte concret dins d'aquella família |
create |
ordre | L'acció (create, list, show, update, delete) |
--name, --resource-group... |
paràmetres | Les dades de l'operació |
Els verbs es repeteixen a tota la CLI, i això fa que sigui predictible: si saps az vm list, intueixes az storage account list, az webapp list i az sql db list.
Abreviatures freqüents: -n per a --name, -g per a --resource-group, -l per a --location, -o per a --output.
Ajuda integrada
# Ajuda d'un grup: mostra subgrups i ordres disponibles.
az storage --help
# Ajuda d'una ordre concreta: llista TOTS els seus paràmetres, quins són obligatoris i exemples.
az storage account create --help
# Cerca intel·ligent per llenguatge natural, amb exemples reals d'ús.
az find "az storage account"
az find "crear un compte d'emmagatzematge"I el mode interactiu, molt útil mentre aprens (requereix instal·lar l'extensió):
- Formats de sortida i consultes amb
--query
--queryPer defecte, la CLI retorna JSON, que és complet però incòmode de llegir. El paràmetre --output (o -o) canvia el format:
| Valor | Resultat | Quan fer-lo servir |
|---|---|---|
json (per defecte) |
JSON amb format | Veure tots els camps disponibles |
jsonc |
JSON acolorit | Lectura al terminal |
table |
Taula llegible | Ús diari i informes ràpids |
tsv |
Valors separats per tabuladors, sense capçaleres ni cometes | Scripts: alimentar variables |
yaml |
YAML | Configuracions llegibles |
none |
Res | Quan només importa que l'operació funcioni |
JMESPath: el llenguatge de --query
--query fa servir JMESPath, un llenguatge de consulta sobre JSON. Anem amb exemples progressius sobre els recursos de Contoso.
Pas 1 — seleccionar una propietat d'un objecte:
# Retorna només la ubicació d'un grup de recursos, sense cometes (tsv), llesta per a una variable.
az group show --name rg-contoso-reservas-dev --query location --output tsvPas 2 — recórrer una llista i quedar-se amb un camp:
# Noms de tots els grups de recursos. [] recorre la llista.
az group list --query "[].name" --output tsvPas 3 — construir un objecte amb noms propis:
# Reanomena els camps de sortida. Les claus de l'esquerra són etiquetes teves.
az group list \
--query "[].{Nom:name, Regio:location, Estat:properties.provisioningState}" \
--output tableNom Regio Estat ------------------------- ---------- --------- rg-contoso-reservas-dev westeurope Succeeded rg-contoso-reservas-pro westeurope Succeeded
Pas 4 — filtrar amb condicions (?):
# Només els grups etiquetats com a producció.
az group list \
--query "[?tags.entorno=='produccion'].{Nom:name, Propietari:tags.propietario}" \
--output table
# Només els comptes d'emmagatzematge de West Europe.
az storage account list \
--query "[?location=='westeurope'].{Compte:name, Grup:resourceGroup, Sku:sku.name}" \
--output tablePas 5 — detectar el que falta (auditoria de governança):
# Recursos SENSE l'etiqueta obligatòria "propietario": l'informe que demana la Marta Ríos.
# == `null` compara amb nul; els accents greus marquen un literal JSON.
az resource list \
--query "[?tags.propietario == \`null\`].{Recurs:name, Tipus:type, Grup:resourceGroup}" \
--output tablePas 6 — combinar amb funcions i ordenació:
# Comptar quants recursos hi ha en total.
az resource list --query "length(@)" --output tsv
# Els recursos ordenats per nom, mostrant només tipus i grup.
az resource list \
--query "sort_by([].{Nom:name, Tipus:type, Grup:resourceGroup}, &Nom)" \
--output tablePas 7 — fer servir el resultat en un script:
# Desar un valor en una variable de shell. --output tsv evita les cometes del JSON.
CLAU_REGIO=$(az group show --name rg-contoso-reservas-dev --query location --output tsv)
echo "El grup és a: $CLAU_REGIO"Truc d'aprenentatge: executa primer l'ordre sense
--queryi amb--output jsonper veure l'estructura completa, i només llavors escriu la consulta. És molt més ràpid que endevinar els noms dels camps.
- Azure PowerShell i quan triar cada eina
Azure PowerShell és l'altre client oficial, basat en el mòdul Az. Fa el mateix que la CLI, però amb la filosofia de PowerShell: en comptes de text, retorna objectes amb propietats sobre els quals pots operar directament.
Instal·lació i primeres ordres
# Instal·la el mòdul Az per a l'usuari actual (no requereix permisos d'administrador).
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
# Inicia sessió (obre el navegador).
Connect-AzAccount
# Veure les subscripcions disponibles i seleccionar-ne una.
Get-AzSubscription
Set-AzContext -Subscription "Contoso Airlines - Desarrollo"
# Crear el grup de recursos de Contoso amb les seves etiquetes.
New-AzResourceGroup -Name "rg-contoso-reservas-dev" -Location "westeurope" -Tag @{
entorno = "desarrollo"
proyecto = "contoso-reservas"
"centro-coste" = "CC-1042"
propietario = "[email protected]"
}
# Llistar recursos i filtrar per etiqueta, aprofitant els objectes de PowerShell.
Get-AzResource -TagName "proyecto" -TagValue "contoso-reservas" |
Select-Object Name, ResourceType, ResourceGroupName |
Format-TableFixa't en la diferència de filosofia: a la CLI filtres amb --query (JMESPath sobre JSON); a PowerShell filtres amb Where-Object i selecciones amb Select-Object, perquè ja tens objectes.
Comparativa
| Aspecte | Azure CLI (az) |
Azure PowerShell (Az) |
|---|---|---|
| Sintaxi | az grup subgrup ordre |
Verb-AzSubstantiu (New-AzResourceGroup) |
| Sortida | JSON (text) | Objectes de .NET |
| Filtratge | --query amb JMESPath |
Where-Object, Select-Object |
| Shell natiu | Bash, Zsh; funciona en qualsevol shell | PowerShell (Windows, Linux i macOS) |
| Corba d'entrada | Més suau si véns de Linux | Més suau si véns de Windows |
| Integració | Excel·lent en canalitzacions multiplataforma i contenidors | Excel·lent amb Windows Server, Microsoft 365 i Exchange |
| Documentació de Microsoft | Exemples en totes dues | Exemples en totes dues |
Com triar, sense dogmatismes:
- Si el teu equip és d'administradors de sistemes Windows i ja automatitza amb PowerShell, fes servir PowerShell.
- Si el teu equip ve de Linux, Docker o desenvolupament multiplataforma, fes servir la CLI.
- Si escrius scripts per a canalitzacions de CI/CD en contenidors Linux, la CLI sol ser més lleugera i directa.
- L'important és ser coherent dins d'un mateix projecte. A Contoso, en Diego i la Marta acorden fer servir Azure CLI, i aquest és el criteri del curs a partir d'aquí.
- Cloud Shell
Azure Cloud Shell és un terminal allotjat a Azure, accessible des de la icona >_ de la barra superior del portal (o a shell.azure.com). Avantatges immediats:
- Ja està autenticat amb la teva identitat: no cal fer
az login. - Porta les eines instal·lades i actualitzades: Azure CLI, Azure PowerShell, Bicep, Terraform, kubectl, Git, Python, Node.js, i editors com
vim,nanoi l'editor gràfic integrat (code .). - Funciona des de qualsevol navegador, inclòs el mòbil.
Bash o PowerShell
Pots triar l'intèrpret al desplegable superior i canviar-lo en qualsevol moment. Les ordres az funcionen en tots dos; les Az* de PowerShell, només en el mode PowerShell.
El compte d'emmagatzematge que crea
La primera vegada que obres Cloud Shell, et demana crear (o associar) un compte d'emmagatzematge. Això no és cap caprici:
- Cloud Shell corre en un contenidor efímer: quan acaba la sessió, el contenidor es destrueix.
- Perquè els teus fitxers sobrevisquin, munta un recurs compartit d'Azure Files al teu directori
$HOME, dins d'una imatge de disc anomenada normalmentacc_<usuari>.img. - El que desis a
$HOME(~/clouddrive) persisteix entre sessions; el que instal·lis fora d'allà, no.
Avís de cost: aquest compte d'emmagatzematge és un recurs teu i es factura, encara que l'import sigui molt petit (uns cèntims al mes per uns pocs GB). Cloud Shell en si no costa res; el seu emmagatzematge, sí. Si deixes de fer-lo servir, pots esborrar el grup de recursos que es crea automàticament (sol anomenar-se
cloud-shell-storage-<regió>).
Altres característiques i límits
| Aspecte | Detall |
|---|---|
| Temps d'inactivitat | La sessió es tanca després d'uns 20 minuts sense interacció |
| Persistència | Només $HOME / clouddrive; la resta del sistema de fitxers es perd |
| Càrrega i descàrrega de fitxers | Botó de Carrega/Baixa a la barra de Cloud Shell |
| Editor integrat | code . obre un editor gràfic dins del navegador |
| Sessions simultànies | Limitades; una sessió Bash i una de PowerShell alhora |
| Regió de l'emmagatzematge | Es tria en crear-lo; convé posar-lo a prop teu |
Quan fer servir Cloud Shell: per aprendre (no instal·les res), per a tasques puntuals des d'un equip aliè, per a emergències des del mòbil. Quan no: per a feina diària intensiva o scripts llargs, on una CLI local amb el teu editor i el teu repositori Git és més còmoda.
- Script complet: la base de Contoso Airlines
Ara l'exercici central del mòdul: un script que crea tota la base de la plataforma de Contoso Airlines. És parametritzat (tot en variables al principi), idempotent (es pot executar diverses vegades sense trencar res ni duplicar recursos) i està comentat línia a línia.
Desa'l com a desplegar-base-contoso.sh.
#!/usr/bin/env bash
# =============================================================================
# desplegar-base-contoso.sh
# Crea la base de la plataforma de Contoso Airlines:
# - Grup de recursos amb les etiquetes obligatòries
# - Compte d'emmagatzematge per a les targetes d'embarcament en PDF
# - Contenidor privat "tarjetas-embarque"
#
# És IDEMPOTENT: executar-lo dues vegades deixa el mateix resultat que executar-lo una.
# Ús: ./desplegar-base-contoso.sh [dev|pro]
# =============================================================================
# 'set -e' avorta l'script davant del primer error, en comptes de continuar a cegues.
# 'set -u' avorta si es fa servir una variable no definida (evita errades perilloses).
# 'set -o pipefail' propaga l'error de qualsevol ordre dins d'una canonada.
set -euo pipefail
# ------------------------------------------------------------------
# 1. PARÀMETRES. Tot el configurable, en un sol lloc i a dalt.
# ------------------------------------------------------------------
ENTORN="${1:-dev}" # Primer argument; "dev" si no s'indica
SUBSCRIPCIO="Contoso Airlines - Desarrollo"
REGIO="westeurope" # Regió principal decidida a la lliçó 01-02
PROJECTE="contoso-reservas"
CENTRE_COST="CC-1042"
PROPIETARI="[email protected]"
# Noms derivats, seguint la convenció de nomenclatura de Contoso.
GRUP="rg-${PROJECTE}-${ENTORN}" # p. ex. rg-contoso-reservas-dev
# Els comptes d'emmagatzematge només admeten minúscules i números (3-24 caràcters)
# i el seu nom és ÚNIC A TOT AZURE: hi afegim un sufix aleatori estable per si de cas.
SUFIX="$(echo -n "${GRUP}" | cksum | cut -c1-4)"
COMPTE_ALM="sttarjetascontoso${ENTORN}${SUFIX}"
CONTENIDOR="tarjetas-embarque"
# Traducció de l'entorn curt al valor d'etiqueta que exigeix l'esquema de Contoso.
if [ "${ENTORN}" = "pro" ]; then
ENTORN_TAG="produccion"
else
ENTORN_TAG="desarrollo"
fi
echo "=== Desplegament de la base de Contoso Airlines (${ENTORN_TAG}) ==="
# ------------------------------------------------------------------
# 2. CONTEXT. No et refiïs mai de la subscripció que estigués activa.
# ------------------------------------------------------------------
az account set --subscription "${SUBSCRIPCIO}"
echo "Subscripció activa: $(az account show --query name --output tsv)"
# ------------------------------------------------------------------
# 3. PROVEÏDORS. Necessaris en subscripcions noves; és innocu repetir-ho.
# ------------------------------------------------------------------
az provider register --namespace Microsoft.Storage --wait
# ------------------------------------------------------------------
# 4. GRUP DE RECURSOS.
# 'az group create' ja és idempotent: si existeix, n'actualitza les etiquetes.
# ------------------------------------------------------------------
echo "--> Grup de recursos: ${GRUP}"
az group create \
--name "${GRUP}" \
--location "${REGIO}" \
--tags entorno="${ENTORN_TAG}" \
proyecto="${PROJECTE}" \
centro-coste="${CENTRE_COST}" \
propietario="${PROPIETARI}" \
--output none
# ------------------------------------------------------------------
# 5. COMPTE D'EMMAGATZEMATGE.
# Comprovem primer si existeix, perquè l'script sigui idempotent
# i per no fallar si el nom global ja està ocupat per una altra persona.
# ------------------------------------------------------------------
echo "--> Compte d'emmagatzematge: ${COMPTE_ALM}"
if az storage account show --name "${COMPTE_ALM}" --resource-group "${GRUP}" --output none 2>/dev/null; then
echo " Ja existeix: no es torna a crear."
else
# --sku Standard_LRS : l'opció més econòmica (redundància local). Mòdul 2.
# --kind StorageV2 : tipus de compte actual, admet blobs, cues, taules i fitxers.
# --min-tls-version : força TLS 1.2 com a mínim.
# --allow-blob-public-access false : NINGÚ no pot llegir els PDF de manera anònima.
# --https-only true : rebutja el trànsit sense xifrar.
az storage account create \
--name "${COMPTE_ALM}" \
--resource-group "${GRUP}" \
--location "${REGIO}" \
--sku Standard_LRS \
--kind StorageV2 \
--min-tls-version TLS1_2 \
--https-only true \
--allow-blob-public-access false \
--tags entorno="${ENTORN_TAG}" \
proyecto="${PROJECTE}" \
centro-coste="${CENTRE_COST}" \
propietario="${PROPIETARI}" \
--output none
echo " Creat."
fi
# ------------------------------------------------------------------
# 6. CONTENIDOR DE BLOBS.
# --auth-mode login fa servir LA TEVA identitat d'Entra ID en comptes de la clau del
# compte: és la manera recomanada i no exposa secrets a l'script.
# (Requereix tenir un rol de dades, p. ex. "Col·laborador de dades de Blob".)
# ------------------------------------------------------------------
echo "--> Contenidor: ${CONTENIDOR}"
az storage container create \
--name "${CONTENIDOR}" \
--account-name "${COMPTE_ALM}" \
--auth-mode login \
--public-access off \
--output none
# ------------------------------------------------------------------
# 7. RESUM. Comprovació final llegible del que s'ha desplegat.
# ------------------------------------------------------------------
echo ""
echo "=== Desplegament completat ==="
az resource list \
--resource-group "${GRUP}" \
--query "[].{Recurs:name, Tipus:type, Regio:location}" \
--output table
echo ""
echo "Per eliminar TOT el que s'ha creat i deixar de pagar, executa:"
echo " az group delete --name ${GRUP} --yes --no-wait"Com executar-lo
# Donar permisos d'execució (només la primera vegada).
chmod +x desplegar-base-contoso.sh
# Desplegar l'entorn de desenvolupament.
./desplegar-base-contoso.sh devQuè fa que aquest script sigui idempotent
| Tècnica utilitzada | Per què importa |
|---|---|
az group create sobre un grup existent |
No falla: n'actualitza les etiquetes |
Comprovació prèvia amb az storage account show |
Evita l'error de "nom ja en ús" en tornar-lo a executar |
| Noms derivats de variables, no escrits a mà | El mateix script serveix per a dev i per a pro |
set -euo pipefail |
Atura l'script davant de la primera errada en comptes de deixar un desplegament a mitges |
--output none |
Sortida neta; només s'imprimeix el que decidim |
Si t'hi fixes, aquest script fa una cosa molt semblant a una plantilla d'infraestructura com a codi, però de manera imperativa (pas a pas). El nivell següent és fer-ho declaratiu amb Bicep, i això és exactament la lliçó 05-06.
- Neteja: esborrar sense deixar rastre de despesa
Aquest apartat és obligatori, no opcional. El cost del que has creat en aquest mòdul és de cèntims, però l'hàbit val diners reals quan treballis amb màquines virtuals i bases de dades.
# Esborra el grup i ABSOLUTAMENT TOT el que conté. És irreversible.
# --yes : no demana confirmació (fes-lo servir només quan n'estiguis segur).
# --no-wait : retorna el control immediatament; l'esborrat continua en segon pla.
az group delete --name rg-contoso-reservas-dev --yes --no-waitComprovacions abans i després:
# Abans: veure exactament què es destruirà.
az resource list --resource-group rg-contoso-reservas-dev --output table
# Després: confirmar que el grup ja no existeix (retorna "false").
az group exists --name rg-contoso-reservas-devI una comprovació d'higiene que convé fer periòdicament a tota la subscripció:
# Llista TOTS els grups de recursos amb les seves etiquetes: buscant orfes i oblits.
az group list --query "[].{Grup:name, Regio:location, Entorn:tags.entorno, Propietari:tags.propietario}" --output table
# Busca discos que ja no estan connectats a cap màquina virtual: despesa pura.
az disk list --query "[?diskState=='Unattached'].{Disc:name, Grup:resourceGroup, GB:diskSizeGb}" --output table
# Busca adreces IP públiques sense associar: també es facturen.
az network public-ip list --query "[?ipConfiguration==null].{IP:name, Grup:resourceGroup}" --output tableAquestes tres últimes ordres són, literalment, tres de les fonts de despesa inútil més habituals en comptes d'Azure reals. Desa-les.
Recorda a més: si vas crear un bloqueig
CanNotDeletea la lliçó anterior, l'esborrat fallarà fins que l'eliminis ambaz lock delete. Està dissenyat perquè sigui així.
Errors Comuns i Consells
- Executar ordres a la subscripció equivocada. Comença sempre amb
az account seti confirma ambaz account show. És l'error que més mal fa. - Treballar amb una CLI desactualitzada. Si un paràmetre "no existeix", executa
az upgradeabans de buscar als fòrums. - Posar majúscules o guions al nom del compte d'emmagatzematge. Només minúscules i números, 3-24 caràcters, i únic a tot Azure.
- Fer servir
--output jsondins dels scripts. Per alimentar variables fes servir--output tsv: evita cometes i salts de línia inesperats. - Escriure claus d'accés o contrasenyes dins de l'script. Fes servir
--auth-mode login, identitats administrades (lliçó 04-02) o Key Vault (lliçó 04-03). - Oblidar que Cloud Shell es tanca als 20 minuts d'inactivitat i que només persisteix
$HOME. Desa la teva feina a~/clouddriveo, millor, en un repositori Git. - Oblidar que l'emmagatzematge de Cloud Shell es factura. Són pocs diners, però si deixes de fer-lo servir, esborra'l.
- Escriure consultes
--querya cegues. Executa primer l'ordre en JSON, mira l'estructura i després consulta. - Esborrar amb
--yessense mirar abans. Executaaz resource list --resource-group ...per veure què desapareixerà. - Consell final de cost: adopta el costum d'acabar cada sessió de pràctiques amb
az group delete. Un grup de recursos per pràctica, esborrat al final: és la disciplina més rendible que pots adquirir en aquest curs.
Exercicis
Exercici 1: Consultes de governança
Escriu les ordres d'Azure CLI que resolguin aquestes peticions de la Marta Ríos:
- Mostrar en una taula el nom i la regió de tots els grups de recursos de la subscripció activa.
- Llistar tots els recursos etiquetats amb
proyecto=contoso-reservas, mostrant nom, tipus i grup. - Detectar els recursos que no tinguin l'etiqueta
centro-coste. - Desar en una variable de shell anomenada
REGIO_PROla regió del gruprg-contoso-reservas-pro.
Exercici 2: Adaptar l'script
Partint de l'script desplegar-base-contoso.sh de l'apartat 8:
- Afegeix una variable
CRITICITATi aplica-la com a etiqueta al grup i al compte d'emmagatzematge, amb valoraltasi l'entorn ésproibajaen cas contrari. - Afegeix un pas que, només si l'entorn és
pro, apliqui un bloqueigCanNotDeletesobre el grup. - Explica per què el pas 3 de l'script (
az provider register) és segur encara que s'executi cada vegada.
Exercici 3: Comparar eines i netejar
- Escriu l'equivalent en Azure PowerShell d'aquestes dues ordres de la CLI:
az group create --name rg-contoso-millas-dev --location westeurope --tags entorno=desarrollo proyecto=contoso-millas
az group delete --name rg-contoso-millas-dev --yes- Justifica en tres línies quina eina triaries per a una canalització de CI/CD que s'executa en un contenidor Linux, i per què.
- Escriu les ordres que auditen una subscripció buscant discos sense connectar i adreces IP públiques sense associar, i explica per què aquests dos recursos són fonts clàssiques de despesa inútil.
Solucions
Solució 1:
# 1. Grups de recursos amb nom i regió.
az group list --query "[].{Grup:name, Regio:location}" --output table
# 2. Recursos del projecte.
az resource list --tag proyecto=contoso-reservas \
--query "[].{Recurs:name, Tipus:type, Grup:resourceGroup}" --output table
# 3. Recursos SENSE l'etiqueta centro-coste.
az resource list \
--query "[?tags.\"centro-coste\" == \`null\`].{Recurs:name, Tipus:type, Grup:resourceGroup}" \
--output table
# 4. Regió del grup de producció en una variable.
REGIO_PRO=$(az group show --name rg-contoso-reservas-pro --query location --output tsv)
echo "$REGIO_PRO"Nota sobre el punt 3: com que el nom de l'etiqueta porta un guionet, cal posar-lo entre cometes dins de l'expressió JMESPath.
Solució 2:
- Variable i etiqueta de criticitat:
# Al costat de la resta de paràmetres:
if [ "${ENTORN}" = "pro" ]; then
CRITICITAT="alta"
else
CRITICITAT="baja"
fi
# I s'afegeix al bloc de --tags d'az group create i d'az storage account create:
# criticidad="${CRITICITAT}"- Bloqueig condicional en producció:
if [ "${ENTORN}" = "pro" ]; then
echo "--> Aplicant bloqueig CanNotDelete al grup de producció"
# 'az lock create' falla si ja existeix un bloqueig amb aquest nom;
# ho comprovem primer per mantenir la idempotència de l'script.
if ! az lock show --name "no-borrar-produccion" --resource-group "${GRUP}" --output none 2>/dev/null; then
az lock create \
--name "no-borrar-produccion" \
--lock-type CanNotDelete \
--resource-group "${GRUP}" \
--notes "Plataforma de venda en produccio. Retirar nomes amb autoritzacio." \
--output none
fi
fiaz provider registerés idempotent: si el proveïdor ja està registrat, l'operació no canvia res i acaba correctament. Registrar-lo no costa diners ni té efectes secundaris, per la qual cosa incloure'l garanteix que l'script funcioni també en una subscripció acabada de crear.
Solució 3:
- Equivalents en Azure PowerShell:
New-AzResourceGroup -Name "rg-contoso-millas-dev" -Location "westeurope" -Tag @{
entorno = "desarrollo"
proyecto = "contoso-millas"
}
Remove-AzResourceGroup -Name "rg-contoso-millas-dev" -Force-
Per a una canalització en un contenidor Linux triaria Azure CLI: la imatge és més lleugera que instal·lar el mòdul
Azde PowerShell, la sintaxi encaixa de manera natural amb Bash, la majoria de tasques de canalització són d'una línia, i pràcticament tots els exemples de canalitzacions d'Azure DevOps i GitHub Actions estan escrits ambaz. -
Auditoria de despesa inútil:
az disk list --query "[?diskState=='Unattached'].{Disc:name, Grup:resourceGroup, GB:diskSizeGb}" --output table
az network public-ip list --query "[?ipConfiguration==null].{IP:name, Grup:resourceGroup}" --output tableSón fonts clàssiques de despesa perquè es facturen per existir, no per fer-se servir. En esborrar una màquina virtual, els seus discos gestionats i la seva IP pública no s'eliminen automàticament si no es va marcar l'opció corresponent: queden orfes, invisibles en el dia a dia i cobrant cada mes. Una revisió mensual amb aquestes dues ordres sol ser l'optimització més rendible i més ràpida d'aplicar.
Conclusió
Amb aquesta lliçó tanques el mòdul 1 i ja tens la caixa d'eines completa. Saps per què automatitzar (repetible, auditable, escalable), has instal·lat Azure CLI i n'has comprovat la versió, saps iniciar sessió i —molt important— canviar i confirmar la subscripció activa abans de tocar res. Coneixes l'anatomia d'una ordre az i la seva ajuda integrada (--help, az find), i manejes --output table per llegir i --query amb JMESPath per filtrar, reanomenar camps, detectar recursos sense etiquetar i alimentar variables als scripts. Saps què aporta Azure PowerShell i amb quin criteri triar entre l'un i l'altre, i com funciona Cloud Shell: els seus dos intèrprets, el compte d'emmagatzematge que crea i factura, la persistència limitada a $HOME i el tancament per inactivitat. I has escrit un script real, parametritzat, comentat i idempotent que crea el grup rg-contoso-reservas-dev, el compte d'emmagatzematge de targetes d'embarcament i el seu contenidor privat, amb les etiquetes obligatòries de Contoso Airlines, a més de la rutina de neteja que evita factures sorpresa.
Recapitulant el mòdul complet: has entès què és el núvol i què és Azure i has conegut el cas de Contoso Airlines; has distingit IaaS, PaaS, SaaS i serverless, el model de responsabilitat compartida i la geografia d'Azure, fixant West Europe com a regió principal i North Europe com a parella; has creat i protegit el teu compte amb MFA i un pressupost amb alertes; et mous amb soltesa pel portal; domines Azure Resource Manager, la jerarquia de subscripció, grup de recursos i recurs, els bloquejos i l'esquema d'etiquetatge de Contoso; i ara automatitzes des de la línia d'ordres.
Tens els fonaments: el compte, la governança, la nomenclatura, els grups de recursos i l'eina per desplegar. El que falta és la plataforma en si. Al mòdul 2, Serveis principals d'Azure, comencem a construir-la de debò: desplegarem les màquines virtuals del motor de disponibilitat heretat, aprendrem a escalar i donar alta disponibilitat al còmput, publicarem Contoso Reserves i l'API de Disponibilitat a App Service, desarem les targetes d'embarcament a Azure Storage amb la redundància adequada, i construirem la xarxa virtual amb les seves subxarxes i grups de seguretat, a més de la connectivitat híbrida amb les oficines de Barcelona i Palma. Ens hi veiem.
Curs d'Azure
Mòdul 1: Introducció a Azure
- Què és Azure?
- Models de servei, regions i zones de disponibilitat
- Crear i configurar el teu compte d'Azure
- Recorregut pel portal d'Azure
- Azure Resource Manager: subscripcions, grups de recursos i etiquetes
- Azure CLI, PowerShell i Cloud Shell
Mòdul 2: Serveis principals d'Azure
- Màquines virtuals d'Azure
- Escalat i alta disponibilitat del còmput
- Azure App Service
- Azure Storage: blobs, fitxers, cues i taules
- Xarxes a Azure: xarxes virtuals, subxarxes i NSG
- Connectivitat híbrida i lliurament global
Mòdul 3: Bases de dades d'Azure
- Triar el servei de dades adequat
- Azure SQL Database
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Analítica de dades: Data Lake, Data Factory i Synapse
Mòdul 4: Seguretat a Azure
- Microsoft Entra ID i gestió d'identitats
- RBAC i identitats administrades
- Azure Key Vault
- Protecció DDoS i tallafoc d'aplicacions web
- Microsoft Defender for Cloud
- Governança i compliment amb Azure Policy
Mòdul 5: Azure DevOps
- Introducció a Azure DevOps
- Azure Repos
- Azure Pipelines: integració contínua
- Desplegament continu amb entorns i aprovacions
- Azure Artifacts
- Infraestructura com a codi amb Bicep
Mòdul 6: Serveis avançats d'Azure
- Contenidors a Azure: Container Registry i Container Apps
- Azure Kubernetes Service (AKS)
- Azure Functions
- Azure Logic Apps
- Missatgeria i esdeveniments: Service Bus, Event Grid i Event Hubs
- Serveis d'IA d'Azure
Mòdul 7: Monitoratge i gestió
- Azure Monitor: mètriques, alertes i taulers
- Log Analytics i consultes KQL
- Application Insights
- Azure Automation i runbooks
- Còpies de seguretat i recuperació davant desastres
Mòdul 8: Gestió i optimització de costos
- Calculadora de preus i estimació de costos
- Azure Cost Management: anàlisi, pressupostos i alertes
- Reserves, plans d'estalvi i Azure Hybrid Benefit
- Azure Advisor
- Estratègies d'optimització i cultura FinOps
