La Marta Ríos va fer l'exercici d'anotar en què se li n'anava la setmana. El resultat incomoda: apagar i encendre els entorns de desenvolupament, esborrar instantànies de discos que ja ningú no recorda, revisar quins certificats són a punt de caducar, rotar credencials, exportar un informe de recursos sense etiquetar i aplicar pedaços a les màquines. Res d'això és difícil, res requereix criteri, i tot s'ha de fer. Són hores d'un perfil sènior dedicades a tasques que una màquina executaria millor, sempre igual i sense oblidar-se'n.
Amb la plataforma ja observable després de les tres lliçons anteriors, toca automatitzar l'operació. Azure Automation és el servei que executa scripts programats o disparats per esdeveniments, amb identitat pròpia, sense servidor per mantenir i amb registre de tot el que fa. En aquesta lliçó construiràs el compte d'automatització de Contoso, escriuràs el runbook que apaga els entorns de desenvolupament a la nit, el connectaràs amb les alertes de 07-01 i veuràs on acaba Automation i on comencen Azure Update Manager i Machine Configuration.
Contingut
- Què és Azure Automation i els seus components
- Tipus de runbook i quin triar
- Crear
aa-contoso-operacionesamb identitat administrada - El runbook estrella: apagar i encendre per etiqueta
- Programacions, proves, control de codi font i publicació
- Disparar un runbook des d'una alerta: runbook, Logic App o funció
- Gestió d'actualitzacions amb Azure Update Manager
- Configuració d'estat desitjat i Machine Configuration
- Azure Resource Graph: inventari a escala
- Costos i bones pràctiques de runbooks
- Errors Comuns i Consells
- Exercicis
- Conclusió
- Què és Azure Automation i els seus components
Azure Automation és un servei administrat que executa scripts —anomenats runbooks— en infraestructura de Microsoft, sota una identitat pròpia i amb un registre complet de cada execució. No cal aprovisionar ni apedaçar res. Les seves peces:
| Component | Què és | Ús a Contoso |
|---|---|---|
| Compte d'Automation | El contenidor: identitat, actius, runbooks i treballs | aa-contoso-operaciones |
| Runbook | L'script i la seva lògica | Detener-IniciarEntornosDev |
| Programació | Quan s'executa, amb la seva zona horària | Cada dia laborable a les 20:00 i a les 7:30 |
| Treball (job) | Una execució concreta, amb la seva sortida i el seu estat | Consultable i consultada per KQL |
| Variables | Valors de configuració, amb opció de xifratge | Identificadors de subscripció, llistes d'exclusió |
| Credencials | Usuari i contrasenya xifrats | Accés a sistemes antics de l'oficina |
| Certificats i connexions | Material d'autenticació reutilitzable | Integració amb el sistema de facturació |
| Mòduls | Biblioteques de PowerShell o Python disponibles | Az.Accounts, Az.Compute, Az.Resources |
| Hybrid Runbook Worker | Un agent que executa el runbook fora d'Azure | Servidors locals de l'oficina de Barcelona |
L'Hybrid Runbook Worker mereix una nota. Un runbook normal s'executa al núvol d'Azure i només arriba al que sigui accessible des d'internet o per xarxa privada. Els servidors de facturació de taulells que Contoso conserva a Barcelona no ho són. Instal·lant l'agent en una d'aquestes màquines, el mateix runbook s'executa dins de la xarxa local, amb accés a recursos interns, però programat i auditat des d'Azure. És la via per automatitzar el que és local sense obrir res cap enfora, i encaixa amb la connectivitat híbrida del mòdul 2.
- Tipus de runbook i quin triar
| Tipus | Llenguatge | Punts de control | Quan triar-lo |
|---|---|---|---|
| PowerShell | PowerShell 7.x | No | L'opció per defecte per a tasques sobre Azure |
| PowerShell Workflow | Sintaxi de flux de treball | Sí, amb paral·lelisme | Processos molt llargs i interruptibles; en desús |
| Python | Python 3.x | No | Equips amb base Python, o biblioteques de dades |
| Gràfic | Editor visual, sense codi | No | Demostracions; difícil de versionar i revisar |
La recomanació és directa: PowerShell llevat de motiu de pes. Els mòduls Az cobreixen tot Azure, la sintaxi és la mateixa que a Cloud Shell (mòdul 1) i el resultat és un fitxer de text que es revisa en un pull request. Els runbooks gràfics semblen còmodes i no ho són: no es poden comparar a Git, no es revisen bé i no es reutilitzen.
- Crear
aa-contoso-operaciones amb identitat administrada
aa-contoso-operaciones amb identitat administradaEl compte necessita permisos per actuar sobre els recursos. La manera correcta —i l'única acceptable en producció— és una identitat administrada assignada pel sistema, amb els permisos mínims i en l'àmbit mínim, aplicant l'RBAC del mòdul 4.
# 1. Compte d Automation amb identitat administrada assignada pel sistema
az automation account create \
--name aa-contoso-operaciones \
--resource-group rg-contoso-seguridad-pro \
--location westeurope --sku Free \
--assign-identity \
--tags entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042 propietario=marta.rios
# 2. Identificador de l entitat de seguretat d aquesta identitat
PRINCIPAL=$(az automation account show \
--name aa-contoso-operaciones --resource-group rg-contoso-seguridad-pro \
--query identity.principalId -o tsv)
# 3. Permis MINIM i ACOTAT: nomes iniciar/aturar VM, i nomes en desenvolupament
az role assignment create \
--assignee "$PRINCIPAL" \
--role "Colaborador de máquina virtual" \
--scope "/subscriptions/<id-desarrollo>/resourceGroups/rg-contoso-reservas-dev"
# 4. Lectura global per poder inventariar, sense capacitat de modificar
az role assignment create --assignee "$PRINCIPAL" --role "Lector" \
--scope "/subscriptions/<id-desarrollo>"Tres decisions que convé raonar. L'àmbit és rg-contoso-reservas-dev, no la subscripció: una fallada o un abús del runbook no pot tocar producció, per construcció. El rol és el més específic que serveix, mai Colaborador a nivell de subscripció, i menys encara Propietario —que a més permetria a la identitat concedir-se més permisos—. I la identitat és administrada, sense secrets per rotar ni que es puguin filtrar; els comptes d'execució clàssics basats en certificat estan retirats.
Després cal importar els mòduls necessaris (Az.Accounts, Az.Compute, Az.Resources) i fixar la versió de l'entorn d'execució. Una actualització automàtica de mòduls pot canviar el comportament d'un runbook que feia un any que funcionava; en producció, la versió es fixa i s'actualitza deliberadament.
- El runbook estrella: apagar i encendre per etiqueta
Aquest és el runbook que més diners estalvia i el que millor il·lustra les bones pràctiques. Els recursos de desenvolupament etiquetats amb horario=laborable no han d'estar encesos de nit ni el cap de setmana: són unes 128 hores setmanals de les 168 possibles, i això és directament factura.
<#
.SYNOPSIS
Inicia o atura els recursos de desenvolupament etiquetats amb horario=laborable.
.DESCRIPTION
Idempotent: comprova l estat abans d actuar i no falla si ja esta com cal.
Registra cada decisio per poder auditar-la des de log-contoso-pro.
#>
param(
[Parameter(Mandatory = $true)]
[ValidateSet("Iniciar", "Detener")]
[string]$Accio,
[string]$GrupRecursos = "rg-contoso-reservas-dev",
[string]$EtiquetaClau = "horario",
[string]$EtiquetaValor = "laborable",
# Execucio en sec: registra el que faria, sense fer-ho. Imprescindible en estrenar.
[bool]$Simulacio = $false
)
$ErrorActionPreference = "Stop" # qualsevol error no controlat atura el runbook
$inici = Get-Date
Write-Output "=== $Accio | grup=$GrupRecursos | simulacio=$Simulacio | $inici ==="
try {
# 1. Autenticacio amb la identitat administrada: sense secrets al codi
Connect-AzAccount -Identity | Out-Null
Write-Output "Autenticat amb la identitat administrada d aa-contoso-operaciones."
# 2. Localitzar les maquines per etiqueta. -Status porta l estat d energia real.
$maquines = Get-AzVM -ResourceGroupName $GrupRecursos -Status |
Where-Object { $_.Tags[$EtiquetaClau] -eq $EtiquetaValor }
if (-not $maquines) {
Write-Warning "Cap maquina amb $EtiquetaClau=$EtiquetaValor a $GrupRecursos."
return
}
Write-Output "Trobades $($maquines.Count) maquines candidates."
$actuades = 0; $omeses = 0; $fallides = 0
foreach ($vm in $maquines) {
$estat = ($vm.Statuses | Where-Object Code -like "PowerState/*").Code
# 3. Idempotencia: si ja esta en l estat desitjat, no es toca
$jaCorrecte = ($Accio -eq "Iniciar" -and $estat -eq "PowerState/running") -or
($Accio -eq "Detener" -and $estat -eq "PowerState/deallocated")
if ($jaCorrecte) {
Write-Output "OMESA $($vm.Name): ja esta en $estat."
$omeses++; continue
}
if ($Simulacio) {
Write-Output "SIMULAT $($vm.Name): s executaria '$Accio' (estat actual $estat)."
$actuades++; continue
}
# 4. Cada maquina en el seu propi try: una fallada no ha d abortar la resta
try {
if ($Accio -eq "Iniciar") {
Start-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -NoWait | Out-Null
} else {
# -Force evita la confirmacio interactiva; aturar allibera el cost de comput
Stop-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force -NoWait | Out-Null
}
Write-Output "FET $($vm.Name): '$Accio' llancada (estat previ $estat)."
$actuades++
}
catch {
Write-Error "FALLADA $($vm.Name): $($_.Exception.Message)"
$fallides++
}
}
$segons = [int]((Get-Date) - $inici).TotalSeconds
Write-Output "=== Resum: actuades=$actuades omeses=$omeses fallides=$fallides en ${segons}s ==="
# 5. Sortida estructurada: es consulta amb KQL i s hi pot alertar
if ($fallides -gt 0) { throw "El runbook ha acabat amb $fallides maquines fallides." }
}
catch {
Write-Error "Error general del runbook: $($_.Exception.Message)"
throw # rellancar marca el treball com a Failed i permet alertar
}Els cinc punts numerats són les bones pràctiques que fan la diferència entre un script i un runbook de producció. Connect-AzAccount -Identity autentica sense ni un sol secret. La selecció per etiqueta en lloc de per llista de noms significa que una màquina nova s'incorpora sola només etiquetant-la —i reforça la política d'etiquetatge del mòdul 1—. La idempotència permet executar-lo dues vegades sense efectes estranys, cosa que importa molt quan el dispara un reintent. El try per màquina evita que una fallada aïllada deixi les quinze restants enceses. I el throw final fa que el treball aparegui com a fallit, condició sobre la qual es pot alertar. El paràmetre $Simulacio és la xarxa de seguretat en estrenar: s'executa primer en sec i es revisa la sortida.
Una advertència de cost important: aturar una màquina des del sistema operatiu no deixa de facturar. Només l'estat deallocated, que és el que produeix Stop-AzVM, allibera el còmput. És un error clàssic que fa que l'automatització no estalviï res.
- Programacions, proves, control de codi font i publicació
El cicle de vida d'un runbook té un detall que sorprèn: existeix en esborrany i en publicat, i les programacions executen sempre la versió publicada. Editar sense publicar no canvia res en producció, cosa que és una protecció, no una nosa.
L'ordre correcte de treball és: escriure, provar al tauler de prova —que executa l'esborrany de manera interactiva i mostra la sortida en directe, ideal amb $Simulacio = $true—, publicar, i només llavors programar.
# Importar el runbook des del repositori contoso-infra
az automation runbook create --automation-account-name aa-contoso-operaciones \
--resource-group rg-contoso-seguridad-pro --name Detener-IniciarEntornosDev \
--type PowerShell --runbook-type PowerShell72
az automation runbook replace-content --automation-account-name aa-contoso-operaciones \
--resource-group rg-contoso-seguridad-pro --name Detener-IniciarEntornosDev \
--content @./runbooks/Detener-IniciarEntornosDev.ps1
az automation runbook publish --automation-account-name aa-contoso-operaciones \
--resource-group rg-contoso-seguridad-pro --name Detener-IniciarEntornosDevLes dues programacions de Contoso són diàries, de dilluns a divendres, en zona horària W. Europe Standard Time: sch-apagado-dev a les 20:00 amb el paràmetre Accio=Detener, i sch-encendido-dev a les 07:30 amb Accio=Iniciar. Els paràmetres s'associen al vincle entre programació i runbook, de manera que el mateix runbook serveix per a totes dues amb una sola base de codi. La zona horària no és un detall: una programació en UTC es desplaça una hora a l'estiu i l'equip arriba a les 8:00 amb les màquines apagades.
El control de codi font tanca el cercle amb el mòdul 5. El compte es connecta al repositori contoso-infra d'Azure Repos, carpeta /runbooks, i cada push a la branca principal sincronitza els runbooks. Les conseqüències són les que ja coneixes: revisió per pull request, historial de qui va canviar què, i possibilitat de revertir. Amb la sincronització activa, el portal deixa de ser el lloc on s'edita; editar-hi crea divergències que la sincronització següent trepitja.
- Disparar un runbook des d'una alerta: runbook, Logic App o funció
A 07-01 vas crear ag-guardia-contoso i vas deixar anunciat que un grup d'accions pot executar un runbook. Aquí es tanca el cercle: l'alerta detecta, el runbook remeia.
flowchart LR A["Metrica: profunditat de<br/>cola-emision-tarjetas > 500"] --> B["Alerta d Azure Monitor"] B --> C["Grup d accions<br/>ag-equipo-contoso"] C --> D["Webhook del runbook<br/>Escalar-ProcesadoTarjetas"] C --> E["Correu a l equip"] D --> F["Augmenta instancies<br/>i registra l accio"] F --> G["Nova execucio<br/>visible a AzureDiagnostics"]
El disparador és un webhook: una URL amb un testimoni d'un sol ús que es genera en crear-lo i no es pot tornar a consultar, per la qual cosa cal desar-la immediatament a kv-contoso-pro. El grup d'accions envia a aquesta URL l'esquema comú d'alertes, i el runbook el rep al paràmetre $WebhookData, del qual extreu quin recurs va disparar l'alerta:
param([object]$WebhookData)
if (-not $WebhookData) { throw "Aquest runbook s ha d invocar des d un webhook d alerta." }
$alerta = (ConvertFrom-Json $WebhookData.RequestBody).data.essentials
$recurs = $alerta.alertTargetIDs[0]
Write-Output "Alerta '$($alerta.alertRule)' amb gravetat $($alerta.severity) sobre $recurs"
Connect-AzAccount -Identity | Out-Null
# ... logica de remediacio, idempotent i amb registre ...Runbook, Logic App o funció? Totes tres poden reaccionar a una alerta, i l'elecció importa:
| Runbook d'Automation | Logic App | Azure Function | |
|---|---|---|---|
| Fort en | Operar infraestructura d'Azure | Integrar sistemes i notificar | Lògica a mida i rendiment |
| Llenguatge | PowerShell / Python | Dissenyador visual, connectors | El que triïs (06-03) |
| Latència d'arrencada | Segons a algun minut | Segons | Mil·lisegons (o arrencada en fred) |
| Execucions llargues | Sí, hores | Sí, amb límits | Limitat segons el pla |
| Qui el manté | Operacions | Operacions i negoci | Desenvolupament |
| Cost | Minuts, amb franja gratuïta | Per acció executada | Per execució i consum |
| Cas a Contoso | Apagar entorns, netejar instantànies | Avisar a Teams i obrir incidència (06-04) | GenerarTarjetaEmbarque (06-03) |
La regla que Contoso aplica: si la tasca manipula infraestructura d'Azure i l'escriuria un administrador, és un runbook. Si consisteix a encadenar sistemes i notificar persones, és una Logic App. Si és lògica de negoci amb requisits de latència, és una funció. I res no impedeix combinar-les: l'alerta de la cua dispara alhora un runbook que escala i una Logic App que avisa a Teams.
- Gestió d'actualitzacions amb Azure Update Manager
L'antiga solució de gestió d'actualitzacions integrada a Automation ha estat substituïda per Azure Update Manager, un servei independent que ja no requereix compte d'Automation ni àrea de treball, i que funciona igual per a màquines d'Azure i per a servidors habilitats per a Arc.
Les seves peces són tres: avaluació de l'estat de pedaços de cada màquina, implementació puntual sota demanda, i configuracions de manteniment, que són finestres recurrents amb el seu àmbit i la seva política de reinici.
# Finestra de manteniment mensual per a l entorn de desenvolupament
az maintenance configuration create \
--resource-group rg-contoso-seguridad-pro \
--resource-name mc-contoso-dev-mensual \
--location westeurope \
--maintenance-scope InGuestPatch \
--duration 03:00 \
--recur-every "Month Second Saturday" \
--start-date-time "2026-09-12 02:00" --time-zone "W. Europe Standard Time" \
--reboot-setting IfRequired \
--tags entorno=desarrollo proyecto=contoso-reservas centro-coste=CC-1042 propietario=marta.riosContoso manté dues configuracions: mc-contoso-dev-mensual, que apedaça vm-motor-disponibilidad-dev el segon dissabte de matinada, i mc-contoso-pro-mensual, més conservadora, per al sistema operatiu base de vmss-api-disponibilidad-pro. En un conjunt d'escalat l'estratègia preferible continua sent diferent: reemplaçar instàncies amb una imatge nova ja apedaçada en lloc d'apedaçar en calent, que és el que és coherent amb el bestiar davant de les mascotes del mòdul 2. I recorda coordinar la finestra amb una regla de processament d'alertes de 07-01 per no despertar ningú amb reinicis previstos.
- Configuració d'estat desitjat i Machine Configuration
Automation incloïa State Configuration (DSC), que defineix en codi l'estat que una màquina ha de tenir —quins serveis corren, quins paquets estan instal·lats, quines claus de registre— i el corregeix quan es desvia. Aquesta capacitat s'ha traslladat a Azure Machine Configuration, una extensió d'Azure Policy: en lloc de viure al compte d'Automation, s'assigna com una directiva més dins de la iniciativa «Base de governança de Contoso» del mòdul 4, i el seu compliment apareix al costat de la resta al tauler de governança.
La diferència conceptual amb Automation és la que convé retenir: un runbook executa una acció en un moment donat; Machine Configuration vigila i manté un estat de manera contínua. Contoso ho fa servir per exigir que a tots els servidors hi hagi l'agent d'Azure Monitor instal·lat i determinats serveis aturats, sense escriure ni un runbook.
- Azure Resource Graph: inventari a escala
Abans d'automatitzar cal saber sobre què. Azure Resource Graph consulta amb KQL les metadades de tots els recursos de totes les subscripcions en segons, cosa que amb az resource list recorrent grups trigaria minuts i esgotaria els límits de l'API. És el complement natural d'Automation: el runbook actua, Resource Graph decideix sobre què.
Resources
| where type =~ "microsoft.compute/virtualmachines"
| extend entorno = tostring(tags["entorno"]),
horario = tostring(tags["horario"]),
propietario = tostring(tags["propietario"]),
centroCoste = tostring(tags["centro-coste"])
| where entorno == "desarrollo"
| extend Etiquetada = iif(isnotempty(horario), "si", "NO")
| project name, resourceGroup, location, Etiquetada, propietario, centroCoste,
mida = tostring(properties.hardwareProfile.vmSize)
| order by Etiquetada asc, name ascLa consulta es llegeix igual que el KQL de 07-02, amb dues diferències: la taula Resources conté la configuració dels recursos, no els seus registres, i no hi ha TimeGenerated perquè descriu l'estat actual, no una sèrie temporal. El seu valor aquí és concret: la columna Etiquetada llista exactament les màquines de desenvolupament que no porten horario i que, per tant, el runbook està ignorant i continuen enceses de nit. S'executa amb az graph query -q "<consulta>" o des d'un runbook amb Search-AzGraph.
- Costos i bones pràctiques de runbooks
El model de preus és dels més benignes d'Azure: es paguen els minuts d'execució dels treballs, amb una franja mensual gratuïta generosa —de l'ordre de 500 minuts— que cobreix de sobres un ús com el de Contoso, i els nodes gestionats per configuració d'estat, si se'n fan servir. El compte d'Automation en si no costa res. Posat en perspectiva: el runbook d'apagada consumeix uns pocs minuts al dia i estalvia el 75 % del cost de còmput d'un entorn complet. És probablement la millor relació de tota la plataforma, i hi tornaràs al mòdul 8.
Les bones pràctiques que separen un runbook fiable d'una bomba de rellotgeria:
- Idempotent: executar-lo dues vegades produeix el mateix resultat. Comprova l'estat abans d'actuar.
- Amb paràmetres, sense res codificat a foc: noms, grups i àmbits com a paràmetres o variables del compte.
- Amb mode de simulació: per estrenar-lo sense risc i per depurar.
- Amb registre estructurat:
Write-Outputamb un format constant, per poder consultar-lo amb KQL. - Amb tractament d'errors per element: una fallada aïllada no ha d'abortar el lot, però sí reflectir-se a l'estat final.
- Acotat per àmbit i per etiqueta: mai a nivell de subscripció sencera «per comoditat».
- Versionat a Git, revisat per pull request i publicat des del repositori.
I la vigilància, que tanca amb el que has après: els treballs d'Automation envien el seu estat i la seva sortida a log-contoso-pro mitjançant una configuració de diagnòstic (categories JobLogs i JobStreams), de manera que es pot alertar sobre JobStatus == "Failed" amb una alerta de cerca de registres. Un runbook que falla en silenci és pitjor que no tenir runbook, perquè l'equip creu que la tasca s'està fent.
Errors Comuns i Consells
- Editar i no publicar. La programació executa la versió publicada; l'esborrany no canvia res.
- Aturar la VM des del sistema operatiu. Continua facturant: només
Stop-AzVMl'allibera (deallocated). - Permisos excessius.
Colaboradora la subscripció per comoditat converteix una fallada del runbook en un incident de producció. - Programació en UTC. El canvi d'hora desplaça l'encesa i l'equip es troba les màquines apagades.
- Runbooks sense vigilància. Sense alerta sobre treballs fallits, la tasca deixa de fer-se i ningú no se n'assabenta.
- Actualització automàtica de mòduls en producció. Pot trencar un runbook estable; fixa les versions.
- Consell: estrena tot runbook amb
$Simulacio = $truei revisa la sortida abans de deixar-lo actuar. - Consell: selecciona per etiqueta, mai per llista de noms. Les llistes envelleixen; les etiquetes es mantenen soles si la política les exigeix.
- Consell: desa el testimoni del webhook a
kv-contoso-protan bon punt es generi. No hi ha manera de recuperar-lo després.
Exercicis
Exercici 1. Dissenya un runbook que elimini les instantànies de disc amb més de 90 dies a rg-contoso-reservas-dev, exceptuant les etiquetades amb conservar=si. Descriu paràmetres, salvaguardes, permisos, programació i vigilància. No cal el codi complet.
Exercici 2. El runbook d'apagada fa tres setmanes que s'executa «correctament», però la factura de desenvolupament no ha baixat. Enumera cinc causes possibles i com comprovar cadascuna.
Exercici 3. Contoso Millas (centro-coste=CC-2077) necessita, cada nit, exportar els bescanvis del dia a un fitxer, deixar-lo a stlagocontosopro i avisar l'equip financer. Decideix entre runbook, Logic App i funció —o combinació— i justifica l'arquitectura.
Solucions
Solució 1: paràmetres $GrupRecursos, $DiesAntiguitat = 90, $EtiquetaExclusio = "conservar", $Simulacio = $true per defecte, perquè és una operació destructiva i el valor segur ha de ser el predeterminat. Salvaguardes: filtrar per antiguitat amb TimeCreated i excloure les etiquetades; limitar el nombre d'esborrats per execució —per exemple 50— perquè un error de filtre no arrasi amb tot; try per instantània; i registre del nom, la data i la mida de cadascuna abans d'esborrar-la, de manera que en quedi constància. Permisos: un rol acotat a rg-contoso-reservas-dev amb permís de lectura i esborrat d'instantànies, mai Colaborador de subscripció. Programació: setmanal, en cap de setmana, fora de la finestra de manteniment per no encavalcar-s'hi. Vigilància: alerta de cerca de registres sobre JobStatus == "Failed" i, a més, sobre un nombre d'esborrats anormalment alt, que és el senyal que el filtre s'ha trencat. I la salvaguarda de fons: comprovar que existeixen còpies de seguretat vigents abans de considerar prescindible una instantània, cosa que es tracta a 07-05.
Solució 2: (a) Les màquines s'estan aturant des del sistema operatiu o l'estat és stopped i no deallocated, amb la qual cosa el còmput es continua facturant; es comprova amb Get-AzVM -Status o amb Resource Graph mirant l'estat d'energia. (b) Falten etiquetes: hi ha màquines de desenvolupament sense horario=laborable que el runbook ignora; es detecta amb la consulta de Resource Graph de l'apartat 9. (c) El cost no és de còmput: els discos administrats, les IP públiques i les adreces reservades es facturen encara que la màquina estigui alliberada, i poden ser la major part de la despesa d'un entorn petit. (d) Algú encén les màquines i no les apaga, o hi ha un procés que les inicia; es verifica amb AzureActivity filtrant per l'operació d'inici i veient quina identitat l'executa. (e) La despesa és en un altre lloc: App Service, bases de dades o el mateix log-contoso-pro, que el runbook no toca; es confirma amb l'anàlisi de cost per recurs del mòdul 8. Comprovació transversal: revisar els registres de treballs a log-contoso-pro, perquè «s'executa correctament» pot voler dir que actua sobre zero màquines cada nit.
Solució 3: arquitectura combinada, amb cada peça en el que fa millor. Un runbook de PowerShell programat a les 23:30 executa la consulta KQL de bescanvis sobre log-contoso-pro amb Invoke-AzOperationalInsightsQuery, genera el fitxer CSV i el puja a stlagocontosopro autenticant-se amb la identitat administrada d'aa-contoso-operaciones; és l'opció correcta perquè és una tasca d'infraestructura, pot durar minuts i l'escriuria un administrador. La notificació la resol una Logic App que reacciona a un esdeveniment de blob creat —Event Grid, mòdul 6— i envia l'avís a Teams i per correu amb l'enllaç: és integració amb persones, no infraestructura, i l'equip financer pot demanar canvis al missatge sense tocar codi. No cal una funció: no hi ha lògica de negoci complexa ni requisit de latència. Permisos mínims: Lector de Log Analytics sobre l'àrea i Colaborador de datos de Storage Blob només sobre el contenidor de destinació. Vigilància: alerta sobre treballs fallits i una segona alerta si el fitxer no apareix abans de les 00:30, perquè un runbook que no s'executa no genera cap error. Etiquetes: entorno, proyecto=contoso-millas, centro-coste=CC-2077 i propietario.
Conclusió
Ja saps què és Azure Automation i per a què serveix: executar la feina repetitiva que consumia les setmanes de la Marta Ríos, sense servidors, amb identitat pròpia i amb registre de tot. Coneixes els seus components —compte, runbooks, programacions, treballs, variables, credencials, certificats, connexions i mòduls— i l'Hybrid Runbook Worker que porta la mateixa automatització als servidors locals de l'oficina de Barcelona. Saps triar el tipus de runbook, amb PowerShell com a opció per defecte i els gràfics descartats per no ser versionables. Has creat aa-contoso-operaciones amb identitat administrada i permisos mínims acotats a rg-contoso-reservas-dev, aplicant l'RBAC del mòdul 4 en lloc de repartir Colaborador per comoditat.
El runbook estrella t'ha deixat un patró complet i reutilitzable: autenticació sense secrets, selecció per etiqueta en comptes de per llista, idempotència comprovant l'estat abans d'actuar, mode de simulació per estrenar-lo sense risc, tractament d'errors per màquina, registre estructurat i throw final perquè el treball es marqui com a fallit i s'hi pugui alertar —a més del detall que decideix si l'automatització estalvia o no: només deallocated deixa de facturar—. Saps provar-lo al tauler de prova, publicar-lo —perquè la programació executa la versió publicada, no l'esborrany—, programar-lo amb la seva zona horària correcta i versionar-lo a contoso-infra amb control de codi font, tancant el cercle amb el mòdul 5.
Has tancat també el cercle amb 07-01: una alerta d'Azure Monitor dispara un runbook per webhook, amb el seu testimoni desat a kv-contoso-pro, i tens la taula de decisió per triar entre runbook, Logic App i funció segons si manipules infraestructura, integres sistemes o executes lògica de negoci. Situes Azure Update Manager com a successor de la gestió d'actualitzacions, amb les seves configuracions de manteniment mc-contoso-dev-mensual i mc-contoso-pro-mensual, i Machine Configuration com a hereu de DSC dins d'Azure Policy, amb la distinció clau: el runbook actua una vegada, la configuració manté un estat. I t'endus Azure Resource Graph com a instrument d'inventari a escala per saber sobre què automatitzar, més els costos per minut amb la seva franja gratuïta i les bones pràctiques que fan un runbook fiable.
Queda l'última peça, i és la que decideix si tota la resta serveix d'alguna cosa. Contoso té ara una plataforma que veu el que passa i que s'opera sola en bona mesura, però res d'això no respon a la pregunta del dia dolent: un esborrat accidental, un xifratge per ransomware, una regió sencera que deixa de respondre. La lliçó 07-05, Còpies de seguretat i recuperació davant desastres, tanca el mòdul amb els dos números que governen aquesta conversa —RPO i RTO—, Azure Backup i els seus magatzems, la protecció davant l'esborrat maliciós, què resguarda cada servei PaaS pel seu compte i què continua sent teu, Azure Site Recovery, l'estratègia entre West Europe i North Europe, i el pla escrit que s'ha de provar, perquè un pla no provat no existeix.
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
