AWS EC2
AWS EC2
目次

Amazon EC2 a fondo: diseño práctico de servidores virtuales sin confusión — Comparativa real con GCP Compute Engine y Azure VM

Introducción (puntos clave)

  • Este artículo es una guía práctica lista para usar en el campo, centrada en AWS Amazon EC2 e incluye una comparación funcional punto por punto con Google Compute Engine (GCE) y Azure Virtual Machines (Azure VM).
  • Conclusión por adelantado: Para la “IaaS clásica” de disponibilidad y escalabilidad, estandariza en EC2 con Auto Scaling Group + ELB + Launch Template para mayor estabilidad. GCE destaca por los tipos de máquina personalizados (vCPU/memoria granulares), mientras que Azure se integra de forma natural con AD/AAD y redes virtuales, encajando bien con la gobernanza empresarial.
  • El meollo del diseño está en cinco áreas: selección de instancias, diseño de almacenamiento, red/seguridad, escalado/disponibilidad y automatización operativa.
  • Incluye muestras de CLI listas para usar (en paralelo para EC2/GCE/Azure VM), user data (cloud-init), plantillas para diseño de ASG/escalado y una lista de verificación operativa.
  • Lectores previstos: Departamentos de TI que migran a la nube, desarrolladores de apps web/negocio, ingenieros SRE/infraestructura, responsables de seguridad/gobernanza y líderes técnicos de startups. Para quienes quieren captar rápido la visión general desde lift & shift de VMs on-prem hasta diseño moderno de scale-out.

1. Qué es Amazon EC2: de los básicos de IaaS a “patrones que deberías usar hoy”

Amazon Elastic Compute Cloud (EC2) proporciona servidores virtuales (IaaS) bajo demanda. Lanzas instancias desde AMIs (imágenes de máquina) y defines límites de red con VPC/subredes/grupos de seguridad.
El EC2 moderno usa comúnmente virtualización basada en Nitro, lo que permite diseñar para rendimiento estable, aislamiento seguro y ENA flexible (red de alta velocidad). Para disponibilidad, la distribución multi-AZ es la base; combinar Auto Scaling Groups (ASG) con Elastic Load Balancing (ELB) facilita auto-recuperación ante fallos y seguimiento de fluctuaciones de demanda.

En la práctica, estandarizas parámetros de lanzamiento (AMI/tipo/disk/user data/rol) con Launch Templates, gestionas capacidad min/desired/max vía ASG, y usas escalado por seguimiento de objetivo para autoajustar a metas como CPU o latencia de solicitud—este es el patrón “por defecto”.


2. Casos de uso representativos (patrones de diseño y puntos de comparación)

  1. Clústeres Web/API que priorizan disponibilidad
    • Escala con ASG + ALB (HTTP/HTTPS) y distribuye entre múltiples AZs. Usa EBS para el root y mantén estado externo en RDS/ElastiCache/EFS.
    • En GCE, usa Managed Instance Group (MIG) + HTTP(S) Load Balancing; en Azure, Virtual Machine Scale Sets (VMSS) + Application Gateway/Front Door como patrones equivalentes.
  2. Procesamiento batch / ejecución de jobs
    • Reduce costos con Spot Instances. Ideal para cargas tolerantes a interrupciones (MapReduce, transcodificación de video).
    • GCE Spot VMs y Azure Spot VMs siguen la misma idea. El rediseño para re-ejecución y checkpoints es clave.
  3. HPC / Machine Learning
    • Requiere red de gran ancho de banda, GPUs/almacenamiento de alta velocidad. Usa Placement Groups o Dedicated Hosts para aislar ruido.
    • Equivalentes aproximados: familias A2/A3 de GCP y HB/HC/ND/NC de Azure. Prioriza ancho de banda de red, generación de GPU y rendimiento de almacenamiento.
  4. Lift & Shift de servidores empresariales
    • Empieza con una AZ × ASG (min 1 / max 1) para asegurar auto-curación. Usa Systems Manager (SSM) para SO/parches y simplificar operaciones.
    • GCE ofrece OS Config; Azure proporciona Update Management/Automation para funciones similares.

