Entrada

AWS desde cero: qué son EC2, S3, RDS, EBS y cómo elegir el servicio adecuado

Llevo un tiempo intentando entrar en materia con Amazon Web Services (AWS) y hay algo que me estaba resultando especialmente confuso: no es que no entienda qué es un servidor, una base de datos o almacenamiento. El problema es que AWS tiene tantos servicios diferentes que cuesta entender qué papel juega cada uno.

Veo EC2, S3, RDS, EBS, CloudFront, Lambda… y todos parecen estar relacionados de alguna manera.

Y entonces aparece la pregunta que realmente importa:

🤔 Si quiero alojar una web, ¿qué servicio necesito?

Porque decir «usa AWS» no responde absolutamente nada.

AWS se entiende mucho mejor cuando dejamos de pensar en él como un producto y empezamos a verlo como un conjunto de piezas que podemos combinar.

En este post voy a intentar ordenar esas piezas desde el punto de vista más práctico posible: qué quiero hacer → qué necesito → qué servicio de AWS encaja.


☁️ Antes de empezar: ¿qué es realmente AWS?

Amazon Web Services es la plataforma de servicios cloud de Amazon.

En lugar de comprar un servidor físico, instalarlo en casa o contratar una máquina dedicada, AWS permite utilizar recursos informáticos bajo demanda.

Por ejemplo:

  • Necesito una máquina Linux → EC2
  • Necesito guardar archivos → S3
  • Necesito una base de datos MySQL → RDS
  • Necesito un disco para mi servidor → EBS
  • Necesito distribuir una web rápidamente → CloudFront
  • Necesito ejecutar una función sin mantener un servidor → Lambda

Y aquí empieza a tener sentido.

AWS no es simplemente «un hosting».

Es más parecido a una enorme caja de piezas de infraestructura.

Centro de datos y computación en la nube

La ventaja es que puedo elegir exactamente qué piezas necesito.

La desventaja es bastante evidente:

hay muchísimas piezas. 😅


🖥️ EC2: necesito una máquina

Si hay un servicio de AWS que conviene entender primero, probablemente sea Amazon EC2.

EC2 significa Elastic Compute Cloud.

Dicho de forma sencilla:

EC2 te proporciona una máquina virtual en la nube.

Puedes imaginar que AWS te entrega un ordenador conectado a Internet.

En esa máquina puedes instalar:

  • Linux
  • Windows
  • Nginx
  • Apache
  • Node.js
  • PHP
  • Python
  • Docker
  • WordPress
  • una API
  • una aplicación web
  • etc.

Por ejemplo, puedo crear una instancia EC2 con Ubuntu y conectarme mediante SSH:

1
ssh ubuntu@mi-servidor

A partir de ahí, la experiencia se parece bastante a administrar un servidor Linux convencional.

¿Qué estoy pagando realmente con EC2?

Principalmente capacidad de cómputo.

Una instancia tiene recursos como:

  • CPU
  • memoria RAM
  • red
  • almacenamiento asociado

Por ejemplo, conceptualmente:

1
2
3
4
5
6
7
EC2
│
├── CPU
├── RAM
├── Red
└── EBS
     └── Disco

Y esto nos lleva al siguiente servicio.


💾 EBS: el disco de mi servidor

Amazon EBS (Elastic Block Store) es almacenamiento de bloques.

La forma más sencilla de entenderlo es:

EBS es el disco que conecto a mi máquina EC2.

Si EC2 es el ordenador, EBS sería su SSD.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
        EC2
   ┌─────────────┐
   │ Ubuntu      │
   │ Nginx       │
   │ Node.js     │
   │ Aplicación  │
   └──────┬──────┘
          │
          ▼
      ┌───────┐
      │  EBS  │
      │  SSD  │
      └───────┘

Aquí hay una distinción importante.

EC2 no es lo mismo que EBS.

EC2 proporciona la capacidad de ejecutar cosas.

EBS proporciona almacenamiento de bloques para esa infraestructura.

Si tengo una máquina Linux con:

