Arquitectura
🏗️ Arquitectura General
Flujo completo
¿Como funciona el sitio?
Usuario escribe www.igazabon.com
↓
DNS (GoDaddy) resuelve a CloudFront
↓
CloudFront sirve con HTTPS desde edge location cercana
↓
Si no tiene cache, busca en S3 bucket (Ohio)
↓
Retorna el HTML al usuario
Diagrama de servicios:
[GoDaddy DNS] → [CloudFront CDN + SSL] → [S3 Bucket - Static Hosting]
[ACM Certificate] → provee HTTPS a CloudFront
Es como tener una bodega (S3) con tus documentos, un servicio de mensajeria express (CloudFront) que los distribuye por todo el mundo, un certificado de seguridad (ACM) que garantiza que nadie los altere en transito, y una direccion postal (DNS/dominio) para que la gente te encuentre.
☁️ Servicios AWS Utilizados
4 servicios
| Servicio | Funcion | Costo |
| Amazon S3 |
Almacena los archivos HTML y los sirve como sitio web estatico |
~$0.02/mes |
| Amazon CloudFront |
CDN que distribuye el contenido globalmente, habilita HTTPS y dominio custom |
Free tier / ~$0.50/mes |
| AWS Certificate Manager (ACM) |
Provee certificado SSL/TLS gratuito para HTTPS |
Gratis |
| AWS CloudShell |
Terminal en la nube para ejecutar comandos AWS CLI sin instalar nada local |
Gratis |
Amazon S3 (Simple Storage Service)
Servicio de almacenamiento de objetos. En nuestro caso, almacena archivos HTML como si fueran objetos en un "bucket" (contenedor). Con la funcion de Static Website Hosting, S3 puede servir estos archivos directamente como paginas web.
Region: us-east-2 (Ohio)
Bucket: igazabon.com
Capacidad: Ilimitada
Amazon CloudFront
Red de distribucion de contenido (CDN) con ~450 ubicaciones globales. Cachea el contenido del bucket S3 en servidores distribuidos por el mundo. Funciones clave para nosotros:
- HTTPS: S3 static hosting solo sirve HTTP. CloudFront agrega HTTPS usando el certificado de ACM.
- Dominio custom: Permite asociar
www.igazabon.com al contenido del bucket.
- Cache: Los archivos se sirven desde la edge location mas cercana al usuario, sin ir a Ohio cada vez.
- Redirect HTTP→HTTPS: Si alguien escribe http://, se redirige automaticamente a https://.
Distribution ID: E2901CBUW7X8O0
Domain: d3o1ldiby0v1xr.cloudfront.net
AWS Certificate Manager (ACM)
Servicio que emite certificados SSL/TLS gratuitos para usar con servicios de AWS. El certificado permite que el navegador muestre el candadito de seguridad (HTTPS). Se valida demostrando que eres dueno del dominio via DNS.
ARN: arn:aws:acm:us-east-1:948512815521:certificate/7c154ee9-39b3-42a9-84d2-aaece32cb4b2
Region: us-east-1 (requerido para CloudFront)
AWS CloudShell
Terminal basada en navegador con AWS CLI preinstalado y autenticado. No requiere instalar nada en tu maquina local. Se accede desde el icono >_ en la barra superior de la consola AWS.
Paso a Paso
1 Crear Bucket S3
S3
¿Que hicimos?
Creamos un bucket llamado igazabon.com para almacenar los archivos HTML del sitio.
Comando:
aws s3 mb s3://igazabon.com
¿Por que el nombre del bucket es el dominio?
Es una convencion. No es obligatorio, pero facilita la organizacion y es requisito si usas S3 website hosting directamente sin CloudFront.
2 Configurar Static Website Hosting
S3
¿Que hicimos?
Activamos la funcionalidad de "Static Website Hosting" en el bucket, indicando que index.html es el documento principal.
Comando:
aws s3 website s3://igazabon.com --index-document index.html --error-document index.html
¿Que hace esto?
- --index-document: Cuando alguien visita la raiz del sitio, S3 sirve este archivo.
- --error-document: Si alguien pide una pagina que no existe, se muestra este archivo en lugar de un error XML de AWS.
Endpoint generado:
http://igazabon.com.s3-website.us-east-2.amazonaws.com
3 Habilitar Acceso Publico
S3
¿Que hicimos?
Dos cosas: desactivamos el "Block Public Access" y agregamos una bucket policy que permite lectura publica.
Comando 1 — Desactivar bloqueo:
aws s3api put-public-access-block --bucket igazabon.com \
--public-access-block-configuration BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false
Comando 2 — Bucket Policy:
aws s3api put-bucket-policy --bucket igazabon.com --policy '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::igazabon.com/*"
}
]
}'
¿Por que es necesario?
Por defecto, S3 bloquea todo acceso publico (es una medida de seguridad). Como este es un sitio web publico, necesitamos que cualquiera pueda leer los archivos HTML.
Es como tener una tienda con la puerta cerrada con llave. Necesitas abrir la puerta para que los clientes entren y vean tus productos (los reportes).
4 Subir Archivos HTML
S3 + CloudShell
¿Que hicimos?
Subimos los archivos HTML a CloudShell (via "Actions → Upload file") y luego los copiamos al bucket S3.
Comandos:
aws s3 cp index.html s3://igazabon.com/index.html --content-type "text/html"
aws s3 cp amazon_analysis_munger.html s3://igazabon.com/amazon_analysis_munger.html --content-type "text/html"
aws s3 cp google_analysis_munger.html s3://igazabon.com/google_analysis_munger.html --content-type "text/html"
aws s3 cp spacex_analysis_munger.html s3://igazabon.com/spacex_analysis_munger.html --content-type "text/html"
aws s3 cp indicadores_financieros_munger.html s3://igazabon.com/indicadores_financieros_munger.html --content-type "text/html"
¿Por que --content-type?
Sin este flag, S3 podria servir los archivos como descarga en vez de renderizarlos como paginas web en el navegador. text/html le dice al navegador que es una pagina web.
Archivos subidos:
| Archivo | Contenido |
| index.html | Pagina principal con el indice de reportes |
| amazon_analysis_munger.html | Analisis de Amazon (AMZN) |
| google_analysis_munger.html | Analisis de Alphabet/Google (GOOGL) |
| spacex_analysis_munger.html | Analisis de SpaceX (SPCX) |
| indicadores_financieros_munger.html | Guia de 15 indicadores financieros |
5 Crear Certificado SSL (ACM)
ACM
¿Que hicimos?
Solicitamos un certificado SSL/TLS gratuito en AWS Certificate Manager para los dominios igazabon.com y *.igazabon.com (wildcard).
Comando:
aws acm request-certificate \
--domain-name igazabon.com \
--subject-alternative-names "*.igazabon.com" \
--validation-method DNS \
--region us-east-1
Detalles importantes:
- Region us-east-1: OBLIGATORIO. CloudFront solo acepta certificados de esta region, sin importar donde este tu bucket.
- Wildcard (*.igazabon.com): Cubre cualquier subdominio (www, blog, api, etc.) con un solo certificado.
- Validation DNS: Demuestra que eres dueno del dominio agregando un registro CNAME especifico.
Resultado:
CertificateArn: arn:aws:acm:us-east-1:948512815521:certificate/7c154ee9-39b3-42a9-84d2-aaece32cb4b2
6 Validar Certificado via DNS
ACM + GoDaddy
¿Que hicimos?
ACM nos dio un registro CNAME que agregamos en GoDaddy para demostrar que somos duenos del dominio.
Comando para obtener el registro:
aws acm describe-certificate \
--certificate-arn arn:aws:acm:us-east-1:948512815521:certificate/7c154ee9-39b3-42a9-84d2-aaece32cb4b2 \
--region us-east-1 \
--query 'Certificate.DomainValidationOptions'
Registro CNAME agregado en GoDaddy:
| Campo | Valor |
| Type | CNAME |
| Name | _8d918e2a1677fb4cf4b1dcf10b7cea65 |
| Value | _70cb27a5de931855e9d00514b8ca2688.jkddzztszm.acm-validations.aws. |
Verificacion del estado:
aws acm describe-certificate --certificate-arn arn:aws:acm:us-east-1:948512815521:certificate/7c154ee9-39b3-42a9-84d2-aaece32cb4b2 --region us-east-1 --query 'Certificate.Status'
# Resultado: "ISSUED" ✓
El certificado tardo ~10 minutos en validarse despues de agregar el CNAME en GoDaddy.
7 Crear Distribucion CloudFront
CloudFront
¿Que hicimos?
Creamos una distribucion de CloudFront que actua como intermediario entre el usuario y el bucket S3, agregando HTTPS, cache global y dominio custom.
Comando:
aws cloudfront create-distribution --distribution-config '{
"CallerReference": "igazabon-com-2026",
"Aliases": {
"Quantity": 2,
"Items": ["igazabon.com", "www.igazabon.com"]
},
"DefaultRootObject": "index.html",
"Origins": {
"Quantity": 1,
"Items": [{
"Id": "S3-igazabon.com",
"DomainName": "igazabon.com.s3-website.us-east-2.amazonaws.com",
"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginProtocolPolicy": "http-only"
}
}]
},
"DefaultCacheBehavior": {
"TargetOriginId": "S3-igazabon.com",
"ViewerProtocolPolicy": "redirect-to-https",
"AllowedMethods": {"Quantity": 2, "Items": ["GET", "HEAD"]},
"ForwardedValues": {"QueryString": false, "Cookies": {"Forward": "none"}},
"MinTTL": 0,
"DefaultTTL": 86400,
"MaxTTL": 31536000
},
"ViewerCertificate": {
"ACMCertificateArn": "arn:aws:acm:us-east-1:948512815521:certificate/7c154ee9-39b3-42a9-84d2-aaece32cb4b2",
"SSLSupportMethod": "sni-only",
"MinimumProtocolVersion": "TLSv1.2_2021"
},
"Enabled": true,
"Comment": "igazabon.com - Reportes de Inversion"
}'
Configuracion clave explicada:
| Parametro | Valor | Que hace |
| Aliases | igazabon.com, www.igazabon.com | Dominios custom que CloudFront acepta |
| DefaultRootObject | index.html | Pagina que se muestra al visitar la raiz / |
| OriginProtocolPolicy | http-only | CloudFront se conecta a S3 por HTTP (S3 static hosting no soporta HTTPS) |
| ViewerProtocolPolicy | redirect-to-https | Si el usuario entra por HTTP, lo redirige a HTTPS |
| DefaultTTL | 86400 (24 horas) | Tiempo que CloudFront cachea los archivos antes de pedir nuevos a S3 |
| SSLSupportMethod | sni-only | Metodo de HTTPS moderno (gratis, funciona en todos los navegadores actuales) |
| MinimumProtocolVersion | TLSv1.2_2021 | Solo acepta conexiones seguras modernas |
Resultado:
Distribution ID: E2901CBUW7X8O0
CloudFront Domain: d3o1ldiby0v1xr.cloudfront.net
Status: Deployed
8 Configurar DNS en GoDaddy
GoDaddy
¿Que hicimos?
Configuramos dos cosas en GoDaddy para que el dominio apunte a CloudFront:
A. Registro CNAME para www:
| Type | Name | Value | TTL |
| CNAME | www | d3o1ldiby0v1xr.cloudfront.net | 600 |
Esto hace que www.igazabon.com apunte directamente a la distribucion de CloudFront.
B. Reenvio del root domain:
| Configuracion | Valor |
| Tipo | Reenvio de dominio (Domain Forwarding) |
| Desde | igazabon.com |
| Hacia | https://www.igazabon.com |
| Tipo redirect | Permanente (301) |
¿Por que no un registro A directo?
GoDaddy no soporta ALIAS/ANAME records para el root domain. Solo permite registros A con IP fija, pero CloudFront usa IPs dinamicas. La solucion es hacer forwarding del root al subdominio www.
Es como tener dos puertas de entrada a tu casa. La puerta principal (igazabon.com) tiene un letrero que dice "use la otra puerta" y te redirige a la puerta lateral (www.igazabon.com) que si esta conectada directamente.
Mantenimiento
🔧 Mantenimiento y Actualizaciones
Comandos utiles
Subir un nuevo reporte:
# 1. Subir archivo a CloudShell (Actions → Upload file)
# 2. Copiar al bucket
aws s3 cp nuevo_reporte.html s3://igazabon.com/nuevo_reporte.html --content-type "text/html"
# 3. Actualizar el index.html con la nueva card
aws s3 cp index.html s3://igazabon.com/index.html --content-type "text/html"
Forzar actualizacion de cache:
# Si actualizaste un archivo y no ves los cambios, invalida la cache:
aws cloudfront create-invalidation --distribution-id E2901CBUW7X8O0 --paths "/*"
Listar archivos en el bucket:
aws s3 ls s3://igazabon.com/
Eliminar un archivo:
aws s3 rm s3://igazabon.com/archivo_a_borrar.html
Verificar estado de CloudFront:
aws cloudfront get-distribution --id E2901CBUW7X8O0 --query 'Distribution.Status'
Verificar certificado SSL:
aws acm describe-certificate \
--certificate-arn arn:aws:acm:us-east-1:948512815521:certificate/7c154ee9-39b3-42a9-84d2-aaece32cb4b2 \
--region us-east-1 \
--query 'Certificate.Status'
💰 Costos Estimados Mensuales
Muy economico
| Servicio | Concepto | Costo/mes |
| S3 | Almacenamiento (~5 archivos HTML, <1MB total) | $0.01 |
| S3 | Requests (GET) | $0.01 |
| CloudFront | Data transfer (free tier: 1TB/mes primer año) | $0.00 |
| ACM | Certificado SSL | $0.00 |
| GoDaddy | Dominio igazabon.com (anual prorrateado) | ~$1.50 |
| TOTAL ESTIMADO | ~$1.50 - $2.00 |
Mas barato que un cafe al mes. Y si el trafico es bajo (uso personal), podria ser incluso menos.
📊 Datos de la Configuracion
Referencia rapida
| Recurso | Valor |
| Dominio | www.igazabon.com |
| Registrador | GoDaddy |
| Bucket S3 | igazabon.com |
| Region bucket | us-east-2 (Ohio) |
| S3 Endpoint | http://igazabon.com.s3-website.us-east-2.amazonaws.com |
| CloudFront Distribution ID | E2901CBUW7X8O0 |
| CloudFront Domain | d3o1ldiby0v1xr.cloudfront.net |
| ACM Certificate ARN | arn:aws:acm:us-east-1:948512815521:certificate/7c154ee9-39b3-42a9-84d2-aaece32cb4b2 |
| AWS Account ID | 948512815521 |
| Fecha configuracion | 16 junio 2026 |