Lección 1 de 414 min
Amazon Web Services: lo esencial
Regiones y zonas, IAM, EC2, Lambda, RDS y VPC: los servicios que aparecen en casi cualquier arquitectura.
Tu aplicación funciona en tu equipo. Para que la usen miles de personas necesitas máquinas encendidas día y noche, una base de datos con copias de seguridad, una red protegida y a alguien que cambie los discos cuando se estropeen. Hace no tanto, eso significaba comprar servidores y alquilar un hueco en un centro de datos.
Amazon Web Services (AWS) te alquila todo eso por uso: arrancas un servidor en un minuto, lo pagas mientras está encendido y lo apagas cuando ya no lo necesitas. Es el mayor proveedor de nube pública por cuota de mercado y ofrece cientos de servicios, pero en casi cualquier arquitectura aparecen los mismos seis o siete. Son los de esta lección.
Las bases: modelos, regiones e identidad
Antes de arrancar ningún servidor conviene entender tres cosas: qué parte del trabajo te quita la nube, dónde viven físicamente tus recursos y quién tiene permiso para tocarlos.
IaaS, PaaS, SaaS y serverless
Cuánto trabajo delegas en el proveedor: de la máquina desnuda a la aplicación terminada.
- IaaS en AWS:
- Amazon EC2
- Serverless en AWS:
- AWS Lambda
Los servicios en la nube se clasifican por lo que gestiona el proveedor. En IaaS (infraestructura como servicio) alquilas máquinas virtuales, discos y redes; tú instalas y mantienes el sistema operativo y todo lo de encima. En PaaS (plataforma como servicio) entregas tu código y la plataforma lo ejecuta, lo escala y lo mantiene al día. En SaaS (software como servicio) usas una aplicación terminada, como Gmail.
Serverless («sin servidor») va un paso más allá: subes funciones o usas servicios gestionados que solo se activan cuando hay trabajo, escalan solos (incluso a cero) y se pagan por uso. Los servidores existen, claro, pero no los ves ni los administras.
Úsalo cuando
Para decidir qué servicio elegir: cuanto más gestionado, menos mantenimiento y menos control. Empieza por lo más gestionado que cubra tus necesidades y baja de nivel solo si algo te lo impide.
Ten en cuenta
Las etiquetas no son fronteras exactas: RDS, por ejemplo, es una base de datos «gestionada» con rasgos de IaaS y de PaaS. Lo útil es preguntarse qué tareas siguen siendo tuyas: parches, copias de seguridad, escalado y seguridad.
Regiones y zonas de disponibilidad
Dónde viven físicamente tus recursos y cómo sobrevivir a la caída de un centro de datos.
- Región:
- eu-central-1
- Zona:
- eu-central-1a
Una región es una zona geográfica con sus propios centros de datos, identificada por un código como us-east-1 (Virginia del Norte), eu-central-1 (Fráncfort) o sa-east-1 (São Paulo). Casi todos los recursos se crean en una región concreta, y tus datos no salen de ella salvo que tú los copies.
Cada región se divide en varias zonas de disponibilidad (AZ, Availability Zones), normalmente tres o más: centros de datos con energía, refrigeración y red independientes, separados por kilómetros pero unidos por enlaces de baja latencia. Si repartes tu aplicación entre dos o tres zonas, un incendio o un corte eléctrico en una de ellas no la tumba.
Úsalo cuando
Elige la región más cercana a tus usuarios (menos latencia) y que cumpla la normativa que te aplique, como el RGPD si tratas datos de personas en Europa. Reparte en al menos dos zonas todo lo que no pueda caerse.
Ten en cuenta
No todos los servicios ni todos los tipos de máquina existen en todas las regiones, y los precios cambian de una a otra. Hay excepciones curiosas: los certificados de ACM que usa CloudFront deben crearse en us-east-1, aunque tu web esté en otra región.
# Regiones disponibles para tu cuenta
aws ec2 describe-regions --query "Regions[].RegionName"
# Zonas de disponibilidad de una región
aws ec2 describe-availability-zones --region eu-central-1 \
--query "AvailabilityZones[].ZoneName"
# ["eu-central-1a", "eu-central-1b", "eu-central-1c"]IAM: identidades y permisos
Quién puede hacer qué sobre qué recursos, escrito en políticas JSON.
- Ámbito:
- Global, no por región
- Coste:
- Sin coste adicional
IAM (Identity and Access Management) controla el acceso a tu cuenta. Un usuario representa a una persona o a un programa con credenciales permanentes. Un rol es una identidad sin contraseña que se «asume» temporalmente: una instancia EC2, una función Lambda o una persona que inicia sesión reciben credenciales que caducan solas.
Los permisos se escriben en políticas JSON. Cada declaración permite (Allow) o deniega (Deny) unas acciones, como s3:GetObject, sobre unos recursos, identificados por su ARN (el identificador único de un recurso en AWS). Por defecto todo está denegado, y una denegación explícita gana siempre a cualquier permiso.
La regla de oro es el mínimo privilegio: cada identidad recibe solo los permisos que necesita y nada más. Así, si una credencial se filtra, el daño queda acotado.
Úsalo cuando
Desde el primer día. Usa roles para que tus servicios se hablen entre sí, sin claves pegadas en el código, y para las personas, el inicio de sesión centralizado de IAM Identity Center, que AWS recomienda frente a los usuarios IAM con claves fijas.
Ten en cuenta
El usuario raíz (root), el correo con el que creaste la cuenta, puede hacerlo todo, incluso cerrarla. Protégelo con MFA, no le crees claves de acceso y no lo uses para el trabajo diario. Y desconfía de "Action": "*": es la forma más rápida de que algo funcione y la peor de dejarlo.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "LeerFotosDelBucket",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::mis-fotos/*"
}
]
}El modelo de responsabilidad compartida
AWS se encarga de la seguridad de la nube: los edificios, el hardware, la red física y la capa de virtualización. Tú te encargas de la seguridad en la nube: tus datos, quién tiene acceso (IAM), qué puertos abres, el cifrado y, en EC2, los parches del sistema operativo. La frontera se mueve según el servicio: en Lambda, AWS también parchea el sistema y el runtime; en EC2, eso es cosa tuya.
Ejecutar código: EC2 y Lambda
Hay dos formas básicas de ejecutar tu código en AWS: alquilar una máquina virtual que está siempre encendida o subir funciones que solo existen mientras atienden un evento. En el módulo de contenedores verás una tercera vía, ECS.
Amazon EC2
Máquinas virtuales que arrancas en minutos y pagas mientras están encendidas.
- Modelo:
- IaaS
- Se paga:
- Por tiempo encendida
EC2 (Elastic Compute Cloud) te da instancias: máquinas virtuales con el sistema operativo que elijas. Cada una arranca a partir de una AMI (Amazon Machine Image), una plantilla con el sistema y, si quieres, tu software ya instalado. A partir de ahí es tu máquina: instalas, configuras y actualizas tú.
El tipo de instancia fija CPU, memoria y red, y su nombre se lee por partes. En m7g.large, m es la familia (uso general; c prioriza la CPU, r la memoria y t es barata y «a ráfagas»), 7 la generación, g indica un procesador Graviton (ARM) y large, el tamaño.
Con Auto Scaling defines un grupo de instancias con un mínimo, un máximo y una capacidad deseada. AWS añade máquinas cuando sube la carga, las quita cuando baja y sustituye las que no pasan sus comprobaciones de salud.
Úsalo cuando
Cuando necesitas control total del sistema, procesos que corren sin parar (un servidor de juegos, un worker que nunca duerme) o software que no encaja en un servicio gestionado.
Ten en cuenta
Una instancia encendida se cobra aunque nadie la use: apaga lo que no necesites. Y es IaaS: los parches, las copias y la vigilancia del sistema son tuyos. Las instancias Spot son mucho más baratas, pero AWS puede reclamarlas con solo dos minutos de aviso.
# Arranca una instancia pequeña a partir de una AMI
aws ec2 run-instances \
--image-id ami-0123456789abcdef0 \
--instance-type t3.micro \
--key-name mi-clave \
--subnet-id subnet-0def5678 \
--security-group-ids sg-0abc1234 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=web-1}]'AWS Lambda
Funciones que se ejecutan cuando ocurre un evento y se cobran solo mientras trabajan.
- Duración máxima:
- 15 minutos
- Se paga:
- Por invocación y duración
En Lambda subes una función: el código que debe ejecutarse cuando ocurre algo, como una petición HTTP, un archivo nuevo en S3, un mensaje en una cola o una hora programada. AWS prepara un entorno, ejecuta la función y escala solo: si llegan mil eventos a la vez, ejecuta muchas copias en paralelo.
Pagas por número de invocaciones y por tiempo de ejecución según la memoria asignada; si no llega ningún evento, no pagas nada. A cambio, cada invocación tiene un máximo de 15 minutos, y la primera petición tras un rato sin uso sufre un arranque en frío (cold start): AWS tiene que preparar el entorno y cargar tu código antes de responder.
Úsalo cuando
Para tareas cortas dirigidas por eventos: procesar una imagen al subirla, una API con tráfico irregular, tareas programadas o el «pegamento» entre servicios de AWS.
Ten en cuenta
No sirve para procesos largos ni para conexiones abiertas durante mucho tiempo. Los arranques en frío añaden latencia, de decenas de milisegundos a varios segundos según el runtime y el tamaño del código; la concurrencia aprovisionada los evita manteniendo entornos listos, a cambio de pagarlos. Y cuidado con abrir una conexión a la base de datos en cada invocación: con mucho tráfico, puedes agotarlas.
// Se ejecuta cada vez que se sube un archivo al bucket
export const handler = async (evento) => {
for (const registro of evento.Records) {
const bucket = registro.s3.bucket.name;
// S3 envía la clave codificada para URL, con «+» en lugar de espacios
const clave = decodeURIComponent(registro.s3.object.key.replaceAll("+", " "));
console.log(`Nuevo archivo: s3://${bucket}/${clave}`);
// Aquí generarías la miniatura, extraerías el texto…
}
return { procesados: evento.Records.length };
};Datos y red: RDS y VPC
Casi toda aplicación necesita una base de datos, y todos los recursos viven dentro de una red. RDS te quita el trabajo pesado de la primera; la VPC decide quién puede hablar con quién.
Amazon RDS y Aurora
Bases de datos relacionales gestionadas: AWS se ocupa de copias, parches y réplicas.
- Tipo:
- Base de datos gestionada
- Aurora:
- Compatible con MySQL y PostgreSQL
RDS (Relational Database Service) ejecuta por ti PostgreSQL, MySQL, MariaDB, SQL Server u Oracle, entre otros. Tú eliges el motor, el tamaño y el almacenamiento; AWS instala, aplica parches, hace copias de seguridad automáticas con restauración a un momento concreto y vigila la máquina. Te conectas con el cliente de siempre, como viste en el módulo de bases de datos.
Con Multi-AZ, RDS mantiene una copia en espera en otra zona de disponibilidad, sincronizada en todo momento: si la principal cae, conmuta a la copia, normalmente en uno o dos minutos y sin que cambies la dirección de conexión. Las réplicas de lectura son otra cosa: copias asíncronas que atienden consultas de solo lectura para repartir la carga.
Aurora es el motor propio de AWS, compatible con MySQL y PostgreSQL. Separa el cómputo del almacenamiento, que replica automáticamente entre varias zonas, y suele ofrecer más rendimiento y conmutaciones más rápidas a cambio de un precio algo mayor.
Úsalo cuando
Siempre que necesites una base de datos relacional y no quieras administrarla. Multi-AZ para producción; réplicas de lectura cuando las consultas de lectura saturan la instancia principal.
Ten en cuenta
En la modalidad clásica de Multi-AZ, la copia en espera no atiende lecturas: es solo un seguro. Las réplicas de lectura van con algo de retraso, así que alguien podría no ver todavía un dato que acaba de escribir. Y no hagas la base de datos accesible desde Internet: déjala en una subred privada.
# La contraseña la genera y guarda Secrets Manager, no tu terminal
aws rds create-db-instance \
--db-instance-identifier tienda-db \
--engine postgres \
--db-instance-class db.t4g.medium \
--allocated-storage 20 \
--master-username admin_tienda \
--manage-master-user-password \
--multi-az \
--backup-retention-period 7 \
--no-publicly-accessibleAmazon VPC
Tu red privada dentro de AWS: subredes, rutas y un cortafuegos por recurso.
- Subred pública:
- Ruta a un Internet Gateway
- Security group:
- Con estado, solo «permitir»
Una VPC (Virtual Private Cloud) es una red aislada con su propio rango de direcciones IP, como 10.0.0.0/16. Dentro creas subredes, cada una en una zona de disponibilidad. Una subred es pública si su tabla de rutas lleva a un Internet Gateway; si no, es privada, y sus máquinas no son alcanzables desde Internet (para salir, usan un NAT Gateway).
El patrón típico pone el balanceador de carga en subredes públicas y los servidores y la base de datos en privadas. Los security groups son cortafuegos asociados a cada recurso: solo admiten reglas de «permitir», tienen estado (si dejan entrar una petición, su respuesta sale sola) y pueden referirse a otros grupos: «la base de datos acepta el puerto 5432 solo desde el grupo de los servidores».
Úsalo cuando
Siempre: todo recurso con red vive en una VPC. Cada región trae una VPC por defecto para hacer pruebas; para producción, diseña la tuya con subredes públicas y privadas en al menos dos zonas.
Ten en cuenta
Abrir un puerto a 0.0.0.0/0 significa «a todo Internet»: está bien para el 443 de un balanceador, nunca para SSH o la base de datos. Los NAT Gateway se cobran por hora y por cada dato que procesan, y son una sorpresa habitual en la factura.
# Solo los servidores web (sg-0web5678) pueden hablar con la base de datos
aws ec2 authorize-security-group-ingress \
--group-id sg-0db1234 \
--protocol tcp \
--port 5432 \
--source-group sg-0web5678Vigila la factura
Antes de experimentar, crea una alerta en AWS Budgets: te avisará por correo si el gasto del mes supera la cifra que elijas. Y al terminar de probar, borra lo que hayas creado: una instancia o un NAT Gateway olvidados siguen cobrando cada hora.
Interactivo
IaaS, PaaS, serverless y SaaS
De izquierda a derecha, el proveedor asume cada vez más trabajo y tú conservas menos control.
| Característica | IaaS | PaaS | Serverless |
|---|---|---|---|
| Qué gestionas tú | Sistema operativo, runtime, código y datos | Código, configuración y datos | El código de las funciones y los datos |
| Qué gestiona el proveedor | Hardware, red física y virtualización | Además, el sistema, el runtime y el despliegue | Todo lo demás, incluido el escalado |
| Cómo se paga | Por tiempo de máquina encendida | Por plan o por recursos reservados | Por invocación y duración |
| Escalado | Lo configuras tú, por ejemplo con Auto Scaling | Lo hace la plataforma, dentro de los límites que eliges | Automático, incluso a cero |
| Ejemplos | Amazon EC2 | AWS Elastic Beanstalk, Heroku, Vercel | AWS Lambda, Cloudflare Workers |
Ponlo en práctica
Saber qué es cada cosa es la mitad del trabajo. La otra mitad es reconocer cuándo usarla.
Interactivo
¿Qué usarías?
Lee cada situación y elige la opción que mejor la resuelve. Fallar aquí no cuenta: es para practicar.
Cada vez que un usuario sube una foto de perfil hay que generar una miniatura. Hay picos por la tarde y casi ninguna subida de madrugada.
Para recordar
- Cuanto más gestionado es el servicio (IaaS → PaaS → serverless), menos mantenimiento y menos control: elige el más gestionado que te sirva.
- Elige la región por cercanía y normativa, y reparte entre al menos dos zonas de disponibilidad lo que no pueda caerse.
- IAM con mínimo privilegio y roles en lugar de claves fijas; el usuario raíz, con MFA y guardado en un cajón.
- EC2 para máquinas que controlas y que están siempre encendidas; Lambda para tareas cortas por eventos, con un máximo de 15 minutos.
- RDS te quita la administración de la base de datos; ponla en una subred privada y deja que los security groups decidan quién llega a ella.
Comprueba lo aprendido
Cuestionario
Responde las 5 preguntas para completar la lección.
1.Una función Lambda tiene que procesar un vídeo largo y tarda unos 40 minutos. ¿Qué pasa?
2.¿Qué diferencia hay entre Multi-AZ y una réplica de lectura en RDS?
3.¿Qué hace que una subred de una VPC sea «pública»?
4.Según el modelo de responsabilidad compartida, ¿quién aplica los parches de seguridad del sistema operativo de una instancia EC2?
5.Una política da a un usuario
Allowsobres3:*y otra le aplica unDenyexplícito sobres3:DeleteObject. ¿Puede borrar objetos?