L'artefacte web-reservas existeix: compilat una sola vegada, provat i emmagatzemat. Però continua quiet. Entre aquest fitxer i app-contoso-reservas-pro encara hi ha la Marta Ríos enganxant ordres un divendres a la nit, i mentre això continuï així les mètriques DORA de Contoso no es mouran: el temps de lliurament continuarà sent de setmanes i el de restauració, d'hores.
Aquesta lliçó recorre aquest últim tram, que és el que fa por. Veuràs com els entorns converteixen «em sembla que en producció hi ha la versió de la setmana passada» en una dada exacta; com les comprovacions i aprovacions posen una porta conscient davant de producció sense tornar al desplegament manual; i com l'intercanvi de ranures que ja coneixes del mòdul 2 es converteix en un desplegament blau-verd real, amb una reversió que triga segons. Al final, desplegar deixarà de ser un esdeveniment.
Contingut
- Lliurament continu davant de desplegament continu
- Entorns: quina versió hi ha a cada lloc
- Comprovacions i aprovacions
- La canalització de diverses etapes
- Estratègies de desplegament i ranures d'App Service
- La connexió de servei restringida per entorn
- Migracions de base de dades: expandir i contraure
- Verificació posterior al desplegament i reversió
- Marques de característica: desplegar no és activar
- Errors Comuns i Consells
- Exercicis
- Conclusió
- Lliurament continu davant de desplegament continu
Dos termes que es fan servir com a sinònims i no ho són:
| Lliurament continu | Desplegament continu | |
|---|---|---|
| Què garanteix | Tot canvi validat pot desplegar-se en qualsevol moment | Tot canvi validat es desplega sol |
| Pas a producció | Una decisió humana, un botó | Automàtic, sense intervenció |
| Requisits | Canalització fiable, proves sòlides | A més: telemetria, reversió automàtica, cultura madura |
| Risc per desplegament | Baix | Molt baix (canvis diminuts i freqüents) |
Contoso se situa en lliurament continu amb una excepció: desarrollo i preproduccion es despleguen automàticament a cada fusió a main, i produccion requereix una aprovació. No és falta d'ambició, és proporcionalitat: un desplegament erroni al web de venda de bitllets té conseqüències econòmiques immediates, i l'equip encara no té la telemetria del mòdul 7 ni la reversió automàtica que justificarien treure aquesta porta. L'aprovació és una decisió de risc revisable, no un dogma; quan la taxa d'errada baixi del 15 %, tindrà sentit replantejar-la.
- Entorns: quina versió hi ha a cada lloc
Un entorn a Azure Pipelines és una entitat amb nom que representa una destinació de desplegament —desarrollo, preproduccion, produccion— i que aporta tres coses que un simple pas de desplegament no dóna:
- Traçabilitat: registra quina execució, quin artefacte i quines confirmacions es van desplegar, i quan. És la resposta exacta a «quina versió hi ha en producció?».
- Recursos registrats: opcionalment associa màquines virtuals o espais de noms de Kubernetes, amb el seu estat.
- Comprovacions: és el lloc on es pengen les aprovacions i les altres portes. Un detall important: la protecció viu a l'entorn, no al YAML, de manera que qui edita la canalització no la pot treure.
# Els entorns es creen des del portal (Pipelines > Entorns) o amb l'API REST.
# En executar-se un treball de desplegament contra un entorn inexistent, es crea sol,
# tot i aixi conve crear-los abans per poder configurar-ne les comprovacions.
az pipelines runs list --pipeline-name contoso-reservas-cd \
--query "[0].{execucio:name, estat:result, branca:sourceBranch}" -o tableContoso en crea tres: desarrollo (desplegament automàtic, sense portes), preproduccion (automàtic, amb comprovació de branca) i produccion (aprovació humana, finestra de desplegament i comprovació de branca).
- Comprovacions i aprovacions
Una comprovació és una condició que s'ha de complir abans que un treball pugui desplegar a l'entorn. Les que fa servir Contoso:
| Comprovació | Configuració a produccion |
Què evita |
|---|---|---|
| Aprovació | La Marta Ríos o el grup Contoso-Operaciones; qui va llançar l'execució no es pot aprovar a si mateix |
Que un canvi arribi sense decisió conscient |
| Finestra de desplegament | De dilluns a dijous, 08:00-16:00 (West Europe) |
El desplegament del divendres a la tarda i el cap de setmana d'obertura de temporada, quan no hi ha ningú de guàrdia |
| Comprovació de branca | Només refs/heads/main |
Que algú desplegui una branca de treball en producció |
| Invocar funció d'Azure | Crida una funció que consulta si hi ha una incidència oberta de gravetat 1 i retorna èxit o errada | Desplegar enmig d'una crisi |
| Consultar porta d'estat | Comprova les alertes actives de log-contoso-pro |
Desplegar sobre un sistema ja degradat |
L'aprovació mereix una precisió. No és un tràmit burocràtic: és el punt en què una persona amb context operatiu mira què entrarà, comprova que hi ha algú disponible per si alguna cosa surt malament i decideix. Per això es limita a un grup petit, té un temps d'espera (Contoso hi posa 3 dies, després dels quals l'execució es cancel·la) i permet deixar un comentari que queda registrat.
La finestra de desplegament codifica la regla que tothom diu i ningú no compleix. Abans era «intentem no desplegar els divendres»; ara l'execució senzillament espera fins dilluns a les 08:00. I la setmana d'obertura de temporada, quan el volum de reserves es multiplica, es congela produccion desactivant temporalment el desplegament automàtic cap a preproducció o afegint una segona aprovació.
- La canalització de diverses etapes
Aquesta és contoso-reservas-cd, que pren l'artefacte de 05-03 i el porta als tres entorns:
name: desplegament-$(Build.BuildNumber)
# Es dispara en COMPLETAR-SE amb exit la canalitzacio d integracio continua:
# no compila res, nomes consumeix el seu artefacte.
resources:
pipelines:
- pipeline: ci # Alies amb el qual es referencia despres
source: contoso-reservas-ci
trigger:
branches: { include: [ main ] }
trigger: none # Mai no es llanca per un enviament directe
variables:
- group: vg-contoso-reservas-comun
stages:
- stage: desarrollo
displayName: Desplegar a desenvolupament
jobs:
# 'deployment' (i no 'job') es el que enganxa amb un entorn i el seu historial
- deployment: desplegar_dev
environment: desarrollo
pool: { vmImage: ubuntu-latest }
strategy:
runOnce: # Estrategia mes simple: substituir i prou
deploy:
steps:
- download: ci # Recuperar l artefacte de la canalitzacio de CI
artifact: web-reservas
- task: AzureWebApp@1
inputs:
azureSubscription: sc-contoso-dev # Connexio de servei
appName: app-contoso-reservas-dev
package: $(Pipeline.Workspace)/ci/web-reservas
- stage: preproduccion
dependsOn: desarrollo # Nomes si l etapa anterior ha tingut exit
condition: succeeded()
jobs:
- deployment: desplegar_pre
environment: preproduccion
pool: { vmImage: ubuntu-latest }
strategy:
runOnce:
deploy:
steps:
- download: ci
artifact: web-reservas
- task: AzureWebApp@1
inputs:
azureSubscription: sc-contoso-pro
appName: app-contoso-reservas-pro
deployToSlotOrASE: true
resourceGroupName: rg-contoso-reservas-pro
slotName: preproduccion # La RANURA, no el lloc actiu
package: $(Pipeline.Workspace)/ci/web-reservas
- script: |
# Verificar la salut de la ranura ABANS d intercanviar-la
curl -f https://app-contoso-reservas-pro-preproduccion.azurewebsites.net/salud
displayName: Comprovar el punt de salut de la ranura
- stage: produccion
dependsOn: preproduccion
# Nomes des de main: doble cinturo al costat de la comprovacio de l entorn
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- deployment: intercanviar
environment: produccion # Aqui esperen l aprovacio i la finestra
pool: { vmImage: ubuntu-latest }
strategy:
runOnce:
deploy:
steps:
# El desplegament a produccio NO copia fitxers: intercanvia ranures
- task: AzureAppServiceManage@0
inputs:
azureSubscription: sc-contoso-pro
Action: 'Swap Slots'
WebAppName: app-contoso-reservas-pro
ResourceGroupName: rg-contoso-reservas-pro
SourceSlot: preproduccion
SwapWithProduction: true
- script: curl -f https://www.contosoairlines.example/salud
displayName: Verificacio posterior al desplegamentTres peces mereixen atenció. resources.pipelines fa que aquesta canalització es dispari en acabar la d'integració contínua i pugui descarregar-ne l'artefacte: no es recompila res, es desplega exactament el binari que es va provar. deployment en lloc de job és el que vincula el treball amb l'entorn i alimenta el seu historial. I dependsOn més condition encadenen les etapes: producció no s'intenta si preproducció ha fallat.
- Estratègies de desplegament i ranures d'App Service
| Estratègia | Com funciona | Interrupció | Cost | Reversió |
|---|---|---|---|---|
| Recreació | Es para el vell, s'engega el nou | Sí, visible | Cap | Tornar a desplegar l'anterior (lent) |
| Actualització gradual | Se substitueixen les instàncies per tandes | No | Cap | Lenta; conviuen dues versions |
| Blau-verd | Dos entorns complets; es commuta el trànsit de cop | No | Doble durant el desplegament | Immediata: es commuta de tornada |
| Canari | La versió nova rep primer un 5 % del trànsit | No | Baix | Ràpida; es retira el percentatge |
Contoso fa servir blau-verd, i l'implementa amb les ranures de desplegament d'App Service (02-03), que és on aquestes estratègies deixen de ser teoria:
graph LR
subgraph Abans
U1[Usuaris] --> P1["Ranura de produccio<br/>v2.4.0 · blau"]
CD1[Canalitzacio] -.desplega.-> S1["Ranura preproduccion<br/>v2.5.0 · verd"]
end
subgraph "Intercanvi amb escalfament"
W["App Service demana /salud a la ranura verda<br/>fins que respon correctament"]
end
subgraph Despres
U2[Usuaris] --> P2["Ranura de produccio<br/>v2.5.0 · verd"]
P2 -.-> S2["Ranura preproduccion<br/>v2.4.0 · blau, a punt per revertir"]
end
Abans --> W --> Despres
El que fa especial l'intercanvi d'App Service és l'escalfament: abans de moure el trànsit, la plataforma engega l'aplicació de la ranura, li aplica els ajustos de producció i li demana el seu punt /salud fins que respon correctament. Només aleshores commuta. Això elimina el problema clàssic del blau-verd casolà, en què els primers usuaris paguen l'arrencada en fred. I l'intercanvi és d'encaminament intern, no de còpia de fitxers: triga segons i és reversible amb la mateixa operació.
Requisits que cal respectar: els ajustos que no han de viatjar amb el codi —cadenes de connexió, referències @Microsoft.KeyVault(...)— han d'estar marcats com a ajust de ranura (slot setting) perquè quedin ancorats a la seva ranura, i el pla plan-contoso-reservas-pro ha de ser Standard o superior (Contoso fa servir Premium v3 amb redundància de zona, així que compleix de sobres).
- La connexió de servei restringida per entorn
Les connexions sc-contoso-dev i sc-contoso-pro de 05-01 no són intercanviables, i cal impedir activament que es facin servir malament:
- Àmbit i rol mínims:
sc-contoso-proté Col·laborador de lloc web sobrerg-contoso-reservas-pro. Pot desplegar i intercanviar ranures; no pot tocarrg-contoso-red-proni esborrar una base de dades. - Sense accés obert: en desactivar «concedir permís d'accés a totes les canalitzacions», una canalització nova no hereta la capacitat de desplegar en producció. Autoritzar-la és un acte explícit.
- Comprovació de connexió a l'entorn: la comprovació Required template o la restricció de la mateixa connexió permeten exigir que només es faci servir des d'una plantilla aprovada.
- Federació d'identitat de càrrega de treball: sense secret que caduqui ni que es pugui exfiltrar.
El principi és el mateix del mòdul 4 portat al lliurament: la credencial que desplega el web no hauria de poder fer res més que desplegar el web.
- Migracions de base de dades: expandir i contraure
Aquí hi ha el punt on més desplegaments «sense interrupció» es trenquen. Durant un intercanvi blau-verd, i durant la finestra de reversió posterior, dues versions del codi conviuen contra la mateixa base de dades db-reservas. Per tant:
Tota migració d'esquema ha de ser compatible cap enrere: la versió anterior del codi ha de continuar funcionant amb l'esquema nou.
El patró que ho garanteix és expandir i contraure, en tres desplegaments separats. Suposa que Contoso necessita substituir la columna nombre_pasajero per nombre i apellidos:
| Fase | Desplegament | Esquema | Codi |
|---|---|---|---|
| Expandir | 1 | S'afegeixen nombre i apellidos, admetent nuls; nombre_pasajero es conserva |
Escriu a les tres columnes, llegeix de l'antiga |
| Migrar | — | Un procés omple nombre/apellidos de les files històriques |
Sense canvis |
| Contraure | 2 i 3 | Després de confirmar que ningú no fa servir l'antiga, s'elimina nombre_pasajero |
Desplegament 2: llegeix de les noves. Desplegament 3: deixa d'escriure a l'antiga |
Regles pràctiques: no reanomenar ni eliminar mai una columna al mateix desplegament que introdueix la seva substituta; no afegir mai una columna NOT NULL sense valor per defecte, perquè la versió antiga no l'omplirà; i executar les migracions abans de l'intercanvi, en un pas propi contra sql-contoso-reservas-pro des d'un agent de pool-contoso-privado —el servidor només és accessible per pe-sql-reservas— i amb la identitat administrada que vas aprendre a 04-02, no amb contrasenyes.
La conseqüència important: una migració destructiva trenca la reversió. Si el desplegament elimina una columna i cal tornar enrere, la versió anterior es trobarà un esquema que no entén. Amb expandir i contraure, l'intercanvi invers sempre funciona.
- Verificació posterior al desplegament i reversió
Desplegar i marcar l'execució en verd no vol dir que funcioni. Contoso hi afegeix dues verificacions:
- Comprovació de salut:
curl -f https://www.contosoairlines.example/salud, que retorna error si el punt no respon 200. El punt/saludha de comprovar dependències reals —connexió adb-reservas, accés akv-contoso-pro— i no limitar-se a retornar «OK». - Proves de fum: un grapat de peticions que exerciten el camí crític (buscar un vol, consultar disponibilitat) contra la ranura de preproducció abans de l'intercanvi, no després.
I quan alguna cosa falla, la reversió. Hi ha dues formes i no són equivalents:
| Reintercanvi de ranura | Redesplegar la versió anterior | |
|---|---|---|
| Què fa | Torna a commutar l'encaminament | Executa de nou la canalització amb l'artefacte antic |
| Temps | Segons | Minuts (descàrrega, desplegament, escalfament) |
| Estat de l'aplicació | Ja està calenta a l'altra ranura | Arrencada en fred |
| Quan fer-la servir | Sempre que sigui possible | Si ja s'ha fet un altre intercanvi a sobre, o si cal anar unes quantes versions enrere |
El reintercanvi és literalment la mateixa tasca Swap Slots executada un altre cop, i per això convé tenir una canalització de reversió d'un sol pas, a punt per llançar sense pensar. Aquesta és la raó per la qual la mètrica DORA de temps de restauració de Contoso pot passar d'hores a menys d'un minut: no perquè l'equip sigui més ràpid arreglant, sinó perquè tornar enrere ja no consisteix a arreglar res.
Un advertiment: la reversió reverteix el codi, no les dades. Si la versió nova va escriure registres amb un format que l'anterior no entén, o si ja s'ha executat la fase de contracció, el reintercanvi no n'hi ha prou. D'aquí la disciplina de l'apartat anterior.
- Marques de característica: desplegar no és activar
L'últim pas perquè desplegar deixi de fer por és separar dues coses que solem confondre: desplegar (que el codi sigui en producció) i activar (que els usuaris el facin servir). Una marca de característica és una condició al codi que encén o apaga una funcionalitat sense desplegar res:
// El mapa de cabina viatja a produccio apagat; s encen quan l equip
// decideix, per a un percentatge d usuaris, i s apaga en segons si falla.
if (await _marques.EstaActivaAsync("mapa-cabina"))
{
return View("MapaCabinaInteractivo", model);
}
return View("SeleccionAsientoClasica", model);Això habilita tres coses: que les branques de característica siguin curtes de debò —la feina a mitges es fusiona apagada—, que el desplegament canari es faci per percentatge d'usuaris sense infraestructura addicional, i que apagar una funcionalitat trencada sigui instantani i no requereixi reversió. Azure App Configuration ofereix aquest servei gestionat amb el seu gestor de característiques, filtres per percentatge i per grup d'usuaris, i integració directa amb App Service.
El cost és real i cal reconèixer-lo: cada marca és una bifurcació que multiplica els camins possibles del codi. Es gestionen com a deute —amb propietari i data de retirada— i s'eliminen tan bon punt la funcionalitat està consolidada.
Què es mesura després de tot això és matèria del mòdul 7: cada desplegament s'ha de veure a Azure Monitor i a Application Insights, amb les mètriques d'errors i latència abans i després de l'intercanvi. Sense aquesta realimentació, l'aprovació de la Marta continua sent una decisió a cegues.
Errors Comuns i Consells
- Recompilar a cada entorn. Trenca la garantia que el que s'ha provat és el que es desplega. La canalització de desplegament consumeix l'artefacte, mai el regenera.
- Posar les aprovacions al YAML. Qui editi el fitxer les podria treure. Les comprovacions viuen a l'entorn, que té els seus propis permisos.
- Migracions destructives al mateix desplegament. Trenquen la reversió justament quan la necessites. Expandir i contraure, sempre, en desplegaments separats.
- Un punt
/saludque només retorna «OK». No comprova res. Ha de verificar les dependències reals: base de dades, magatzem de secrets, serveis externs crítics. - Ranures sense ajustos de ranura marcats. La cadena de connexió de producció viatja a preproducció o a l'inrevés, i acabes escrivint a la base de dades equivocada.
- Aprovar per costum. Una aprovació que sempre es concedeix en dos segons no és una porta, és un clic. Si ningú no mira què entra, val més automatitzar i dedicar l'esforç a la telemetria.
- Consell: guarda una canalització de reversió d'un sol pas, i assaja-la. Una reversió que no s'ha provat mai no és una reversió.
- Consell: etiqueta automàticament el repositori en desplegar en producció; així la correspondència entre etiqueta, artefacte i entorn no depèn de ningú.
Exercicis
Exercici 1: dissenyar les portes d'un entorn
Contoso Millas (centro-coste=CC-2077) muntarà el seu desplegament continu. El seu equip són quatre desenvolupadors i un responsable d'infraestructura. El seu web té molt menys trànsit que el de reserves i la seva finestra de més ús és els dilluns al matí.
- Quins entorns crearies i quina comprovació posaries a cadascun?
- Recomanaries lliurament continu o desplegament continu? Justifica-ho amb les diferències respecte a Contoso Reserves.
- On es configuren aquestes comprovacions i per què no al YAML?
Exercici 2: la migració que va trencar la reversió
Contoso desplega la versió 2.6.0, que inclou una migració que reanomena la columna codigo_reserva a localizador a db-reservas. Al cap de deu minuts apareix una errada greu al càlcul de tarifes i la Marta llança el reintercanvi de ranura. El web torna a la versió 2.5.0 i comença a fallar amb errors de columna inexistent.
- Què ha passat exactament i per què el reintercanvi no ha bastat?
- Reescriu el canvi amb expandir i contraure, indicant què fa cada desplegament.
- Des de quin agent s'ha d'executar la migració contra
sql-contoso-reservas-proi amb quina credencial?
Exercici 3: triar estratègia i calcular la reversió
Contoso vol provar un algorisme nou de preus a l'API de Disponibilitat, que corre a vmss-api-disponibilidad-pro darrere de lb-api-disponibilidad-pro. El risc és alt: un error de preus té impacte econòmic directe. L'equip vol exposar-lo primer a una fracció del trànsit.
- Quina estratègia de desplegament correspon i per què no blau-verd pur?
- Com la combinaries amb una marca de característica?
- Si l'algorisme falla amb el 5 % del trànsit, quina és la via de reversió més ràpida i per què?
Solucions
Solució 1:
millas-desarrollosense comprovacions, amb desplegament automàtic;millas-produccionamb comprovació de branca (nomésmain) i aprovació del responsable d'infraestructura. La finestra de desplegament hauria d'excloure el dilluns al matí, que és el seu pic. Un entorn de preproducció és opcional atesa la mida de l'equip, encara que si fan servir ranures d'App Service el patró surt gairebé de franc i convé mantenir-lo.- Lliurament continu al principi, per la mateixa raó que Contoso Reserves: encara no hi ha telemetria ni reversió automàtica que justifiquin treure la porta humana. Amb menys trànsit i menor impacte econòmic, però, és un candidat raonable a desplegament continu un cop les seves proves automàtiques siguin sòlides i tinguin alertes; el criteri no és la mida de l'equip, és la capacitat de detectar i revertir de pressa.
- A l'entorn d'Azure Pipelines, no al YAML, perquè el YAML el pot modificar qualsevol amb permís sobre el repositori: n'hi hauria prou d'enviar una sol·licitud de canvis que esborri l'aprovació. Les comprovacions de l'entorn tenen els seus propis permisos i són independents del codi.
Solució 2:
- La migració va reanomenar la columna, és a dir, la va eliminar i en va crear una altra. L'esquema va quedar incompatible amb la versió 2.5.0, que continua consultant
codigo_reserva. El reintercanvi reverteix el codi, però no reverteix l'esquema ni les dades: per això no va bastar. La reversió només funciona si tota migració és compatible cap enrere. - Desplegament 1 (expandir): afegir la columna
localizadoradmetent nuls, conservantcodigo_reserva; el codi escriu a totes dues i llegeix decodigo_reserva. Procés de migració: omplirlocalizadora les files històriques. Desplegament 2: el codi llegeix delocalizadori continua escrivint a totes dues —aquí ja es pot revertir sense dany—. Desplegament 3 (contraure): el codi deixa d'escriure acodigo_reservai, només després de confirmar que cap versió anterior no continua viva, s'elimina la columna. - Des d'un agent autoallotjat del grup
pool-contoso-privado, situat asnet-gestiondins devnet-contoso-pro, perquèsql-contoso-reservas-pronomés és accessible a través depe-sql-reservasi un agent allotjat per Microsoft no hi té ruta. La credencial ha de ser la identitat administrada de l'agent amb permisos d'Entra ID sobre la base de dades, mai una contrasenya d'administrador de SQL. I el pas va abans de l'intercanvi.
Solució 3:
- Canari. El blau-verd pur commuta el 100 % del trànsit de cop: si l'algorisme calcula malament, tots els clients veuen preus erronis durant el temps que es trigui a detectar-ho. El canari limita l'exposició a una fracció i permet comparar mètriques entre les dues versions abans de continuar. A
vmss-api-disponibilidad-pros'implementa desplegant la versió nova en un subconjunt d'instàncies i ponderant el repartiment alb-api-disponibilidad-pro, o publicant un grup d'instàncies nou i traslladant trànsit progressivament. - Amb una marca de característica per percentatge d'usuaris: es desplega el codi nou a totes les instàncies però apagat, i s'encén per a un 5 % des d'Azure App Configuration. Això és millor que el canari d'infraestructura perquè el repartiment es controla sense tocar el balancejador, es pot segmentar per tipus de client i totes les instàncies executen el mateix binari, cosa que elimina les diferències de configuració.
- Apagar la marca de característica: és instantani, no requereix desplegament, no requereix intercanvi i no toca la infraestructura. Només si l'errada fos fora de la marca —en codi comú— caldria recórrer al reintercanvi de ranura o a retirar les instàncies canari del balancejador. És exactament l'avantatge de separar el desplegament de l'activació: la via de reversió més ràpida deixa de ser un desplegament.
Conclusió
L'artefacte ja no espera: viatja sol. Saps distingir el lliurament continu del desplegament continu i per què Contoso se situa en el primer amb una porta humana davant de producció, no per dogma sinó perquè encara li falta la telemetria i la reversió automàtica que justificarien treure-la. Has creat els entorns desarrollo, preproduccion i produccion, que aporten el que un simple pas de desplegament no dóna: el registre exacte de quina versió hi ha a cada lloc i un lloc on penjar les proteccions fora del YAML, de manera que qui edita la canalització no les pugui treure.
Sobre aquests entorns hi has posat comprovacions amb sentit: l'aprovació de la Marta Ríos amb el seu temps d'espera, la finestra de desplegament que converteix «intentem no desplegar els divendres» en una regla que es compleix sola, la comprovació de branca i les portes que consulten si hi ha una incidència oberta abans de deixar passar res. Has escrit la canalització contoso-reservas-cd de tres etapes encadenades amb dependsOn i condition, que consumeix l'artefacte de 05-03 sense recompilar i que en producció no copia fitxers sinó que intercanvia la ranura preproduccion amb el seu escalfament previ contra /salud: el blau-verd real de Contoso, comparat en taula amb la recreació, l'actualització gradual i el canari. Saps restringir sc-contoso-pro al rol i a l'àmbit mínims i a les canalitzacions autoritzades; saps que tota migració ha de ser compatible cap enrere amb el patró expandir i contraure, perquè una columna eliminada trenca la reversió justament quan la necessites; i saps que revertir de debò és un reintercanvi de segons, no un redesplegament de minuts —el motiu pel qual el temps de restauració de Contoso pot caure d'hores a menys d'un minut—. I amb les marques de característica has separat desplegar d'activar, deixant la via de reversió més ràpida de totes: un interruptor.
Queda un cap que aquest mòdul arrossega des del principi. Els quatre repositoris de Contoso comparteixen una biblioteca de models de reserva que està copiada i enganxada en tres d'ells, i ja hi ha tres versions diferents circulant: quan en Diego corregeix la validació del localitzador al web, l'API continua amb la versió vella i totes dues discrepen en producció. Les plantilles de canalització van resoldre això per al YAML; falta resoldre-ho per al codi. A la lliçó següent, Azure Artifacts, muntaràs el feed contoso-paquetes, publicaràs contoso.reservas.modelos com a paquet versionat des d'una canalització, promocionaràs versions entre les vistes @local, @prerelease i @release, i configuraràs els orígens ascendents que protegeixen Contoso que un paquet públic desaparegui i, sobretot, de l'atac de confusió de dependències.
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