3. Selección de instancias: 5 pasos para evitar la confusión

Elige la familia adecuada y el tamaño correcto para equilibrar rendimiento y costo.

  1. Selecciona una familia
    • Propósito general: Equilibrada; adecuada para la mayoría de cargas web/API.
    • Optimizada para cómputo: Procesamiento CPU-bound; servidores de apps/juegos, etc.
    • Optimizada para memoria: BDs en memoria/cachés/analítica a gran escala.
    • Optimizada para almacenamiento: Para OLAP/procesamiento de logs con NVMe local.
    • Aceleradas (GPU/FPGA, etc.): Entrenamiento/inferencia de IA, render GPU.
  2. Modalidad de almacenamiento
    • Elige EBS (bloque persistente) o instance store (rápido, no persistente).
    • Usa EBS por defecto para el disco root. Considera instance store solo para temporales/cachés.
  3. Rendimiento de red
    • Selecciona tamaños con ENA y enhanced networking según ancho de banda/pps requeridos.
  4. Requisitos de disponibilidad
    • Decide entre ASG multi-AZ o Dedicated Hosts/Dedicated Instances para mayor aislamiento de ruido.
  5. Modelo de precios
    • Valida en On-Demand → optimiza estado estable con Savings Plans/RI → absorbe picos/batch con Spot.

Comparativa con GCE: Los tipos de máquina personalizados permiten especificar vCPU/memoria (GB) de forma fina. Comparativa con Azure: Gran variedad de SKUs (tamaños) y funciones como Proximity Placement Groups para optimizar latencia.


4. Diseño de almacenamiento: elegir entre EBS / Instance Store / EFS / FSx

  • EBS (Elastic Block Store)
    • Tipos: SSD de propósito general (gp*), Provisioned IOPS (io*), Throughput Optimized (st), Cold HDD (sc), etc.
    • Ideal para discos root/datos. Gestiona generaciones con snapshots. Habilita cifrado por defecto.
  • Instance Store
    • NVMe de alta velocidad físicamente adjunto. No persistente—se pierde al parar/reiniciar.
    • Restringe a temporales/shuffle/cache.
  • EFS (NFS compartido) / FSx (Windows/Lustre/ONTAP, etc.)
    • Usa EFS/FSx cuando se necesita acceso compartido entre apps. Elige según rendimiento/latencia.

GCE: Persistent Disk (PD) con opciones Standard/SSD/Extreme; Local SSD es de ultra-baja latencia pero no persistente.
Azure: Managed Disks (Standard HDD/SSD, Premium/Ultra). Azure Files ofrece almacenamiento compartido.


5. Red y seguridad: el “pack de cuatro” inicial para cerrar primero

  1. VPC/Subredes
    • Usa subredes privadas + NAT/proxy para salida. Mantén subredes públicas al mínimo.
  2. Security Groups (SG)
    • Firewalls virtuales stateful. Aplica mínimo privilegio. NACLs son controles complementarios a nivel CIDR.
  3. Identidad
    • Usa roles IAM (instance profiles) para evitar credenciales embebidas. Obliga IMDSv2.
  4. Acceso operativo
    • Usa SSM Session Manager para shell/túneles sin bastión. Retira distribución de claves y gestión de bastiones.

GCE: VPC/Firewall, adjunta service accounts a instancias. OS Login simplifica la integración IAM.
Azure: VNet/NSG/ASG, elimina credenciales con Managed Identity. Bastion/Just-In-Time para acceso seguro.


6. Disponibilidad y escalado: haz de ASG + ELB tu “equipo estándar”

  • Auto Scaling Group (ASG)
    • Health checks reemplazan instancias fallidas. Políticas: programadas/seguimiento de objetivo/por pasos.
  • Elastic Load Balancing (ALB/NLB/GWLB)
    • ALB: L7—HTTP/HTTPS con enrutado por path/host.
    • NLB: L4—ultra-baja latencia, IPs estáticas; fuerte para gRPC/alto throughput.
  • Multi-AZ / Multi-Región
    • La distribución por AZ es obligatoria. Para multi-región, diseña Route 53/health checks y replicación de datos.