1
2
3
4
/var/www
/etc
/home
/usr

es muy habitual que ese sistema esté almacenado en un volumen EBS.


🗄️ S3: guardar archivos no es lo mismo que tener un disco

Aquí es donde personalmente creo que AWS empieza a resultar un poco menos intuitivo.

Amazon S3 (Simple Storage Service) también almacena cosas.

Entonces…

¿No es lo mismo que EBS?

No.

S3 utiliza almacenamiento de objetos, mientras que EBS proporciona almacenamiento de bloques.

Una manera sencilla de visualizarlo es esta:

EBS

Es como un disco conectado a un ordenador.

1
2
3
4
5
6
7
EC2
 │
 └── EBS
      ├── archivo.txt
      ├── imagen.jpg
      ├── aplicación
      └── sistema operativo

S3

Es como un gigantesco almacén de objetos accesible mediante servicios web.

1
2
3
4
5
6
7
S3
│
├── imagen.jpg
├── video.mp4
├── backup.zip
├── documento.pdf
└── datos.json

No necesito crear una máquina virtual para utilizar S3.

Puedo simplemente crear un bucket y almacenar objetos dentro.


🌐 ¿Y para qué puedo utilizar S3?

Aquí empieza a ser realmente interesante.

Una de las posibilidades es alojar una web estática.

Imaginemos que tengo:

1
2
3
4
index.html
style.css
script.js
logo.png

No necesito PHP.

No necesito Node.js.

No necesito Python.

No necesito una base de datos.

Por tanto, ¿para qué quiero una máquina EC2 funcionando 24/7?

No la necesito.

Puedo almacenar los archivos en S3.

1
2
3
4
5
6
7
8
9
10
11
                 INTERNET
                     │
                     ▼
              ┌─────────────┐
              │     S3      │
              │             │
              │ index.html  │
              │ style.css   │
              │ script.js   │
              │ logo.png    │
              └─────────────┘

Esto es especialmente interesante para páginas como:

  • portfolios
  • documentación
  • landing pages
  • blogs estáticos
  • webs corporativas sencillas
  • aplicaciones frontend estáticas

Por ejemplo, una aplicación creada con Vite que después de hacer:

1
npm run build

genera:

1
2
3
4
5
6
dist/
├── index.html
├── assets/
│   ├── index.css
│   └── index.js
└── logo.svg

es un candidato perfecto para un hosting de archivos estáticos.


🚀 S3 + CloudFront: una combinación muy interesante

Aquí aparece una de las ideas más importantes de AWS:

No tienes por qué utilizar un único servicio.

Puedes combinar servicios.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
                    INTERNET
                       │
                       ▼
                ┌────────────┐
                │ CloudFront │
                │    CDN     │
                └─────┬──────┘
                      │
                      ▼
                 ┌─────────┐
                 │   S3    │
                 │ Website │
                 └─────────┘

S3 almacena los archivos.

CloudFront los distribuye mediante una CDN.

La CDN permite que el contenido se entregue desde ubicaciones cercanas a los usuarios.

Por tanto, si mi objetivo es:

«Quiero alojar una web sencilla hecha con HTML, CSS y JavaScript».

Una arquitectura razonable podría ser:

S3 + CloudFront

y no:

EC2 + EBS + Apache + Linux + mantenimiento del servidor.

No tiene demasiado sentido montar una máquina virtual completa simplemente para servir un index.html.


🗃️ RDS: necesito una base de datos

Ahora imaginemos algo diferente.

Tengo una aplicación que necesita:

1
2
3
4
5
6
usuarios
productos
pedidos
facturas
sesiones
etc.

Aquí aparece Amazon RDS (Relational Database Service).

RDS está pensado para bases de datos relacionales administradas.

Por ejemplo:

  • MySQL
  • PostgreSQL
  • MariaDB
  • Oracle
  • SQL Server

La idea importante es que no necesito administrar yo mismo todo el servidor de base de datos.

Por ejemplo, podría tener:

1
2
3
4
5
6
7
8
9
10
11
12
        Aplicación
             │
             ▼
           EC2
             │
             │ SQL
             ▼
           RDS
             │
        ┌────┴────┐
        │ MySQL   │
        └─────────┘

Mi aplicación se conecta a RDS y trabaja con la base de datos.

AWS se ocupa de buena parte de la infraestructura que hay detrás del servicio administrado.


🧩 Entonces… ¿qué pasa con WordPress?

Aquí ya podemos juntar varias piezas.

Supongamos que quiero montar:

WordPress en AWS con su propia base de datos.

WordPress necesita principalmente:

  1. Un servidor donde ejecutar PHP y WordPress.
  2. Una base de datos.
  3. Almacenamiento para sus archivos.

Una arquitectura posible sería:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                    INTERNET
                       │
                       ▼
                    EC2
              ┌────────────────┐
              │ Linux          │
              │ Nginx/Apache   │
              │ PHP            │
              │ WordPress      │
              └───────┬────────┘
                      │
                      ▼
                     RDS
                 ┌──────────┐
                 │ MySQL    │
                 │ WordPress│
                 │ Database │
                 └──────────┘

Y podríamos añadir S3 y CloudFront dependiendo de cómo queramos gestionar determinados archivos y contenidos.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
                   INTERNET
                       │
                       ▼
                 CloudFront
                       │
                       ▼
                     EC2
                 WordPress
                       │
             ┌─────────┴─────────┐
             ▼                   ▼
            RDS                  S3
          MySQL              Archivos

Aquí ya se empieza a entender por qué AWS tiene tantos servicios.

No compiten necesariamente entre ellos.

Cada uno resuelve una parte diferente del problema.


🐧 ¿Y si simplemente quiero una máquina Linux?

Entonces la respuesta es bastante más sencilla:

EC2

Si quiero algo parecido a:

«Dame un servidor Ubuntu con una IP y acceso SSH».

EC2 es probablemente el servicio que estoy buscando.

Puedo tener:

1
2
3
4
5
6
7
8
EC2
│
├── Ubuntu
├── Docker
├── Nginx
├── Node.js
├── Python
└── Mi aplicación

Y puedo administrarlo prácticamente como cualquier otro servidor Linux.

Por ejemplo:

1
2
sudo apt update
sudo apt install nginx

Y posteriormente:

1
sudo systemctl status nginx

No necesito aprender veinte servicios de AWS para crear una máquina Linux.

EC2 es suficiente para empezar.


🧠 EC2, EBS, S3 y RDS en una misma imagen mental

Esta es la asociación que me está resultando más útil para no perderme:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
EC2
│
└── "Necesito una máquina que ejecute cosas"

EBS
│
└── "Necesito un disco para esa máquina"

S3
│
└── "Necesito guardar archivos/objetos"

RDS
│
└── "Necesito una base de datos relacional"

Y a partir de ahí puedo añadir más servicios según las necesidades.


🚦 ¿Cómo elegir servicio según lo que quiero hacer?

Esta es probablemente la tabla que más me habría gustado encontrar cuando empecé a mirar AWS.

Necesito… Servicio que miraría primero
Una máquina Linux EC2
Una máquina Windows EC2
Un disco para EC2 EBS
Guardar archivos S3
Una base de datos MySQL RDS
Una base de datos PostgreSQL RDS
Servir una web estática S3
CDN para contenido web CloudFront
Ejecutar código sin administrar un servidor Lambda
DNS Route 53
Gestionar usuarios y permisos IAM
Contenedores ECS / EKS

Esto no significa que cada problema tenga una única solución.

AWS suele permitir varias arquitecturas.

Lo importante es entender qué problema resuelve cada servicio.


🔥 Lambda: ¿y si no quiero tener un servidor encendido?

Otro concepto que aparece mucho en AWS es Lambda.

Aquí cambia el planteamiento.

Con EC2:

1
2
3
4
5
Servidor
   │
   ├── está funcionando
   ├── ejecuta mi aplicación
   └── espera peticiones

Con Lambda puedo ejecutar una función cuando ocurre un evento.

