La lliçó anterior va acabar amb una pregunta incòmoda: si el grup d'Auto Scaling crea i destrueix
instàncies de la botiga de MercadoFresco segons el trànsit del divendres, on viuen les dades?
Les fotos de producte que avui són a /var/www/fotos del servidor de l'oficina no poden viure
dins d'un disc que desapareix quan l'ASG decideix que sobra una màquina.
Aquesta lliçó respon a aquesta pregunta des de dos angles complementaris. Amazon EBS (Elastic Block Store) dona a cada instància discs que sobreviuen a la màquina, s'amplien en calent i es copien sols. Amazon EFS (Elastic File System) dona a diverses instàncies alhora un sistema de fitxers compartit, que és exactament el que l'Auto Scaling necessita perquè les quatre màquines del divendres vegin les mateixes fotos.
I pel camí tanquem el problema 2 de MercadoFresco: les còpies de seguretat no fiables. El disc dur extern que la Marta connecta "quan se'n recorda" se substitueix per instantànies incrementals automatitzades amb Data Lifecycle Manager, amb retenció definida i còpia a una altra regió.
Contingut
- Els tres models d'emmagatzematge: blocs, fitxers i objectes
- Què és un volum EBS i què garanteix
- Tipus de volum EBS i com triar
- Dimensionar gp3: IOPS i rendiment independents de la mida
- Crear, adjuntar, formatar i muntar un volum
- Ampliar un volum en calent, sense aturar la botiga
- Instantànies: què són, com es cobren i com es restauren
- Data Lifecycle Manager: la fi del problema 2
- Xifratge de volums
- Instance store: ràpid, local i efímer
- Amazon EFS: un sistema de fitxers per a diverses instàncies
- Muntar EFS a les instàncies de la botiga
- Taula final: EBS, EFS, instance store i S3
Els tres models d'emmagatzematge: blocs, fitxers i objectes
Abans de tocar cap servei cal tenir clara una distinció que ordena tot el capítol de l'emmagatzematge al núvol. No són tres productes que competeixen: són tres models diferents de desar dades, i cadascun resol un problema diferent.
| Blocs (EBS) | Fitxers (EFS) | Objectes (S3) | |
|---|---|---|---|
| Unitat | Bloc de disc sense format | Fitxer dins d'una jerarquia | Objecte amb clau i metadades |
| Com s'hi accedeix | Com un disc dur: /dev/xvdf |
Protocol de xarxa NFS: mount |
API HTTPS: GET/PUT |
| Qui hi posa el sistema de fitxers | Tu (mkfs) |
El servei | No hi ha sistema de fitxers |
| Modificar part d'una dada | Sí, bloc a bloc | Sí | No: es reemplaça l'objecte sencer |
| Concurrència | 1 instància (o poques, amb multi-attach) | Milers d'instàncies alhora | Il·limitada, per HTTPS |
| Capacitat | Fixa, la que provisiones | Elàstica automàtica | Pràcticament il·limitada |
| Latència típica | Sub-mil·lisegon | Pocs mil·lisegons | Desenes de mil·lisegons |
| Cost relatiu per GB | Mitjà | Alt (≈3× EBS) | Baix |
| Cas clar | Disc de sistema, base de dades | Directori compartit entre servidors | Fotos, còpies, fitxers estàtics |
La regla mental que convé fixar:
- Blocs: quan el programari espera un disc. Un sistema operatiu, PostgreSQL, un motor de base de dades. Res d'això sap parlar HTTP.
- Fitxers: quan diversos servidors han de compartir els mateixos fitxers i el programari
espera rutes del sistema de fitxers (
/var/www/fotos). És la via de mínima modificació quan migres una aplicació heretada. - Objectes: quan la dada és un fitxer complet que s'escriu una vegada i es llegeix moltes. És el més barat, el més durador i el més escalable, però exigeix que l'aplicació faci servir la seva API.
Per a MercadoFresco, les fotos de producte podrien anar a EFS (sense tocar el codi) o a S3 (canviant el codi, més barat i millor a llarg termini). Veurem EFS aquí i S3 a la lliçó 02-03, on quedarà clar per què aquesta és la decisió definitiva.
Què és un volum EBS i què garanteix
Un volum EBS és un disc virtual que es connecta per xarxa a una instància EC2, però que el
sistema operatiu veu exactament com un disc local: apareix a lsblk, es formata amb mkfs i
es munta amb mount.
Les seves propietats essencials:
- És independent de la instància. Si termines la instància, el volum pot sobreviure
(depèn de l'atribut
DeleteOnTermination). El pots desconnectar i connectar a una altra màquina. - Viu en una sola zona de disponibilitat. Un volum d'
eu-west-1ano es pot connectar a una instància d'eu-west-1b. Per moure'l cal fer una instantània i restaurar-la a l'altra AZ. - Està replicat dins de la seva AZ. AWS en manté diverses còpies en servidors diferents: una fallada de disc físic no t'afecta. Però una fallada de l'AZ sencera, sí. Per això les instantànies importen.
- Es paga per GB provisionat, no per GB fet servir. Un volum de 500 GiB amb 3 GiB de dades costa com 500 GiB. Aquesta és una de les despeses ocultes més habituals.
- Es pot ampliar en calent, però no reduir. Dimensiona amb cap.
flowchart LR
subgraph AZ1["Zona de disponibilitat eu-west-1a"]
I1["Instancia<br/>mercadofresco-tienda-01"]
V1["Volum EBS arrel<br/>8 GiB gp3"]
V2["Volum EBS dades<br/>20 GiB gp3<br/>/var/www/fotos"]
I1 --- V1
I1 --- V2
end
subgraph AZ2["Zona de disponibilitat eu-west-1b"]
I2["Instancia<br/>mercadofresco-tienda-02"]
V3["Volum EBS arrel<br/>8 GiB gp3"]
I2 --- V3
end
V2 -.->|"instantania"| S["Instantanies a S3<br/>(regionals, multi-AZ)"]
S -.->|"restaurar"| V3
Fixa't en el detall important del diagrama: mercadofresco-tienda-02 no pot connectar-se al
volum de fotos de l'altra AZ. Aquest límit és precisament el que empeny cap a EFS o S3.
Tipus de volum EBS i com triar
N'hi ha dues categories: SSD, optimitzats per a operacions per segon (IOPS) i accés aleatori, i HDD, optimitzats per a rendiment seqüencial (MB/s) i cost per GB.
| Tipus | Tecnologia | IOPS màx. per volum | Rendiment màx. | Cost orientatiu (USD/GB-mes, eu-west-1) |
Cas d'ús |
|---|---|---|---|---|---|
| gp3 | SSD | 16.000 | 1.000 MB/s | 0,088 (+ IOPS i MB/s extra a part) | Opció per defecte: sistema, aplicacions, bases de dades mitjanes |
| gp2 | SSD | 16.000 (lligats a la mida) | 250 MB/s | 0,11 | Generació anterior; no triar-la per a res nou |
| io2 / io2 Block Express | SSD | 64.000 / 256.000 | 4.000 MB/s | 0,138 + 0,065 per IOPS | Bases de dades crítiques, IOPS garantides, 99,999 % de durabilitat |
| st1 | HDD | 500 | 500 MB/s | 0,048 | Registres, big data, lectura seqüencial massiva |
| sc1 | HDD | 250 | 250 MB/s | 0,018 | Arxiu fred al qual s'accedeix poques vegades |
Els preus són orientatius i canvien; consulta'ls sempre a la calculadora d'AWS. El que no canvia és l'ordre de magnitud entre ells.
Quatre criteris de decisió:
- Comença sempre per gp3. És més barat que gp2 en un ~20 % i dona 3.000 IOPS de base encara que el volum sigui d'1 GiB.
- Puja a io2 només si has mesurat que necessites més de 16.000 IOPS o si el negoci exigeix la durabilitat de cinc nous. És car.
- HDD (st1/sc1) només per a accés seqüencial. Si la càrrega fa moltes lectures petites i aleatòries, un HDD donarà un rendiment pèssim encara que el preu per GB sigui temptador.
- Els HDD no poden ser volums d'arrencada. El disc arrel sempre és SSD.
Migrar de gp2 a gp3 és gratis, en calent i estalvia diners. Si heretes un compte amb volums gp2, aquest és l'estalvi més fàcil que existeix:
aws ec2 modify-volume --volume-id vol-0123456789abcdef0 --volume-type gp3 \
--profile mercadofresco-dev --region eu-west-1Dimensionar gp3: IOPS i rendiment independents de la mida
Aquí hi ha la millora conceptual de gp3 respecte a gp2, i val la pena aturar-s'hi perquè explica moltes decisions d'arquitectura.
Amb gp2, el rendiment estava lligat a la mida: 3 IOPS per GiB. Si volies 3.000 IOPS, havies de provisionar 1.000 GiB, encara que només en fessis servir 40. Es comprava espai per comprar velocitat.
Amb gp3, els tres paràmetres es contracten per separat:
| Paràmetre | Inclòs al preu base | Màxim | Cost de l'extra |
|---|---|---|---|
| Mida | La que provisionis | 16 TiB | 0,088 USD/GB-mes |
| IOPS | 3.000 | 16.000 | ~0,006 USD per IOPS-mes per sobre de 3.000 |
| Rendiment | 125 MB/s | 1.000 MB/s | ~0,048 USD per MB/s-mes per sobre de 125 |
Comparació per al cas de MercadoFresco, que necessita 100 GiB i 3.000 IOPS:
| Opció | Configuració | Cost mensual aproximat |
|---|---|---|
| gp2 | 1.000 GiB (per arribar a 3.000 IOPS) | ~110 USD |
| gp3 | 100 GiB + 3.000 IOPS de base | ~8,8 USD |
Un factor 12 de diferència per conèixer el tipus correcte de volum. I si més endavant la base de dades necessités 6.000 IOPS, s'afegeixen sense tocar la mida:
aws ec2 modify-volume \
--volume-id vol-0123456789abcdef0 \
--iops 6000 --throughput 250 \
--profile mercadofresco-dev --region eu-west-1Un límit pràctic que cal conèixer: la instància també té un sostre. Un t3.micro no
podrà aprofitar 16.000 IOPS per molt que les contractis, perquè la seva amplada de banda cap a EBS està
limitada. Per a càrregues de disc intensives es fan servir instàncies "optimitzades per a EBS" de mida
suficient. Serveix de poc un volum rapidíssim penjat d'una instància diminuta.
Crear, adjuntar, formatar i muntar un volum
Donarem a mercadofresco-tienda-01 un disc dedicat de 20 GiB per a les fotos de producte,
separat del disc de sistema. Separar dades de sistema és una bona pràctica: pots reinstal·lar la
màquina sense tocar les dades, i fer instantànies només del que importa.
Pas 1: crear el volum (a la mateixa AZ que la instància)
# L'AZ ha de coincidir EXACTAMENT amb la de la instància. Si no, no es podrà adjuntar.
VOL_ID=$(aws ec2 create-volume \
--availability-zone eu-west-1a \
--size 20 \
--volume-type gp3 \
--encrypted \
--tag-specifications 'ResourceType=volume,Tags=[
{Key=Name,Value=mercadofresco-fotos-01},
{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=desarrollo},
{Key=Componente,Value=catalogo},
{Key=Propietario,Value=luis},
{Key=CentroCoste,Value=operaciones}]' \
--query 'VolumeId' --output text \
--profile mercadofresco-dev --region eu-west-1)
echo "Volum creat: $VOL_ID"--encryptedactiva el xifratge en repòs amb la clau gestionada per AWS. Costa el mateix que sense xifrar i no es pot afegir després, així que es posa sempre des del principi.- El
Componenteéscatalogo, perquè són les fotos de producte, no la botiga en si. L'esquema d'etiquetatge permet després imputar el cost a l'equip correcte.
Pas 2: adjuntar-lo a la instància
aws ec2 attach-volume \
--volume-id "$VOL_ID" \
--instance-id i-0123456789abcdef0 \
--device /dev/sdf \
--profile mercadofresco-dev --region eu-west-1Un detall que despista: demanes /dev/sdf però Amazon Linux amb nucli modern i NVMe el mostrarà
com a /dev/nvme1n1. El nom que demanes és una etiqueta; el que veus a dins depèn del sistema.
Per això mai no es munta per nom de dispositiu a /etc/fstab, sinó per UUID.
Pas 3: formatar i muntar (dins de la instància)
# Veure els discs disponibles. El nou apareix sense punt de muntatge.
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# nvme0n1 259:0 0 8G 0 disk
# └─nvme0n1p1 259:1 0 8G 0 part /
# nvme1n1 259:2 0 20G 0 disk <-- el nou, buit
# Comprovar si ja té sistema de fitxers. Si respon "data", és buit.
sudo file -s /dev/nvme1n1
# /dev/nvme1n1: data
# Formatar amb XFS (l'estàndard a Amazon Linux; ext4 és igualment vàlid).
# ATENCIÓ: mkfs DESTRUEIX tot el que hi hagi al volum. Només en discs nous.
sudo mkfs -t xfs /dev/nvme1n1
# Crear el punt de muntatge i muntar
sudo mkdir -p /var/www/fotos
sudo mount /dev/nvme1n1 /var/www/fotos
# Comprovar
df -h /var/www/fotos
# Filesystem Size Used Avail Use% Mounted on
# /dev/nvme1n1 20G 175M 20G 1% /var/www/fotosPas 4: fer-ho permanent a /etc/fstab
Sense aquest pas, el muntatge es perd al següent reinici i la botiga arrenca amb el directori de fotos buit.
# Obtenir l'UUID del sistema de fitxers (estable, a diferència de /dev/nvme1n1)
sudo blkid /dev/nvme1n1
# /dev/nvme1n1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="xfs"
# Afegir la línia a /etc/fstab
echo 'UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/www/fotos xfs defaults,nofail 0 2' \
| sudo tee -a /etc/fstab
# VERIFICAR SEMPRE abans de reiniciar. Aquesta comanda rellegeix fstab i munta el que falti.
sudo umount /var/www/fotos
sudo mount -a
df -h /var/www/fotosL'opció
nofailno és decorativa. Sense ella, si el volum no està disponible en arrencar, la instància es queda bloquejada a l'arrencada i no hi podràs entrar ni per SSH. És una de les formes més freqüents de "perdre" una instància a EC2. Executa sempresudo mount -aabans de reiniciar per comprovar que la línia defstabés correcta.
Ampliar un volum en calent, sense aturar la botiga
Al novembre, amb la campanya de Nadal, les fotos del catàleg omplen els 20 GiB. Ampliar és una
operació en dues meitats: primer el volum a AWS, després el sistema de fitxers dins de la
instància. Si només fas la primera, df -h continuarà mostrant 20 GiB i pensaràs que no ha
funcionat.
# Meitat 1: ampliar el volum a AWS (la instància continua en marxa)
aws ec2 modify-volume --volume-id "$VOL_ID" --size 50 \
--profile mercadofresco-dev --region eu-west-1
# Seguir el progrés de l'optimització
aws ec2 describe-volumes-modifications --volume-id "$VOL_ID" \
--query 'VolumesModifications[].{Estat:ModificationState,Progres:Progress}' \
--output table \
--profile mercadofresco-dev --region eu-west-1# Meitat 2: dins de la instància, estendre la partició i el sistema de fitxers
lsblk # el disc ja mostra 50G, el sistema de fitxers no
# Si el volum té particions, primer s'amplia la partició:
sudo growpart /dev/nvme1n1 1 # (no aplica si has formatat el disc sencer, com aquí)
# Estendre el sistema de fitxers EN CALENT, amb el volum muntat:
sudo xfs_growfs -d /var/www/fotos # per a XFS
# sudo resize2fs /dev/nvme1n1 # per a ext4
df -h /var/www/fotos # ara sí: 50GRestriccions importants:
- No es pot reduir un volum. L'única via és crear-ne un de més petit, copiar-hi les dades i eliminar el gran.
- Entre dues modificacions del mateix volum han de passar almenys 6 hores.
- L'ampliació és transparent per a l'aplicació: no cal aturar nginx ni desmuntar.
Instantànies: què són, com es cobren i com es restauren
Una instantània (snapshot) és una còpia puntual d'un volum desada a Amazon S3 (en un espai gestionat per AWS, no en un bucket teu). És la base de les còpies de seguretat a EC2 i la resposta al problema 2 de MercadoFresco.
Tres propietats que cal entendre bé, perquè gairebé tothom les malinterpreta:
- Són incrementals, però cadascuna és completa. La primera instantània copia tots els blocs fets servir. La segona copia només els blocs que han canviat des de la primera. Tanmateix, restaurar la segona retorna el volum sencer, no un diferencial. AWS gestiona les referències internament.
- Esborrar una instantània intermèdia és segur. Si esborres la instantània 2, AWS conserva els blocs que la instantània 3 encara necessita. Mai no es corromp una cadena per esborrar-ne una baula.
- Es cobren per GB de dades úniques emmagatzemades (≈0,05 USD/GB-mes), no per la mida del volum. Un volum de 50 GiB amb 8 GiB de dades que gairebé no canvien genera instantànies molt barates.
flowchart LR
S1["Instantania 1<br/>dilluns<br/>8 GiB (completa)"] --> S2["Instantania 2<br/>dimarts<br/>+0,3 GiB nous"]
S2 --> S3["Instantania 3<br/>dimecres<br/>+0,5 GiB nous"]
S3 --> R["Restaurar la instantania 3<br/>= volum complet de 8,8 GiB"]
S1 -.-> C["Cost total facturat:<br/>8 + 0,3 + 0,5 = 8,8 GiB"]
Crear una instantània
SNAP_ID=$(aws ec2 create-snapshot \
--volume-id "$VOL_ID" \
--description "Fotos cataleg MercadoFresco - abans de la campanya de Nadal" \
--tag-specifications 'ResourceType=snapshot,Tags=[
{Key=Name,Value=snap-mercadofresco-fotos},
{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=desarrollo},
{Key=Componente,Value=catalogo},
{Key=Propietario,Value=luis},
{Key=CentroCoste,Value=operaciones}]' \
--query 'SnapshotId' --output text \
--profile mercadofresco-dev --region eu-west-1)
# Esperar que acabi (la primera vegada pot trigar minuts)
aws ec2 wait snapshot-completed --snapshot-ids "$SNAP_ID" \
--profile mercadofresco-dev --region eu-west-1
echo "Instantania $SNAP_ID completada"Coherència de les dades. Una instantània captura el que hi ha al disc, no el que l'aplicació té a la memòria. Per a fitxers estàtics com les fotos n'hi ha prou. Per a una base de dades cal congelar el sistema de fitxers o, molt millor, fer servir les còpies natives del motor —que és exactament el que fa RDS i veurem a la lliçó 02-04.
Restaurar
Una instantània no es restaura sobre el volum original: crea un volum nou. Aquest és el mecanisme que permet moure dades entre zones de disponibilitat, cosa que un volum EBS no pot fer per si sol.
# Crear un volum NOU a l'ALTRA AZ a partir de la instantània
NOU_VOL=$(aws ec2 create-volume \
--snapshot-id "$SNAP_ID" \
--availability-zone eu-west-1b \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[
{Key=Name,Value=mercadofresco-fotos-restaurado},
{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=pruebas},
{Key=Componente,Value=catalogo},
{Key=Propietario,Value=luis},
{Key=CentroCoste,Value=operaciones}]' \
--query 'VolumeId' --output text \
--profile mercadofresco-dev --region eu-west-1)Copiar a una altra regió (recuperació davant de desastres)
# Copiar la instantània d'Irlanda a Frankfurt. Nota: --source-region indica l'ORIGEN
# i --region indica la DESTINACIÓ on s'executa la còpia.
aws ec2 copy-snapshot \
--source-region eu-west-1 \
--source-snapshot-id "$SNAP_ID" \
--description "Copia DR de fotos MercadoFresco" \
--encrypted \
--profile mercadofresco-dev --region eu-central-1Copiar instantànies entre regions té cost de transferència de dades i d'emmagatzematge a destinació, però és la protecció real contra la fallada d'una regió sencera.
Data Lifecycle Manager: la fi del problema 2
Fins ara les còpies de MercadoFresco eren "la Marta connecta el disc extern quan se'n recorda": sense calendari, sense verificació i sense còpia fora de l'oficina. Això és el problema 2. Una instantània manual com l'anterior no ho arregla, perquè també depèn que algú se'n recordi.
Amazon Data Lifecycle Manager (DLM) executa instantànies segons una política: a quins recursos s'aplica (seleccionats per etiquetes), amb quina freqüència, quantes se'n conserven i on es copien. Aquí es veu per què l'esquema d'etiquetatge de MercadoFresco no era burocràcia: és el mecanisme de selecció de la política.
Primer, el rol que DLM necessita per actuar en nom teu (IAM es detalla a 04-01):
aws dlm create-default-role --resource-type snapshot \
--profile mercadofresco-dev --region eu-west-1I la política, desada a politica-dlm.json:
{
"ResourceTypes": ["VOLUME"],
"TargetTags": [
{"Key": "Proyecto", "Value": "mercadofresco"}
],
"Schedules": [
{
"Name": "Diario-7-dias",
"CreateRule": {
"CronExpression": "cron(0 2 * * ? *)"
},
"RetainRule": {"Count": 7},
"CopyTags": true,
"TagsToAdd": [
{"Key": "TipoCopia", "Value": "diaria-automatica"}
]
},
{
"Name": "Semanal-4-semanas-con-copia-DR",
"CreateRule": {
"CronExpression": "cron(0 3 ? * SUN *)"
},
"RetainRule": {"Count": 4},
"CopyTags": true,
"CrossRegionCopyRules": [
{
"TargetRegion": "eu-central-1",
"Encrypted": true,
"RetainRule": {"Interval": 4, "IntervalUnit": "WEEKS"}
}
]
}
]
}aws dlm create-lifecycle-policy \
--description "Copies automatiques de volums MercadoFresco" \
--state ENABLED \
--execution-role-arn arn:aws:iam::111122223333:role/AWSDataLifecycleManagerDefaultRole \
--policy-details file://politica-dlm.json \
--profile mercadofresco-dev --region eu-west-1Què fa exactament aquesta política, línia a línia:
TargetTags: s'aplica a tots els volums etiquetatsProyecto=mercadofresco. Qualsevol volum nou que el Luis creï amb l'etiqueta correcta entra automàticament al pla de còpies, sense que ningú se n'hagi de recordar. Aquest és el canvi cultural.- Programació diària:
cron(0 2 * * ? *)= tots els dies a les 02:00 UTC. Conserva les últimes 7; en crear la vuitena, esborra la més antiga, així que el cost s'estabilitza. - Programació setmanal: diumenges a les 03:00 UTC, en conserva 4 i copia cadascuna a
eu-central-1xifrada. Un mes d'història fora de la regió principal. CopyTags: true: les instantànies hereten les etiquetes del volum, amb la qual cosa el cost de les còpies també queda imputat al seuCentroCoste.
Amb això, el problema 2 queda resolt en la seva part de disc:
| Abans (servidor de l'oficina) | Ara (AWS amb DLM) | |
|---|---|---|
| Qui la fa | La Marta, quan se'n recorda | Automàtic, tots els dies a les 02:00 |
| On es desa | Disc extern al mateix edifici | S3 gestionat + còpia a una altra regió |
| Retenció | Se sobreescriu | 7 diàries + 4 setmanals, definit |
| Verificació | Cap | Estat visible; es prova restaurant |
| Temps de restauració | Hores o dies | Minuts |
| Cost | El disc extern + el temps de la Marta | Cèntims al mes |
Falta un matís honest: una còpia no provada no és una còpia. La Marta apunta al calendari una prova de restauració trimestral: crear un volum des de l'última instantània, muntar-lo en una instància de proves i verificar que les fotos hi són. La part de la base de dades d'aquest problema es tancarà a la lliçó 02-04, amb les còpies automàtiques i el PITR d'RDS.
Xifratge de volums
El xifratge d'EBS és transparent: es xifren les dades en repòs, les dades en trànsit entre la instància i el volum, i totes les instantànies derivades. No cal canviar res a l'aplicació i l'impacte en rendiment és menyspreable.
Punts pràctics:
- No es pot xifrar un volum existent. El procediment és: instantània → còpia de la instantània
amb
--encrypted→ crear un volum nou des d'aquesta còpia → intercanviar. - Es pot activar el xifratge per defecte a la regió, i és molt recomanable:
A partir d'aquí, tot volum nou a eu-west-1 neix xifrat encara que ningú no ho demani.
- Les claus les gestiona AWS KMS. Pots fer servir la clau gestionada per AWS (
aws/ebs, gratis) o una clau pròpia que et doni control de la rotació i de qui pot desxifrar. KMS és la lliçó 04-02; de moment n'hi ha prou de saber que el xifratge s'activa amb una casella.
Instance store: ràpid, local i efímer
Algunes famílies d'instàncies (les que porten d al nom, com m6id.large, i les
famílies i i d) inclouen discs NVMe físicament connectats al servidor amfitrió. És
l'instance store.
| EBS | Instance store | |
|---|---|---|
| Ubicació | Xarxa, dins de l'AZ | Físicament al host |
| Latència | Sub-mil·lisegon | Encara menor, sense salt de xarxa |
| Persistència | Sobreviu a aturar i terminar | Es perd en aturar o terminar |
| Es perd també si... | — | Falla el maquinari del host |
| Instantànies | Sí | No |
| Cost | A part, per GB-mes | Inclòs al preu de la instància |
| Es pot desconnectar | Sí | No |
És efímer per disseny: en aturar la instància, AWS la mourà a un altre host físic en arrencar-la, i aquest
host té altres discs. Un reinici (reboot) sí que conserva les dades, perquè no canvia de host;
un stop/start, no.
Usos legítims: memòries cau, fitxers temporals, dades intermèdies d'un procés de càlcul, scratch de
compilació. Per a MercadoFresco avui no aplica, però convé reconèixer-lo per no triar per error
una instància d pensant que el disc inclòs és un estalvi.
Amazon EFS: un sistema de fitxers per a diverses instàncies
Tornem al problema que va obrir la lliçó. El grup d'Auto Scaling aixeca 4 instàncies el divendres.
Cadascuna té el seu volum EBS. Si el Luis puja una foto de producte nova a la instància 1, les altres
tres no la veuen. I cap instància d'eu-west-1b no pot ni tan sols connectar-se al volum de
fotos que viu a eu-west-1a.
Amazon EFS resol exactament això: un sistema de fitxers NFS v4.1 gestionat que es munta simultàniament en milers d'instàncies, en diverses AZ, i que creix i decreix sol.
Les seves característiques diferencials:
- Elàstic de veritat: no es provisiona mida. Pagues pels GB que realment deses (≈0,30 USD/GB-mes a Standard, unes 3,4 vegades més car que EBS gp3).
- Regional: s'hi accedeix des de qualsevol AZ de la regió mitjançant "objectius de muntatge" (mount targets), un per subxarxa.
- Compartit: lectura i escriptura concurrent des de totes les instàncies muntades.
- Semàntica POSIX: permisos, propietaris, enllaços. Per a l'aplicació és un directori normal.
Classes d'emmagatzematge
| Classe | Descripció | Cost relatiu | Quan es fa servir |
|---|---|---|---|
| Standard | Dades replicades en diverses AZ | 1× | Dades actives que han de sobreviure a la caiguda d'una AZ |
| Standard-IA | Accés infreqüent, multi-AZ | ~0,15× + cost per accés | Fitxers de més de 30 dies sense obrir |
| One Zone | Una sola AZ | ~0,53× | Dades reproduïbles, entorns de desenvolupament |
| One Zone-IA | Una AZ, accés infreqüent | ~0,08× + cost per accés | Arxiu barat no crític |
La gestió del cicle de vida és automàtica: es configura "mou a IA el que porti 30 dies sense tocar-se" i EFS ho fa sol. Per al catàleg de MercadoFresco encaixa perfectament, perquè les fotos dels productes de temporada deixen de consultar-se fora de la seva època.
Modes de rendiment i de rendiment de xarxa
| Mode de rendiment | Latència | IOPS | Quan |
|---|---|---|---|
| General Purpose | Menor | Fins a 35.000 | Per defecte: servidors web, CMS, directoris personals |
| Max I/O | Major | Pràcticament il·limitades | Centenars d'instàncies en paral·lel, anàlisi massiva |
| Mode de rendiment de xarxa | Com funciona | Quan |
|---|---|---|
| Elastic (recomanat) | Escala automàticament segons la demanda, es paga per ús | Càrregues variables: el cas de MercadoFresco |
| Bursting | El rendiment depèn de la mida emmagatzemada, amb crèdits | Sistemes grans amb càrrega proporcional |
| Provisioned | Es contracta un rendiment fix independent de la mida | Poques dades però molt trànsit |
A la pràctica: General Purpose + Elastic llevat que mesuris que no t'arriba.
Muntar EFS a les instàncies de la botiga
# 1. Crear el sistema de fitxers
EFS_ID=$(aws efs create-file-system \
--performance-mode generalPurpose \
--throughput-mode elastic \
--encrypted \
--tags Key=Name,Value=efs-mercadofresco-fotos \
Key=Proyecto,Value=mercadofresco \
Key=Entorno,Value=desarrollo \
Key=Componente,Value=catalogo \
Key=Propietario,Value=luis \
Key=CentroCoste,Value=operaciones \
--query 'FileSystemId' --output text \
--profile mercadofresco-dev --region eu-west-1)
echo "EFS creat: $EFS_ID"
# 2. Un objectiu de muntatge PER SUBXARXA (un per AZ). Sense això, les instàncies
# d'aquella AZ no poden arribar al sistema de fitxers.
aws efs create-mount-target --file-system-id "$EFS_ID" \
--subnet-id subnet-aaa11111 --security-groups sg-efs-mercadofresco \
--profile mercadofresco-dev --region eu-west-1
aws efs create-mount-target --file-system-id "$EFS_ID" \
--subnet-id subnet-bbb22222 --security-groups sg-efs-mercadofresco \
--profile mercadofresco-dev --region eu-west-1El grup de seguretat sg-efs-mercadofresco ha de permetre el port 2049 (NFS) des del grup
de seguretat de les instàncies de la botiga. És la fallada número u en muntar EFS i s'explica a
fons a la lliçó 03-02.
Dins de la instància:
# Instal·lar el client recomanat per AWS (gestiona el xifratge en trànsit i els reintents)
sudo dnf install -y amazon-efs-utils
sudo mkdir -p /var/www/fotos-compartidas
# Muntar amb xifratge en trànsit (-o tls)
sudo mount -t efs -o tls "$EFS_ID":/ /var/www/fotos-compartidas
# Permanent a /etc/fstab
echo "$EFS_ID:/ /var/www/fotos-compartidas efs _netdev,tls,noresvport 0 0" \
| sudo tee -a /etc/fstab
sudo mount -a
df -h /var/www/fotos-compartidas
# Filesystem Size Used Avail Use% Mounted on
# 127.0.0.1:/ 8.0E 0 8.0E 0% /var/www/fotos-compartidasAquesta mida de "8.0E" (8 exabytes) és la manera que té NFS de dir "il·limitat": no hi ha mida que provisionar.
La línia corresponent aniria al user data de la plantilla de llançament que vam crear a 02-01,
perquè cada instància nova de l'ASG munti les fotos automàticament en arrencar. Amb això, el
diagrama del principi deixa de tenir el problema:
flowchart TD
subgraph AZ1["eu-west-1a"]
I1["tienda-01"]
I2["tienda-02"]
end
subgraph AZ2["eu-west-1b"]
I3["tienda-03"]
I4["tienda-04"]
end
EFS["EFS efs-mercadofresco-fotos<br/>/var/www/fotos-compartidas<br/>regional, elastic"]
I1 --> EFS
I2 --> EFS
I3 --> EFS
I4 --> EFS
Avís de cost i honestedat tècnica. EFS resol el problema sense tocar el codi de MercadoFresco, i per això és la resposta correcta quan migres una aplicació heretada amb pressa. Però per servir fotos de producte a navegadors és car (≈3,4× EBS, ≈13× S3 Standard), continua consumint CPU i amplada de banda de les instàncies, i no aprofita cap xarxa de distribució. A la lliçó 02-03 mourem
/var/www/fotosa S3, que és la decisió definitiva de MercadoFresco, i a 03-04 hi posarem CloudFront al davant.
Taula final: EBS, EFS, instance store i S3
| EBS | EFS | Instance store | S3 | |
|---|---|---|---|---|
| Model | Blocs | Fitxers (NFS) | Blocs | Objectes |
| Abast | Una AZ | Regional (multi-AZ) | Un host físic | Regional, multi-AZ |
| Instàncies simultànies | 1 (multi-attach a io2: fins a 16) | Milers | 1 | N/A (accés HTTPS) |
| Persisteix en terminar | Sí (configurable) | Sí | No | Sí |
| Capacitat | Provisionada, fins a 16 TiB | Elàstica, il·limitada | Fixa segons el tipus | Il·limitada |
| Es factura per | GB provisionats | GB emmagatzemats | Inclòs a la instància | GB emmagatzemats + peticions + sortida |
| Cost orientatiu GB-mes | 0,088 USD (gp3) | 0,30 USD (Standard) | 0 USD | 0,023 USD (Standard) |
| Latència | < 1 ms | Pocs ms | La més baixa | Desenes de ms |
| Còpies de seguretat | Instantànies + DLM | AWS Backup, replicació | Cap | Versionat + replicació |
| Cas a MercadoFresco | Disc de sistema, dades de la base de dades | Compartir fitxers entre instàncies sense tocar el codi | No es fa servir | Fotos de producte, còpies, fitxers estàtics (02-03) |
Errors Habituals i Consells
- Crear el volum en una AZ diferent de la de la instància. L'
attach-volumefallarà. Consulta semprePlacement.AvailabilityZonede la instància abans de crear el disc. - Oblidar
/etc/fstabi descobrir després d'un reinici que la botiga serveix un directori buit. I a l'inrevés: posar una línia malament afstabsensenofaili deixar la instància sense arrencar. Executasudo mount -aabans de cada reinici. - Ampliar el volum a AWS i no estendre el sistema de fitxers.
df -hno canvia i sembla que l'ampliació no ha funcionat. Faltengrowparti/oxfs_growfs/resize2fs. - Creure que es pot reduir un volum. No es pot. Provisiona amb criteri i amplia quan calgui.
- Volums orfes. En terminar instàncies queden volums en estat
availableque es continuen pagant i que ningú no mira. Revisa-ho cada mes:aws ec2 describe-volumes --filters Name=status,Values=available \\ --query 'Volumes[].{ID:VolumeId,GB:Size,Creat:CreateTime}' --output table \\ --profile mercadofresco-dev --region eu-west-1 - Instantànies que s'acumulen per sempre. Centenars d'instantànies manuals sense política de retenció són un degoteig constant a la factura. Per això tot ha de passar per DLM.
- Confiar en una còpia que no s'ha restaurat mai. Prova la restauració cada trimestre.
- Continuar fent servir gp2. Migrar a gp3 és gratis, en calent i més barat.
- Muntar EFS sense obrir el port 2049. El
mountes queda penjat sense missatge clar. Revisa el grup de seguretat de l'EFS. - Fer servir EFS per a tot per comoditat. És l'opció cara. Fes-lo servir quan necessitis semàntica POSIX compartida; per a fitxers que se serveixen per HTTP, S3.
- No xifrar des del principi. Costa el mateix i no es pot afegir després sense recrear el
volum. Activa
enable-ebs-encryption-by-defaulta la regió i oblida-te'n.
Exercicis
Exercici 1: triar el volum i calcular el cost
La base de dades de comandes de MercadoFresco necessita 200 GiB d'espai i, mesurat durant el pic dels divendres, 5.000 IOPS sostingudes amb un rendiment de 200 MB/s.
- Quin tipus de volum triaries i amb quina configuració exacta?
- Calcula el cost mensual aproximat amb els preus de la taula (0,088 USD/GB-mes, 0,006 USD per IOPS extra, 0,048 USD per MB/s extra).
- Quant costaria el mateix amb gp2? I per què gp2 obligaria a més a una altra decisió?
Exercici 2: dissenyar la política de còpies completa
La Marta vol una política de còpies que compleixi aquests requisits de negoci:
- Còpia cada 12 hores de tots els volums de producció, conservant 14 dies.
- Còpia mensual conservada 12 mesos i replicada a
eu-central-1. - Els volums de desenvolupament només necessiten còpia diària amb 3 dies de retenció.
- Les còpies han de poder imputar-se al centre de cost correcte a la factura.
Explica com estructuraries les polítiques de DLM i quines etiquetes fan possible cada selecció.
Exercici 3: decidir l'emmagatzematge per a quatre casos
Per a cada situació de MercadoFresco, tria entre EBS, EFS, instance store o S3, i justifica-ho en dues frases:
- A) El disc d'arrencada de les instàncies de la botiga.
- B) Un directori
/var/www/uploadson els clients pugen fotos d'incidències amb la seva comanda, i que les 4 instàncies de l'ASG han de veure per igual, sense poder tocar el codi PHP. - C) Els fitxers temporals del procés nocturn que recomprimeix 40.000 fotos del catàleg.
- D) Les 40.000 fotos del catàleg servides als navegadors dels clients.
Solucions
Solució 1.
-
gp3, 200 GiB, amb 5.000 IOPS i 200 MB/s provisionats. No cal io2: el límit de gp3 és 16.000 IOPS i 1.000 MB/s, molt per sobre del que es demana, i io2 és força més car. Un detall addicional: cal comprovar que la instància admet aquest rendiment cap a EBS (un
t3.microno; caldria un tipus optimitzat per a EBS de mida adequada). -
Cost gp3:
Emmagatzematge: 200 GB × 0,088 = 17,60 USD IOPS extra: (5.000 − 3.000) × 0,006 = 12,00 USD Rendiment extra: (200 − 125) × 0,048 = 3,60 USD ------------------------------------------------------ Total ≈ 33,20 USD/mes -
Amb gp2, el rendiment va lligat a la mida a raó de 3 IOPS/GiB, així que per a 5.000 IOPS caldrien 1.667 GiB:
1.667 GB × 0,11 ≈ 183 USD/mesMés de 5 vegades el cost, i amb la decisió forçada de provisionar 1.667 GiB per fer-ne servir 200: pagues 1.467 GiB d'espai buit només per comprar velocitat. Aquest és l'argument definitiu per no fer servir gp2 en res nou.
Solució 2.
Es creen tres polítiques de DLM, totes seleccionant per etiquetes, que és el que fa que funcioni sense manteniment:
| Política | TargetTags |
Programació | Retenció | Còpia entre regions |
|---|---|---|---|---|
| produccion-12h | Proyecto=mercadofresco + Entorno=produccion |
cron(0 */12 * * ? *) |
28 instantànies (= 14 dies a 2/dia) | No |
| produccion-mensual | Proyecto=mercadofresco + Entorno=produccion |
cron(0 4 1 * ? *) (dia 1 a les 04:00) |
12 | Sí, a eu-central-1, xifrada, 12 mesos |
| desarrollo-diaria | Proyecto=mercadofresco + Entorno=desarrollo |
cron(0 2 * * ? *) |
3 | No |
Claus del disseny:
TargetTagsamb dues etiquetes actua com un I lògic: només hi entren els volums que porten totes dues. Per això l'esquema d'etiquetatge obligatori del projecte és el que fa viable l'automatització: un volum nou ben etiquetat queda protegit sense que ningú hi intervingui.CopyTags: truepropagaCentroCoste,ComponenteiPropietarioa cada instantània, amb la qual cosa el cost de les còpies apareix correctament repartit a Cost Explorer (lliçó 11-03).- La retenció s'expressa en nombre d'instantànies, no en dies: cal traduir la freqüència. A 2 còpies diàries, 14 dies són 28 instantànies.
- Es poden agrupar les dues primeres en una sola política amb dos
Schedules(DLM n'admet fins a quatre per política); separar-les és igual de vàlid i més llegible.
Solució 3.
| Cas | Elecció | Justificació |
|---|---|---|
| A) Disc d'arrencada | EBS gp3 | El volum arrel ha de ser un dispositiu de blocs SSD i ha de persistir mentre la instància existeixi. És l'únic candidat possible. |
B) /var/www/uploads compartit |
EFS | Diverses instàncies en diverses AZ han de llegir i escriure els mateixos fitxers, i la restricció "sense tocar el codi PHP" descarta S3: l'aplicació continuarà fent servir rutes del sistema de fitxers. EBS no serveix perquè no es comparteix entre AZ. |
| C) Temporals del procés nocturn | Instance store (o EBS si el tipus triat no el porta) | Són dades reproduïbles i d'usar i llençar: la volatilitat no és un inconvenient, i el disc local dona la màxima velocitat sense cost addicional ni instantànies per gestionar. |
| D) Fotos del catàleg servides a clients | S3 | Objectes escrits una vegada i llegits moltes, servits per HTTPS. És unes 13 vegades més barat que EFS, té durabilitat d'onze nous, escala sense límit i es posa darrere de CloudFront. Ho veurem a 02-03 i 03-04. |
Conclusió
Has après a distingir els tres models d'emmagatzematge —blocs, fitxers i objectes— i a reconèixer per la forma del problema quin toca en cada cas: si el programari espera un disc, blocs; si diversos servidors comparteixen fitxers amb rutes POSIX, fitxers; si la dada és un fitxer complet servit per HTTP, objectes.
D'EBS saps que un volum viu en una sola AZ, que es paga per GB provisionat i no
fet servir, i que s'amplia però mai no es redueix. Saps triar entre gp3, gp2, io2, st1 i sc1, i has
calculat amb números per què gp3 és l'opció per defecte: en desacoblar mida, IOPS i
rendiment, evita l'absurd de gp2 de comprar 1.667 GiB per aconseguir 5.000 IOPS. Has recorregut
el cicle complet d'un disc de dades: create-volume, attach-volume, lsblk, mkfs, mount,
la línia d'/etc/fstab per UUID i amb nofail, i l'ampliació en calent en les seves dues
meitats, modify-volume a AWS i xfs_growfs dins de la màquina.
Has entès les instantànies de veritat: incrementals en el cobrament però completes en la
restauració, segures d'esborrar en qualsevol punt de la cadena, capaces de moure dades entre AZ i
entre regions. I amb Data Lifecycle Manager has convertit aquesta capacitat en un pla de còpies
que s'executa sol, selecciona per etiquetes i reté el just: set diàries, quatre
setmanals replicades a eu-central-1. Amb això, la part de disc del problema 2 de MercadoFresco
—les còpies que depenien que algú se'n recordés— està tancada, amb l'advertiment que una
còpia sense prova de restauració no compta com a còpia.
Coneixes a més el xifratge transparent d'EBS i per què s'activa per defecte a la regió, i saps què és l'instance store i per què la seva velocitat no compensa la seva volatilitat llevat que sigui per a dades prescindibles. Finalment, EFS t'ha donat la primera solució real al problema que va deixar obert l'Auto Scaling: un sistema de fitxers NFS regional, elàstic i muntat alhora a les quatre instàncies del divendres, amb les seves classes d'emmagatzematge i els seus modes de rendiment.
Però tanquem amb una decisió pendent i deliberada. EFS resol el problema de les fotos sense
tocar el codi, i per això és la resposta correcta amb pressa. No és la resposta correcta a llarg
termini: és unes tretze vegades més car que l'alternativa, obliga que el trànsit d'imatges passi per
les instàncies i no aprofita l'escala global d'AWS. A la lliçó 02-03, «Amazon S3»,
migrarem de veritat /var/www/fotos amb aws s3 sync, coneixerem els onze nous de
durabilitat, les classes d'emmagatzematge amb regles de cicle de vida que abarateixen les fotos
antigues del catàleg, el versionat que protegeix dels esborrats accidentals, les URL
signades prèviament amb què la Sara descarregarà els seus informes sense credencials, i els esdeveniments que més
endavant dispararan una funció Lambda per generar les miniatures.
Curs d'AWS
Mòdul 1: Introducció a AWS
- Què és AWS?
- Configuració del teu compte d'AWS
- Infraestructura global d'AWS
- Consola d'administració d'AWS
- AWS CLI i SDK
Mòdul 2: Serveis principals d'AWS
Mòdul 3: Xarxes i lliurament de contingut
- Amazon VPC
- Grups de seguretat i llistes de control d'accés
- Elastic Load Balancing
- Amazon CloudFront
- Route 53
Mòdul 4: Seguretat i identitat
- AWS Identity and Access Management (IAM)
- AWS Key Management Service (KMS)
- Secrets Manager i Parameter Store
- AWS Shield
- AWS WAF
Mòdul 5: Monitoratge i gestió
- Amazon CloudWatch
- AWS X-Ray i traçabilitat distribuïda
- AWS CloudTrail
- AWS Config
- AWS Trusted Advisor
Mòdul 6: Bases de dades
- Com triar la base de dades adequada
- Amazon DynamoDB
- Amazon Aurora
- Amazon Redshift
- Amazon ElastiCache
Mòdul 7: Integració d'aplicacions
- Amazon SQS
- Amazon SNS
- Amazon EventBridge
- AWS Step Functions
- Patrons d'integració: idempotència, reintents i cues de missatges fallits