GCE: Managed Instance Group + Cloud Load Balancing (HTTP(S) global).
Azure: VMSS + Application Gateway/Load Balancer/Front Door.


7. Automatización y bootstrap: un “ritual de lanzamiento” repetible

  • Usa Launch Templates + user data (cloud-init) para inicialización declarativa.
  • Hornea AMIs (p. ej., con Packer) para pre-incluir configuraciones costosas, reduciendo tiempo de arranque.
  • Estandariza configuración y parcheo con Systems Manager (State Manager/Run Command/Patch Manager).

GCE: Startup Script/Metadata, Instance Templates.
Azure: VM Extensions (Custom Script), Shared Image Gallery.


8. Monitorización, operaciones y trazabilidad

  • CloudWatch: Métricas (CPU/red/disk) y Agent para métricas del SO/recogida de logs.
  • CloudTrail: Rastro de actividad API—sigue operaciones de instancia/red/clave.
  • SSM: Visibilidad de inventario/vulnerabilidades/parcheo.
  • Alertas: Define primero SLO/SLI, y prioriza indicadores ligados a la experiencia (p95 de latencia) sobre umbrales crudos.

GCE: Cloud Monitoring/Logging, Ops Agent.
Azure: Azure Monitor/Log Analytics, Diagnostic Settings.


9. Optimización de costos: movimientos firmes y sin drama

  • Rightsizing: Mide CPU/memoria/disco/red y reduce un nivel cuando aplique.
  • Combina modelos de precio:
    • On-Demand…para dev/experimentación.
    • Savings Plans/Reserved Instances…para cargas estables.
    • Spot…para picos/batch.
  • Paradas programadas: Auto-stop noches/fines de semana.
  • Externaliza el estado: Haz las instancias stateless para facilitar scale-down y reemplazo.
  • Optimiza almacenamiento: Revisa tipos EBS, ajusta IOPS en SSD de propósito general, poda snapshots sin uso.

GCE: Committed Use Discounts + Spot, Sustained Use Discounts (automáticos).
Azure: Reserved VM Instances + Spot, con auto-stop/horarios similares.


10. “Glosario multi-nube” para conversaciones operativas más fluidas

  • Definición de lanzamiento: Launch Template (EC2) / Instance Template (GCE) / Modelo de VMSS + Imagen (Azure)
  • Autoescalado: ASG (EC2) / MIG (GCE) / VMSS (Azure)
  • Balanceador L7: ALB (EC2) / HTTP(S) LB (GCE) / Application Gateway (Azure)
  • Entrega de credenciales: IAM Role (EC2) / Service Account (GCE) / Managed Identity (Azure)
  • Acceso sin bastión: SSM Session Manager (EC2) / IAP + OS Login (GCE) / Bastion/Just-in-Time (Azure)

11. Ejemplos prácticos (hands-on en 3 nubes)

11.1 Lanzamiento EC2 (mínimo, con User Data)

# 1) Security Group (ejemplo abre 80/22; omite 22 si operas vía SSM)
aws ec2 create-security-group \
  --group-name web-sg --description "web sg" --vpc-id vpc-xxxxxxxx

aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxx --protocol tcp --port 80 --cidr 0.0.0.0/0

# 2) Par de claves (no necesario si operas vía SSM)
aws ec2 create-key-pair --key-name web-key > web-key.pem && chmod 400 web-key.pem

# 3) Lanzamiento (ejemplo más corto sin Launch Template)
cat > user-data.sh <<'EOF'
#cloud-config
packages:
  - nginx
runcmd:
  - systemctl enable nginx
  - systemctl start nginx
EOF

aws ec2 run-instances \
  --image-id ami-xxxxxxxxxxxxxxxxx \
  --instance-type t3.small \
  --subnet-id subnet-xxxxxxxx \
  --security-group-ids sg-xxxxxxxx \
  --iam-instance-profile Name=ec2-app-role \
  --user-data file://user-data.sh \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=web-1}]'

11.2 GCE (Despliegue “más corto” equivalente)

gcloud compute instances create web-1 \
  --zone=asia-northeast1-b \
  --machine-type=e2-small \
  --metadata=startup-script='#!/bin/bash