Por ejemplo:

1
2
3
4
5
6
export const handler = async (event) => {
    return {
        statusCode: 200,
        body: "Hola AWS"
    };
};

No estoy pensando tanto en:

«Tengo un servidor».

Estoy pensando en:

«Tengo una función que se ejecuta cuando la necesito».

Esto puede ser útil para APIs, automatizaciones, procesamiento de archivos, tareas desencadenadas por eventos y muchos otros casos.


🌍 CloudFront: no es almacenamiento ni servidor

CloudFront puede resultar confuso al principio porque también aparece mucho cuando hablamos de webs.

Pero su función es diferente.

CloudFront es una CDN.

Su objetivo principal es distribuir contenido a los usuarios desde una red de ubicaciones distribuidas.

Podemos tener:

1
2
3
4
5
6
7
                 Usuario 🇪🇸
                     │
                     ▼
                CloudFront
                     │
                     ▼
                    S3

O:

1
2
3
4
5
6
7
                 Usuario
                     │
                     ▼
                CloudFront
                     │
                     ▼
                    EC2

Es decir, CloudFront puede trabajar delante de otros servicios.

No sustituye a S3 ni a EC2.


🌐 Route 53: ¿y el dominio?

Supongamos que tengo:

1
www.jorgerosa.dev

y quiero que ese dominio apunte a mi infraestructura de AWS.

Aquí aparece Amazon Route 53, el servicio de DNS de AWS.

Podemos pensar:

1
2
3
4
5
6
7
jorgerosa.dev
      │
      ▼
 Route 53
      │
      ▼
CloudFront / EC2 / otros recursos

DNS no es hosting.

Route 53 no es una máquina.

Simplemente ayuda a resolver nombres de dominio y proporciona otras funciones relacionadas con DNS.


🔐 IAM: ¿quién puede hacer qué?

Otro servicio fundamental es IAM (Identity and Access Management).

Si AWS es una enorme infraestructura, necesitamos controlar:

«¿Quién puede acceder a qué?»

IAM permite gestionar identidades y permisos.

Por ejemplo:

1
2
3
4
5
6
7
8
9
Usuario A
   │
   ├── Puede leer S3
   └── No puede borrar EC2

Usuario B
   │
   ├── Puede administrar EC2
   └── Puede acceder a RDS

Esto puede parecer algo secundario cuando estamos empezando, pero en AWS los permisos son una parte fundamental.


🧱 Entonces, ¿cómo quedaría una web sencilla?

Si mi web solamente contiene:

1
2
3
4
HTML
CSS
JavaScript
Imágenes

no necesito necesariamente una máquina.

Una arquitectura sencilla sería:

1
2
3
4
5
6
7
8
9
10
11
              Internet
                  │
                  ▼
             CloudFront
                  │
                  ▼
                 S3
                  │
        ┌─────────┼─────────┐
        │         │         │
       HTML      CSS       JS

¿Necesito EC2?

❌ No necesariamente.

¿Necesito RDS?

❌ No.

¿Necesito EBS?

❌ No.

¿Necesito S3?

✅ Sí, si quiero utilizarlo como almacenamiento/hosting de los archivos.

¿CloudFront?

✅ Recomendable si quiero una CDN y una distribución más completa.


📝 ¿Y un blog estático?

Este caso es todavía más interesante.

Si genero el blog con Jekyll, el resultado final son archivos estáticos:

1
2
3
4
5
6
7
8
9
10
11
_site/
├── index.html
├── about/
│   └── index.html
├── posts/
│   └── mi-post/
│       └── index.html
├── assets/
│   ├── css/
│   └── js/
└── images/

Jekyll necesita Ruby para generar esos archivos.

Pero una vez generados, el navegador solamente necesita recibir:

1
2
3
4
HTML
CSS
JavaScript
imágenes

Por tanto, no necesito tener Ruby ejecutándose permanentemente para servir el blog.

Esto es precisamente una de las ventajas de los sitios estáticos.


🏗️ ¿Y una aplicación web dinámica?

