Fundamentos cloud

"Si tu servidor cae a las 3 AM de un domingo, es problema tuyo. Si el datacenter de AWS cae, es problema de muchos — y AWS tiene un equipo entero que se despierta a arreglarlo."

Qué vas a aprender en este capítulo

Antes de profundizar en herramientas, necesitamos entender qué es la nube, los modelos de servicio, cómo se organizan los proveedores globalmente, y los servicios fundamentales que vas a usar todo el tiempo.


1.1 Modelos de servicio cloud

💡 Intuición

Pensá en la pizza:

  • On-premise: la hacés vos (compras ingredientes, masa, horno, cocinás).
  • IaaS (Infrastructure as a Service): te dan el horno y los ingredientes; vos cocinás.
  • PaaS (Platform as a Service): te dan la pizza armada lista para hornear; solo la metés al horno.
  • SaaS (Software as a Service): pedís pizza por delivery, llega lista.
  • FaaS (Function as a Service): no querés pizza completa — solo querés un trozo, lo pagás por trozo.

📐 Fundamento

Modelo Vos gestionás Proveedor gestiona Ejemplos
On-premise Todo Nada Tu propio datacenter
IaaS OS, runtime, app, datos Hardware, virtualización, networking EC2, Compute Engine, DigitalOcean Droplets
PaaS App, datos Hardware, OS, runtime, escalado Heroku, Vercel, App Engine
SaaS Solo configuración Todo Gmail, Slack, Salesforce
FaaS / Serverless Solo código de funciones Todo lo demás, escalado a 0 Lambda, Cloud Functions

Trade-offs:

Más control      ←─────────────────────────────→  Menos control
Más responsabilidad                              Menos responsabilidad
Más costo de operación                           Más costo por unidad
On-premise → IaaS → PaaS → FaaS → SaaS

Modelo de responsabilidad compartida:

Capa On-prem IaaS PaaS SaaS
Datos del usuario
Configuración de seguridad
Aplicación Proveedor
Runtime Proveedor Proveedor
OS Proveedor Proveedor
Virtualización Proveedor Proveedor Proveedor
Servidores físicos Proveedor Proveedor Proveedor
Red, datacenter Proveedor Proveedor Proveedor

Importante: incluso en SaaS, vos sos responsable de la seguridad de tus datos (configuración de permisos, contraseñas, etc.).


1.2 Arquitectura global

📐 Fundamento

Conceptos:

  • Region: zona geográfica (ej: us-east-1 Virginia, sa-east-1 São Paulo). Cada región es independiente.
  • Availability Zone (AZ): datacenter dentro de una región (ej: us-east-1a, us-east-1b). Cada región tiene 2-6 AZs aisladas.
  • Edge location: nodos de CDN, cerca de los usuarios.
Mundo
  └── Region (us-east-1, Virginia)
        ├── AZ us-east-1a (datacenter A)
        ├── AZ us-east-1b (datacenter B)
        └── AZ us-east-1c (datacenter C)
              ↑ aisladas eléctricamente y de red
              ↑ una falla en una AZ no afecta a las otras

¿Por qué importa?

  • Alta disponibilidad: distribuir la app entre múltiples AZs. Si una AZ se cae, la app sigue funcionando.
  • Latencia: elegir region cercana a usuarios (clientes en El Salvador → us-east-1 o sa-east-1).
  • Compliance: algunos países requieren que los datos no salgan del país (Argentina, Brasil, EU).
  • Costo: el precio varía por región. us-east-1 suele ser la más barata.

Servicios regionales vs globales:

  • Globales: IAM, CloudFront (CDN), Route 53 (DNS).
  • Regionales: EC2, RDS, S3 (los buckets son regionales aunque accesibles globalmente).
  • AZ-locales: EBS volumes, instancias EC2 individuales.

1.3 Servicios fundamentales de AWS

📐 Fundamento

Compute:

  • EC2 (Elastic Compute Cloud): VMs. Es IaaS.
  • Lambda: funciones serverless.
  • ECS / EKS: orquestación de contenedores (EKS = Kubernetes managed).
  • Elastic Beanstalk: PaaS estilo Heroku.

Storage:

  • S3 (Simple Storage Service): object storage. Para archivos, backups, sitios estáticos.
  • EBS (Elastic Block Store): volúmenes de disco para EC2.
  • EFS (Elastic File System): NFS compartido.

Bases de datos:

  • RDS: PostgreSQL/MySQL/etc. managed.
  • Aurora: versión optimizada de RDS, más cara pero mejor.
  • DynamoDB: NoSQL serverless.
  • ElastiCache: Redis/Memcached managed.