sudo apt -y update && sudo apt -y install nginx
sudo systemctl enable nginx && sudo systemctl start nginx' \
  --tags=http-server

11.3 Azure VM (Despliegue “más corto” equivalente)

az group create -n rg-web -l japaneast
az vm create -g rg-web -n web-1 \
  --image UbuntuLTS --size Standard_B1ms \
  --custom-data cloudinit.yaml \
  --admin-username azureuser --generate-ssh-keys
az vm open-port -g rg-web -n web-1 --port 80
# cloudinit.yaml es casi equivalente al cloud-config de EC2

11.4 Auto Scaling (EC2: puntos clave para Launch Template + ASG + ALB)

# Launch Template
aws ec2 create-launch-template \
  --launch-template-name web-lt \
  --launch-template-data '{
    "ImageId":"ami-xxxxxxxxxxxxxxxxx",
    "InstanceType":"t3.small",
    "IamInstanceProfile":{"Name":"ec2-app-role"},
    "SecurityGroupIds":["sg-xxxxxxxx"],
    "UserData":"'"$(base64 -w0 user-data.sh)"'"
  }'

# Auto Scaling Group (2 AZs, seguimiento de objetivo CPU 50%)
aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name web-asg \
  --launch-template LaunchTemplateName=web-lt \
  --min-size 2 --max-size 6 --desired-capacity 2 \
  --vpc-zone-identifier "subnet-a,subnet-b"

aws autoscaling put-scaling-policy \
  --auto-scaling-group-name web-asg \
  --policy-name cpu50 \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{"PredefinedMetricSpecification":{"PredefinedMetricType":"ASGAverageCPUUtilization"},"TargetValue":50.0}'

12. Seguridad y gobernanza operativa: “reglas estándar” prácticas

  • Frontera pública clara: Haz público el ALB; mantén instancias EC2 privadas. Evita exponerlas directamente a Internet.
  • Cero credenciales embebidas: Usa siempre IAM Roles/Managed Identity/Service Accounts; nunca guardes claves en variables/archivos.
  • IMDSv2/protección de metadata: Obligatorio contra SSRF. Controla acceso a metadata también en GCE/Azure.
  • Parcheo: Usa SSM Patch Manager, etc., con calendarios regulares. En emergencias, aplica blue/green por etapas.
  • Centraliza logs: Envía logs de app a CloudWatch Logs (o equivalentes en GCE/Azure). Supón logs estructurados para mejorar observabilidad.

13. Diseño de disponibilidad en la práctica: 3 patrones

  1. Web de tres capas estándar
    • ALB → ASG (app) → RDS/EFS/ElastiCache. Favorece scale-out.
  2. API sin estado + autenticación externa
    • ALB + Cognito/IdP para auth; usa despliegues inmutables en el ASG para evitar drift.
  3. HPC/Baja latencia
    • Elige el Placement Group adecuado (Cluster/Spread/Partition). Para almacenamiento, instance store + FS paralelo.

En GCE/Azure, los fundamentos se mantienen: LB + grupo de escalado + estado externalizado (BD/Cache).


14. Errores comunes y cómo evitarlos

  • Ir a producción en una sola AZ: Caída total ante fallo. Trata ASG + multi-AZ como “línea mínima”.
  • Bastiones de larga vida: Caldo de cultivo de riesgo. Muévete a SSM Session Manager/IAP/Bastion JIT.
  • Secretos en instancias: Claves en env/archivos. Migra a Parameter Store/Secrets Manager/Key Vault/Secret Manager.
  • Mantener estado local: Bloquea el escalado. Lleva a EBS/EFS/objeto/BD externa.
  • Proliferación de snapshots: Define generaciones/retención/etiquetas y poda regularmente.
  • Monitorización reactiva: Define SLO/SLI/alertas antes del lanzamiento.