Aquí la arquitectura empieza a crecer.

Supongamos que tengo:

1
2
3
4
5
6
7
Frontend
    │
    ▼
Backend
    │
    ▼
Database

En AWS podría terminar con algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
                 Internet
                     │
                     ▼
                CloudFront
                     │
             ┌───────┴───────┐
             ▼               ▼
            S3              EC2
         Frontend          Backend
                              │
                              ▼
                             RDS
                           Database

Y si además necesito guardar imágenes:

1
2
3
4
5
6
7
8
                             ┌─── S3
                             │
                             │ imágenes
                             │
Internet → CloudFront → EC2 ─┤
                              │
                              └─── RDS
                                  Base de datos

Ya no estamos hablando de «un hosting».

Estamos construyendo una arquitectura.


🧩 La clave: los servicios de AWS se combinan

Esta era una de las dudas que tenía al principio:

¿Tiene sentido utilizar EC2 + EBS + RDS + S3 juntos?

Sí.

De hecho, es completamente normal combinar servicios.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
              ┌─────────────┐
              │ CloudFront  │
              └──────┬──────┘
                     │
             ┌───────┴───────┐
             ▼               ▼
            S3              EC2
        archivos          aplicación
                              │
                    ┌─────────┴─────────┐
                    ▼                   ▼
                   EBS                 RDS
                  disco              database

Cada servicio tiene una responsabilidad.

EC2

Ejecuta la aplicación.

EBS

Proporciona almacenamiento de bloques a EC2.

RDS

Gestiona la base de datos.

S3

Almacena objetos y archivos.

CloudFront

Distribuye contenido.

Y pueden trabajar juntos.


🤯 ¿Por qué AWS parece tan complicado entonces?

Porque AWS no intenta venderme «un servidor».

Me ofrece piezas independientes.

En un hosting tradicional podría contratar:

1
2
3
4
5
6
7
8
PLAN HOSTING
│
├── CPU
├── RAM
├── Disco
├── Base de datos
├── Email
└── Panel

En AWS puedo construirlo de otra manera:

1
2
3
4
5
6
7
8
EC2
EBS
RDS
S3
CloudFront
Route 53
IAM
...

Esto proporciona mucha más flexibilidad, pero también significa que tengo que entender qué estoy construyendo.

Y hay otra consecuencia importante:

puedo terminar pagando por recursos que realmente no necesito.

Por eso no tiene sentido utilizar EC2 para absolutamente todo.


💡 Tres ejemplos para quedarme con la idea

1. «Quiero una web HTML + CSS»

Pienso:

1
2
3
4
5
6
7
8
9
¿Necesito ejecutar código en servidor?
        │
        └── No
             │
             ▼
           S3
             │
             ▼
        CloudFront

S3 + CloudFront


2. «Quiero WordPress»

Pienso:

1
2
3
4
5
6
7
8
9
10
¿Necesito ejecutar PHP?
        │
        └── Sí
             │
             ▼
            EC2
             │
             ├── EBS
             │
             └── RDS

Una arquitectura posible:

EC2 + EBS + RDS

y dependiendo de las necesidades:

S3 + CloudFront


3. «Quiero una máquina Linux»

Pienso:

1
2
3
4
5
6
7
Necesito un servidor
        │
        ▼
       EC2
        │
        ▼
       EBS

EC2 + EBS

Y ya puedo instalar lo que necesite.

1
2
sudo apt update
sudo apt install nginx

🗺️ Mi mapa mental de AWS

Después de darle unas cuantas vueltas, creo que una buena manera de empezar a estudiar AWS es no intentar memorizar sus servicios.

Me quedaría inicialmente con este mapa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                         AWS
                          │
        ┌─────────────────┼─────────────────┐
        │                 │                 │
     CÓMPUTO          ALMACENAMIENTO      DATOS
        │                 │                 │
       EC2             S3 / EBS            RDS
        │
     Lambda
        │
      ECS/EKS

        ┌─────────────────┼─────────────────┐
        │                 │                 │
       RED               CDN            SEGURIDAD
        │                 │                 │
   Route 53          CloudFront            IAM