Networking:

  • VPC (Virtual Private Cloud): tu propia red privada en AWS.
  • Route 53: DNS.
  • CloudFront: CDN.
  • API Gateway: gateway para APIs.

Identity:

  • IAM (Identity and Access Management): usuarios, roles, permisos.

Ejemplo práctico — desplegar una API en EC2:

# 1. Crear instancia EC2 con AWS CLI
aws ec2 run-instances \
    --image-id ami-0c55b159cbfafe1f0 \
    --instance-type t3.micro \
    --key-name mi-key \
    --security-group-ids sg-12345 \
    --subnet-id subnet-67890

# 2. Conectarse por SSH
ssh -i mi-key.pem ubuntu@ec2-x-x-x-x.compute.amazonaws.com

# 3. Instalar y ejecutar tu app
sudo apt update && sudo apt install python3-pip
pip3 install fastapi uvicorn
uvicorn main:app --host 0.0.0.0 --port 80

S3 — almacenar archivos:

import boto3

s3 = boto3.client('s3')

# Subir archivo
s3.upload_file('factura_123.pdf', 'la-esquina-facturas', 'facturas/2026/factura_123.pdf')

# Generar URL temporal (presigned URL) para descarga
url = s3.generate_presigned_url(
    'get_object',
    Params={'Bucket': 'la-esquina-facturas', 'Key': 'facturas/2026/factura_123.pdf'},
    ExpiresIn=3600  # válida por 1 hora
)
print(url)  # https://la-esquina-facturas.s3.amazonaws.com/...?X-Amz-Signature=...

Hosting estático con S3 + CloudFront:

# Crear bucket público para website
aws s3 mb s3://la-esquina-frontend
aws s3 website s3://la-esquina-frontend/ --index-document index.html

# Subir SPA buildeada
aws s3 sync ./dist/ s3://la-esquina-frontend/

# Crear CloudFront distribution para CDN + HTTPS
# (más fácil con Terraform o Console)

1.4 IAM — el servicio más importante

💡 Intuición

IAM controla quién puede hacer qué en tu cuenta AWS. Es la primera línea de defensa. Una IAM mal configurada es la causa #1 de brechas de seguridad en cloud.

Regla de oro: principio de mínimo privilegio. Cada usuario/aplicación tiene SOLO los permisos que necesita, nada más.

📐 Fundamento

Componentes de IAM:

  • Users: personas o aplicaciones con credenciales propias.
  • Groups: colecciones de users (ej: "developers", "admins").
  • Roles: identidades temporales (asumibles por usuarios o servicios).
  • Policies: documentos JSON que definen permisos.

Ejemplo de política IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermitirLecturaBucketFacturas",
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:ListBucket"],
      "Resource": [
        "arn:aws:s3:::la-esquina-facturas",
        "arn:aws:s3:::la-esquina-facturas/*"
      ]
    },
    {
      "Sid": "DenegarBorrar",
      "Effect": "Deny",
      "Action": "s3:DeleteObject",
      "Resource": "*"
    }
  ]
}

Roles para EC2 (mejor que usar credenciales hardcodeadas):

# MAL — credenciales en código
s3 = boto3.client('s3', 
    aws_access_key_id='AKIA...',
    aws_secret_access_key='...')

# BIEN — la EC2 tiene un rol asignado, boto3 lo detecta automáticamente
s3 = boto3.client('s3')  # usa el rol de la instancia

Errores comunes:

  • Usar la cuenta root para tareas diarias (crear usuarios IAM separados).
  • Subir credenciales a Git (usar git-secrets para detectarlas).
  • Permisos *:* en vez de explícitos.
  • No habilitar MFA en cuenta root y admins.

1.5 Ejercicios

✏️ Ejercicio 1.1 — Modelo cloud apropiado

Para cada caso, elegí el modelo apropiado (IaaS, PaaS, SaaS, FaaS) y justificá:

a. Necesitás mandar emails transaccionales (confirmaciones, resets de contraseña). b. Tenés una app legacy en PHP que necesita un kernel Linux específico. c. Querés un endpoint que se ejecute cuando se sube una imagen a S3, para generar thumbnails. d. Necesitás un CRM para tu equipo de ventas.


1.6 Para profundizar


Definiciones nuevas: cloud computing, IaaS, PaaS, SaaS, FaaS, modelo de responsabilidad compartida, region, availability zone, edge location, EC2, S3, RDS, VPC, IAM, role, policy, principio de mínimo privilegio, presigned URL.