15. Lista de verificación de diseño (asegura en la primera semana)

  • Objetivos: Define con números distribución AZ / rendimiento (p95) / tiempo de recuperación / límites operativos.
  • Instancias: Familia/tamaño/modelo de precio, gestión de AMI, user data.
  • Almacenamiento: Tipo EBS/IOPS/snapshots/cifrado, necesidad de FS compartido.
  • Red: VPC/CIDR/subredes, SG/NACL/rutas, DNS/resolución de nombres.
  • Seguridad: Roles IAM/IMDSv2/gestión de claves, SSM para operar sin bastión.
  • Escalado: Capacidad/políticas del ASG, health checks, método de despliegue (Rolling/Blue-Green/Canary).
  • Monitorización: Métricas/recogida de logs/tableros/alertas, necesidad de tracing.
  • Coste: Rightsizing/horarios de parada/cobertura Spot, política de Savings/RI.
  • Gestión de cambios: IaC (Terraform/CloudFormation/Bicep/DM) y pasos de revisión.
  • Plan de salida: AMI/snapshots/migración de datos, limpieza de DNS/certificados/monitorización.

16. Runbook operativo (patrón de primera respuesta a incidentes)

  1. Detección: Verifica rápido detalles de alerta y alcance de impacto (AZ/ASG/targets).
  2. Auto-recuperación: Confirma reemplazo en curso del ASG y recuento sano de targets en el LB.
  3. Mitigación temporal: Baja umbrales de scale-out y añade capacidad extra.
  4. Aislar causa raíz: Compara deploy/AMI/user data/dependencias externas (BD/Cache) recientes.
  5. Arreglo permanente: Mejora health checks, límites de recursos (ulimit) y añade puntos de observabilidad.
  6. Postmortem: Registra aprendizajes en dashboards/runbooks y actualiza etiquetas/nombres/políticas.

17. Casos de estudio (3 ejemplos)

17.1 Plataforma de API de startup (plazo ajustado)

  • Arquitectura: ALB → ASG (familia de propósito general) → RDS (gestionado) → CloudWatch.
  • Claves: Horneado de AMI + user data para reproducibilidad; paradas nocturnas para costo.
  • Otras nubes: En GCE, MIG + HTTP(S) LB + Cloud SQL; en Azure, VMSS + AppGW + Azure Database.

17.2 Batch de procesamiento de imágenes (prioridad costo)

  • Arquitectura: SQS (cola) → flota de instancias Spot → resultados a S3.
  • Claves: Manejo de interrupciones y reintentos; guarda checkpoints en S3.
  • Otras nubes: Usa GCE/Azure Spot VMs + colas (Pub/Sub / Storage Queue) de forma similar.

17.3 Migración escalonada de sistemas internos core (seguridad primero)

  • Arquitectura: ASG (min 1 / max 1) para auto-curación → escalar a multi-AZ al crecer la carga.
  • Claves: Operación sin bastión con SSM, define fecha base de parches; guarda logs de auditoría en otra cuenta.
  • Otras nubes: GCE OS Config/Shielded VM, Azure Update Management/Defender for Cloud para postura comparable.

18. Resumen comparativo de tres nubes (visión del practicante)

  • Claridad en opciones de diseño: GCE (custom types sencillos) ≧ EC2 (patrones ricos) ≧ Azure (opciones amplias; depende del diseño)
  • Gobernanza empresarial/afinidad de red: Azure > EC2 ≧ GCE
  • Madurez del autoescalado: EC2 (ASG maduro + muchos ejemplos) ≧ GCE (MIG simple) ≧ Azure (VMSS con muchas funciones)
  • Consistencia operativa (sin bastión/trazabilidad): EC2 (SSM/CloudTrail) ≧ Azure (JIT/Bastion/Activity) ≧ GCE (OS Login/IAP/Audit Logs)
  • Flexibilidad en optimización de costos: EC2 (combinaciones Savings/Spot) ≧ GCE (Committed/Sustained/Spot) ≧ Azure (Reserved/Spot)