No necesito conocer todos los servicios para empezar.

De hecho, probablemente sea contraproducente intentarlo.

Primero quiero poder contestar estas preguntas:

¿Necesito una máquina? → EC2

¿Necesito un disco para esa máquina? → EBS

¿Necesito guardar archivos? → S3

¿Necesito una base de datos relacional? → RDS

¿Necesito distribuir contenido? → CloudFront

¿Necesito DNS? → Route 53

¿Necesito gestionar permisos? → IAM

¿Necesito ejecutar una función sin administrar un servidor? → Lambda

A partir de ahí, los demás servicios empiezan a encajar mucho mejor.


🧭 Una forma práctica de seguir aprendiendo AWS

En mi caso, creo que tiene más sentido aprender AWS por arquitecturas y problemas reales, no servicio por servicio.

Por ejemplo:

Nivel 1 — Web estática

1
2
3
S3
  +
CloudFront

Nivel 2 — Servidor Linux

1
2
3
EC2
  +
EBS

Nivel 3 — Aplicación web

1
2
3
4
5
EC2
  +
EBS
  +
RDS

Nivel 4 — Aplicación web más completa

1
2
3
4
5
6
7
8
9
Route 53
     │
CloudFront
     │
 ┌───┴────┐
 │        │
S3       EC2
          │
         RDS

Y a partir de aquí ya aparecen conceptos como VPC, subredes, security groups, load balancers, Auto Scaling, IAM, Docker, ECS, Lambda…

Pero ahora al menos cada pieza tiene un lugar donde encajar.

Eso es lo que me estaba faltando al mirar AWS: no necesitaba otra lista de servicios; necesitaba un mapa.


❓ FAQ

¿Qué servicio de AWS necesito para alojar una web HTML y CSS?

Para una web estática formada por HTML, CSS, JavaScript e imágenes puedes utilizar Amazon S3 para almacenar los archivos y Amazon CloudFront para distribuirlos mediante una CDN. No necesitas una máquina EC2 si la web no requiere ejecutar código en un servidor.

¿Qué servicio de AWS necesito para alojar WordPress?

Una arquitectura habitual consiste en Amazon EC2 para ejecutar WordPress, Amazon EBS para almacenar el sistema y los archivos de la instancia, y Amazon RDS para alojar la base de datos MySQL o MariaDB. También pueden añadirse servicios como S3 y CloudFront para determinados archivos y contenidos.

¿Qué servicio de AWS sirve para tener una máquina Linux?

Amazon EC2 permite crear una máquina virtual en AWS y elegir una imagen de Linux, como Amazon Linux, Ubuntu u otras distribuciones disponibles. Puedes conectarte a ella por SSH y administrarla como un servidor convencional.

¿Qué diferencia hay entre Amazon EC2 y Amazon EBS?

EC2 proporciona la capacidad de cómputo, es decir, la máquina virtual que ejecuta tu sistema y aplicaciones. EBS proporciona almacenamiento persistente para esa instancia, como si fuera el disco de un servidor.

¿Qué diferencia hay entre Amazon S3 y Amazon EBS?

S3 es almacenamiento de objetos pensado para guardar archivos y acceder a ellos mediante una API, mientras que EBS proporciona volúmenes de almacenamiento de bloques que normalmente se conectan a instancias EC2 y funcionan como discos.

¿Qué es Amazon RDS y para qué sirve?

Amazon RDS es un servicio administrado de bases de datos relacionales. AWS se encarga de buena parte de las tareas de infraestructura y administración, mientras tú trabajas con motores como MySQL, PostgreSQL, MariaDB, Oracle o SQL Server.

¿Se pueden combinar los servicios de AWS?

Sí. De hecho, AWS está diseñado para que sus servicios se combinen. Por ejemplo, una aplicación puede utilizar EC2 para ejecutar el backend, RDS para la base de datos, S3 para archivos y CloudFront para distribuir contenido.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.