19. Lectores previstos y resultados concretos

  • Departamentos de TI (migración de VMs on-prem): Establece migración equivalente → auto-curación → monitorización/parcheo/auditoría estandarizados en EC2 usando el patrón ASG + SSM.
  • Desarrolladores web/negocio: Aprende API sin estado + estado externalizado, y entrega seguro con rolling/canary.
  • Ingenieros SRE/infraestructura: Con VPC/SG/IMDSv2/agregación de logs como base, construye alertado basado en SLO.
  • Responsables de seguridad/gobernanza: Define barandillas globales para sin secretos en hosts, acceso sin bastión y retención de auditoría.
  • Líderes técnicos de startups: Setup mínimo viable → “patronización” → IaC, para construir una plataforma pequeña al inicio, amplia al escalar rápidamente.

20. Resumen: EC2 se mantiene firme cuando lo ejecutas como “patrón”

Al operar Amazon EC2 con el patrón repetible ASG + ELB + Launch Template, podrás equilibrar mejor disponibilidad, rendimiento y costo. Centra el almacenamiento en EBS, externaliza el estado y usa SSM para acceso sin bastión. Cuanto más sigas estos principios, con más confianza podrás reemplazar para recuperar durante incidentes y manejar despliegues y escalado sin miedo.
La misma mentalidad de diseño aplica entre nubes mapeando a MIG/VMSS. Empieza llevando a IaC el setup mínimo, luego optimiza costos en el orden medir → rightsizing → aplicar descuentos.


Apéndice A: cloud-init (servidor web mínimo)

#cloud-config
package_update: true
packages:
  - nginx
write_files:
  - path: /var/www/html/healthz.html
    content: "ok"
runcmd:
  - systemctl enable nginx
  - systemctl start nginx
  - printf "location /healthz { return 200 'ok'; add_header Content-Type text/plain; }" \
      > /etc/nginx/snippets/healthz.conf
  - 'sed -i "/server_name _;/a include snippets/healthz.conf;" /etc/nginx/sites-available/default'
  - systemctl reload nginx

Apéndice B: Grupos de seguridad (mínimo, acceso solo desde ALB)

# SG de app: permite 80/TCP solo desde el SG del ALB
APP_SG=$(aws ec2 create-security-group --group-name app-sg --description "app" --vpc-id vpc-xxx --query GroupId --output text)
ALB_SG=$(aws ec2 create-security-group --group-name alb-sg --description "alb" --vpc-id vpc-xxx --query GroupId --output text)
aws ec2 authorize-security-group-ingress --group-id $APP_SG --protocol tcp --port 80 --source-group $ALB_SG
aws ec2 authorize-security-group-ingress --group-id $ALB_SG --protocol tcp --port 80 --cidr 0.0.0.0/0

Apéndice C: Procedimiento simple semanal de rightsizing

  1. Usa CloudWatch/Monitoring y el Agent para visualizar CPU/memoria/disco/red.
  2. Si durante dos semanas consecutivas ves CPU p95 < 40% y memoria p95 < 60%, considera bajar un nivel.
  3. Confirma holgura con una prueba de carga, luego reduce tamaño. Aplica rolling updates en el ASG para cero downtime.
  4. Cada tres meses, revisa la cobertura de modelos de descuento (Savings/RI/Committed/Reserved).

Apéndice D: Plantillas de estrategia de despliegue (Rolling/Blue-Green/Canary)

  • Rolling: Aumenta el equivalente a MaxSurge en el ASG y reemplaza en secuencia. Riesgo bajo.
  • Blue-Green: Prepara un ASG nuevo por separado → cambia target groups. Rollback simple.
  • Canary: 1 instancia → subconjunto pequeño → todas. Decide por etapas usando métricas/logs/trazas.
  • Común: Documenta claramente URLs de health check/orden de migración de BD/feature flags en el runbook.

Apéndice E: Tres cosas que puedes hacer hoy

  1. Crea un Launch Template, pon cloud-init en user data y haz lanzamientos reproducibles.
  2. Asegura auto-curación primero con un ASG (min 1 / max 1). Añade ALB en el siguiente paso.
  3. Habilita SSM Agent + Session Manager, retira bastiones y distribución de claves, y configura la recogida de logs al mismo tiempo.

—Con esto, tu segundo paso con EC2 queda muy sólido. La próxima vez cubriremos AWS Lambda, comparándolo con Cloud Functions/Azure Functions también. ¡Atento!

por greeden

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)