Files
odoo-expertos.com/de/odoo-hosting/aws-hosting-odoo-2026/index.html
T
2026-08-28 10:11:11 -03:00

2131 lines
88 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<link rel="preconnect" href="https://d3js.org" crossorigin>
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="alternate icon" href="/favicon.ico">
<title>AWS Hosting Odoo 2026 | Odoo Expertos · DE</title>
<meta name="description" content="Guia definitiva fuer desplegar Odoo en AWS (Amazon Web Services) en 2026. Configuracion EC2, RDS PostgreSQL, estimacion de Kosten, arqui - AWS Hosting Odoo 2026 | DE">
<meta name="keywords" content="aws hosting odoo, odoo en amazon cloud, ec2 odoo, rds postgresql odoo, aws odoo 2026, amazon web services odoo, desplegar odoo aws, odoo cloud aws">
<meta name="author" content="Dr. Equipo Odoo Expertos">
<meta name="robots" content="index, follow">
<meta name="language" content="es">
<link rel="canonical" href="https://www.odoo-expertos.com/de/odoo-hosting/aws-hosting-odoo-2026/">
<!-- Hreflang -->
<link rel="alternate" hreflang="de" href="https://www.odoo-expertos.com/de/odoo-hosting/aws-hosting-odoo-2026/" />
<link rel="alternate" hreflang="en" href="https://www.odoo-expertos.com/en/odoo-hosting/aws-hosting-odoo-2026/" />
<link rel="alternate" hreflang="de" href="https://www.odoo-expertos.com/de/odoo-hosting/aws-hosting-odoo-2026/" />
<link rel="alternate" hreflang="fr" href="https://www.odoo-expertos.com/fr/odoo-hosting/aws-hebergement-odoo-2026/" />
<link rel="alternate" hreflang="pt" href="https://www.odoo-expertos.com/pt/odoo-hosting/aws-hosting-odoo-2026/" />
<link rel="alternate" hreflang="ar" href="https://www.odoo-expertos.com/ar/odoo-hosting/aws-hosting-odoo-2026/" />
<link rel="alternate" hreflang="x-default" href="https://www.odoo-expertos.com/odoo-hosting/aws-hosting-odoo-2026/" />
<!-- Open Graph -->
<meta property="og:title" content="AWS Hosting Odoo 2026: Guia Completa fuer Desplegar en Amazon Cloud">
<meta property="og:description" content="Aprende a configurar Odoo en AWS con EC2, RDS y arquitectura escalable. Incluye estimacion de Kosten y mejores practicas.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://www.odoo-expertos.com/de/odoo-hosting/aws-hosting-odoo-2026/">
<meta property="og:image" content="https://www.odoo-expertos.com/images/aws-hosting-odoo-2026.jpg">
<meta property="og:site_name" content="Odoo Expertos">
<meta property="og:locale" content="es_ES">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="AWS Hosting Odoo 2026: Guia Completa Amazon Cloud">
<meta name="twitter:description" content="Guia definitiva fuer desplegar Odoo en AWS. EC2, RDS, Kosten y arquitectura.">
<!-- Schema.org Article -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "AWS Hosting Odoo 2026: Guia Completa fuer Desplegar en Amazon Cloud",
"description": "Guia definitiva fuer desplegar Odoo en AWS (Amazon Web Services) en 2026. Configuracion EC2, RDS PostgreSQL, estimacion de Kosten y arquitectura escalable.",
"author": {
"@type": "Person",
"name": "Dr. Equipo Odoo Expertos",
"url": "https://www.odoo-expertos.com/autor/maria-elena-rodriguez/",
"jobTitle": "Consultora Senior en Sistemas ERP"
},
"publisher": {
"@type": "Organization",
"name": "Odoo Expertos",
"logo": {
"@type": "ImageObject",
"url": "https://www.odoo-expertos.com/logo.png"
}
},
"datePublished": "2026-01-25",
"dateModified": "2026-01-25",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.odoo-expertos.com/de/odoo-hosting/aws-hosting-odoo-2026/"
}
}
</script>
<!-- FAQ Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Cuanto cuesta alojar Odoo en AWS mensualmente?",
"acceptedAnswer": {
"@type": "Answer",
"text": "El Kosten de Odoo en AWS varia segun la configuracion. Una instancia basica (t3.medium + RDS db.t3.micro) cuesta aproximadamente 50-80 EUR/mes. Para produccion Unternehmenrial con alta disponibilidad, los Kosten oscilan zwischen 200-500 EUR/mes dependiendo del trafico y Benutzer concurrentes."
}
},
{
"@type": "Question",
"name": "Que instancia EC2 necesito fuer Odoo?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Para Entwicklung/pruebas: t3.small (2 vCPU, 2GB RAM). Para produccion pequena (hasta 20 Benutzer): t3.medium (2 vCPU, 4GB RAM). Para produccion media (20-50 Benutzer): t3.large o m5.large. Para alta carga: m5.xlarge o superior con Auto Scaling configurado."
}
},
{
"@type": "Question",
"name": "Debo usar RDS o instalar PostgreSQL en EC2?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Recomendamos Amazon RDS fuer PostgreSQL en produccion. RDS ofrece backups automaticos, replicacion Multi-AZ, actualizaciones gestionadas y alta disponibilidad sin esfuerzo adicional. Instalar PostgreSQL en EC2 solo es recomendable fuer Entwicklung o si necesitas configuraciones muy especificas."
}
},
{
"@type": "Question",
"name": "AWS es mejor que Odoo.sh fuer hosting?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Depende de tus necesidades. AWS ofrece mayor control, escalabilidad y flexibilidad, ideal fuer Unternehmen con equipo tecnico. Odoo.sh es mas simple, con integracion nativa y actualizaciones automaticas, ideal fuer quienes prefieren gestion simplificada. AWS suele ser mas economico a escala, pero requiere mas expertise."
}
},
{
"@type": "Question",
"name": "Como configuro SSL/HTTPS fuer Odoo en AWS?",
"acceptedAnswer": {
"@type": "Answer",
"text": "La forma mas sencilla es usar AWS Certificate Manager (ACM) con un Application Load Balancer (ALB). ACM proporciona certificados SSL gratuitos que se reneun automaticamente. Configura el ALB fuer terminar SSL y redirigir trafico HTTP a HTTPS. Alternativamente, puedes usar Let's Encrypt directamente en la instancia EC2."
}
},
{
"@type": "Question",
"name": "Puedo usar el Free Tier de AWS fuer Odoo?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Si, pero con limitaciones. El Free Tier incluye 750 horas de t2.micro (1 vCPU, 1GB RAM) que es insuficiente fuer produccion pero funciona fuer Entwicklung. Tambien incluye 750 horas de RDS db.t2.micro y 20GB de almacenamiento. Es ideal fuer pruebas iniciales durante los primeros 12 meses."
}
},
{
"@type": "Question",
"name": "Como hago backup de Odoo en AWS?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Implementa una estrategia de backup multicapa: 1) Snapshots automaticos de RDS (retencion 7-35 dias), 2) Snapshots de EBS fuer el filestore de Odoo, 3) AWS Backup fuer politicas centralizadas, 4) Opcional: replicacion cross-region fuer disaster recovery. Los backups de RDS permiten restauracion point-in-time."
}
},
{
"@type": "Question",
"name": "Que region de AWS debo elegir fuer Odoo?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Elige la region mas cercana a tus Benutzer fuer minimizar latencia. Para Espana: eu-south-2 (Espana) o eu-west-1 (Irlanda). Para LATAM: sa-east-1 (Sao Paulo) o us-east-1 (Virginia). Considera tambien requisitos de GDPR si manejas Daten de ciudadanos europeos, lo que requiere regiones innerhalb la UE."
}
}
]
}
</script>
<!-- HowTo Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Como desplegar Odoo en AWS",
"description": "Guia paso a paso fuer configurar Odoo en Amazon Web Services",
"totalTime": "PT2H",
"estimatedCost": {
"@type": "MonetaryAmount",
"currency": "EUR",
"value": "50-200"
},
"step": [
{
"@type": "HowToStep",
"name": "Erstellen cuenta AWS",
"text": "Registrate en AWS y configura tu cuenta con facturacion"
},
{
"@type": "HowToStep",
"name": "Configurar VPC y redes",
"text": "Crea una VPC con subredes publicas y privadas fuer Sicherheit"
},
{
"@type": "HowToStep",
"name": "Lanzar instancia EC2",
"text": "Despliega una instancia EC2 con Ubuntu 22.04 LTS"
},
{
"@type": "HowToStep",
"name": "Configurar RDS PostgreSQL",
"text": "Crea una instancia RDS PostgreSQL en subnet privada"
},
{
"@type": "HowToStep",
"name": "Instalar Odoo",
"text": "Instala Odoo 18 y configura la conexion a RDS"
},
{
"@type": "HowToStep",
"name": "Configurar Load Balancer y SSL",
"text": "Configura ALB con certificado SSL de ACM"
}
]
}
</script>
<!-- BreadcrumbList Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Inicio",
"item": "https://www.odoo-expertos.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Hosting Odoo",
"item": "https://www.odoo-expertos.com/de/odoo-hosting/"
},
{
"@type": "ListItem",
"position": 3,
"name": "AWS Hosting Odoo 2026",
"item": "https://www.odoo-expertos.com/de/odoo-hosting/aws-hosting-odoo-2026/"
}
]
}
</script>
<link rel="stylesheet" href="/css/main.min.css">
<style>
.pillar-hero {
background: linear-gradient(135deg, #1a1a1a 0%, #232f3e 50%, #1a1a1a 100%);
padding: 4rem 2rem;
text-align: center;
border-bottom: 3px solid #FF9900;
position: relative;
overflow: hidden;
}
.pillar-hero::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(ellipse at center, rgba(255,153,0,0.15) 0%, transparent 70%);
pointer-events: none;
}
.pillar-hero h1 {
font-size: clamp(2rem, 5vw, 3.5rem);
color: #FF9900;
margin-bottom: 1rem;
line-height: 1.2;
position: relative;
}
.pillar-subtitle {
font-size: 1.3rem;
color: #b0b0b0;
max-width: 800px;
margin: 0 auto 2rem;
}
.pillar-meta {
display: flex;
justify-content: center;
gap: 2rem;
flex-wrap: wrap;
font-size: 0.9rem;
color: #888;
}
.pillar-meta span {
display: flex;
align-items: center;
gap: 0.5rem;
}
.quick-stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 1.5rem;
padding: 2rem;
background: #2a2a2a;
border-radius: 12px;
margin: 2rem 0;
}
.stat-card {
text-align: center;
padding: 1.5rem;
background: rgba(255,153,0,0.1);
border-radius: 8px;
border: 1px solid rgba(255,153,0,0.2);
transition: transform 0.3s ease, border-color 0.3s ease;
}
.stat-card:hover {
transform: translateY(-5px);
border-color: #FF9900;
}
.stat-number {
font-size: 2.5rem;
font-weight: 700;
color: #FF9900;
display: block;
}
.stat-label {
color: #b0b0b0;
font-size: 0.9rem;
margin-top: 0.5rem;
}
.toc {
background: #2a2a2a;
border: 2px solid #FF9900;
border-radius: 12px;
padding: 2rem;
margin: 2rem 0;
}
.toc h2 {
color: #FF9900;
margin-bottom: 1rem;
font-size: 1.5rem;
}
.toc-list {
list-style: none;
padding: 0;
columns: 2;
column-gap: 2rem;
}
.toc-list li {
margin-bottom: 0.75rem;
break-inside: avoid;
}
.toc-list a {
color: #e0e0e0;
text-decoration: none;
display: flex;
align-items: center;
gap: 0.5rem;
transition: color 0.3s ease;
}
.toc-list a:hover {
color: #FF9900;
}
.toc-list a::before {
content: '>';
color: #FF9900;
}
.content-section {
margin: 3rem 0;
}
.content-section h2 {
color: #FF9900;
margin-bottom: 1.5rem;
padding-bottom: 0.5rem;
border-bottom: 2px solid rgba(255,153,0,0.3);
}
.content-section h3 {
color: #FFBB33;
margin: 2rem 0 1rem;
}
.chart-section {
margin: 3rem 0;
padding: 2rem;
background: #2a2a2a;
border-radius: 12px;
}
.chart-section h3 {
color: #FF9900;
margin-bottom: 1rem;
}
.chart-container {
width: 100%;
min-height: 400px;
position: relative;
}
.comparison-table {
width: 100%;
border-collapse: collapse;
margin: 2rem 0;
background: #2a2a2a;
border-radius: 12px;
overflow: hidden;
}
.comparison-table th,
.comparison-table td {
padding: 1rem;
text-align: left;
border-bottom: 1px solid #3a3a3a;
}
.comparison-table th {
background: rgba(255,153,0,0.2);
color: #FF9900;
font-weight: 600;
}
.comparison-table tr:hover {
background: rgba(255,153,0,0.05);
}
.comparison-table .check {
color: #4CAF50;
font-weight: bold;
}
.comparison-table .cross {
color: #f44336;
}
.instance-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
margin: 2rem 0;
}
.instance-card {
background: #2a2a2a;
border-radius: 12px;
padding: 1.5rem;
border: 1px solid rgba(255,153,0,0.2);
transition: transform 0.3s ease, border-color 0.3s ease;
}
.instance-card:hover {
transform: translateY(-5px);
border-color: #FF9900;
}
.instance-card.recommended {
border-color: #FF9900;
background: linear-gradient(135deg, rgba(255,153,0,0.15) 0%, #2a2a2a 100%);
position: relative;
}
.instance-card .badge {
display: inline-block;
padding: 0.25rem 0.75rem;
background: #FF9900;
color: #000;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 600;
margin-bottom: 1rem;
}
.instance-card h4 {
color: #fff;
margin-bottom: 0.5rem;
font-size: 1.3rem;
}
.instance-card .price {
font-size: 1.8rem;
color: #FF9900;
font-weight: 700;
}
.instance-card .price-period {
color: #888;
font-size: 0.9rem;
}
.instance-card ul {
list-style: none;
padding: 0;
margin: 1rem 0;
}
.instance-card li {
padding: 0.5rem 0;
border-bottom: 1px solid #3a3a3a;
display: flex;
align-items: center;
gap: 0.5rem;
color: #b0b0b0;
}
.instance-card li::before {
content: '>';
color: #FF9900;
font-weight: bold;
}
.faq-section {
margin: 3rem 0;
}
.faq-item {
background: #2a2a2a;
border-radius: 8px;
margin-bottom: 1rem;
overflow: hidden;
}
.faq-question {
padding: 1.25rem;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
color: #fff;
font-weight: 500;
transition: background 0.3s ease;
}
.faq-question:hover {
background: rgba(255,153,0,0.1);
}
.faq-question::after {
content: '+';
font-size: 1.5rem;
color: #FF9900;
transition: transform 0.3s ease;
}
.faq-item.open .faq-question::after {
transform: rotate(45deg);
}
.faq-answer {
padding: 0 1.25rem;
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease, padding 0.3s ease;
color: #b0b0b0;
}
.faq-item.open .faq-answer {
padding: 0 1.25rem 1.25rem;
max-height: 500px;
}
.cta-banner {
background: linear-gradient(135deg, rgba(255,153,0,0.2) 0%, rgba(255,187,51,0.1) 100%);
border: 2px solid rgba(255,153,0,0.5);
border-radius: 12px;
padding: 2.5rem;
text-align: center;
margin: 3rem 0;
}
.cta-banner h3 {
color: #FF9900;
margin-bottom: 1rem;
font-size: 1.8rem;
}
.cta-banner p {
margin-bottom: 1.5rem;
color: #b0b0b0;
font-size: 1.1rem;
}
.cta-banner .cta-btn {
display: inline-block;
padding: 1rem 2.5rem;
background: #FF9900;
color: #000;
border-radius: 8px;
text-decoration: none;
font-weight: 600;
font-size: 1.1rem;
transition: background 0.3s ease, transform 0.3s ease;
}
.cta-banner .cta-btn:hover {
background: #FFBB33;
transform: scale(1.05);
}
.related-articles {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
margin: 2rem 0;
}
.related-card {
background: #2a2a2a;
border-radius: 8px;
overflow: hidden;
transition: transform 0.3s ease;
text-decoration: none;
}
.related-card:hover {
transform: translateY(-5px);
}
.related-card-image {
height: 150px;
background: linear-gradient(135deg, rgba(255,153,0,0.3), rgba(255,187,51,0.3));
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
}
.related-card-content {
padding: 1.25rem;
}
.related-card h4 {
color: #fff;
margin-bottom: 0.5rem;
font-size: 1rem;
}
.related-card p {
color: #888;
font-size: 0.9rem;
margin: 0;
}
.d3-tooltip {
position: absolute;
background: rgba(0,0,0,0.95);
color: #fff;
padding: 0.75rem 1rem;
border-radius: 8px;
font-size: 0.9rem;
pointer-events: none;
z-index: 100;
max-width: 280px;
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
border: 1px solid rgba(255,153,0,0.3);
}
.d3-tooltip strong {
color: #FF9900;
}
.highlight-box {
background: linear-gradient(135deg, rgba(255,153,0,0.1) 0%, rgba(255,187,51,0.05) 100%);
border-left: 4px solid #FF9900;
padding: 1.5rem;
margin: 2rem 0;
border-radius: 0 8px 8px 0;
}
.highlight-box h4 {
color: #FF9900;
margin-bottom: 0.5rem;
}
.pros-cons {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.5rem;
margin: 1.5rem 0;
}
.pros, .cons {
padding: 1.5rem;
border-radius: 8px;
}
.pros {
background: rgba(76, 175, 80, 0.1);
border: 1px solid rgba(76, 175, 80, 0.3);
}
.cons {
background: rgba(244, 67, 54, 0.1);
border: 1px solid rgba(244, 67, 54, 0.3);
}
.pros h4 {
color: #4CAF50;
margin-bottom: 1rem;
}
.cons h4 {
color: #f44336;
margin-bottom: 1rem;
}
.pros ul, .cons ul {
list-style: none;
padding: 0;
margin: 0;
}
.pros li, .cons li {
margin-bottom: 0.5rem;
color: #b0b0b0;
}
.pros li::before {
content: '+ ';
color: #4CAF50;
}
.cons li::before {
content: '- ';
color: #f44336;
}
.code-block {
background: #1a1a1a;
border: 1px solid #3a3a3a;
border-radius: 8px;
padding: 1.5rem;
overflow-x: auto;
margin: 1.5rem 0;
}
.code-block pre {
margin: 0;
color: #e0e0e0;
font-family: 'Monaco', 'Menlo', monospace;
font-size: 0.9rem;
line-height: 1.5;
}
.code-block .comment {
color: #6a9955;
}
.code-block .keyword {
color: #569cd6;
}
.code-block .string {
color: #ce9178;
}
.aws-service-badge {
display: inline-block;
background: linear-gradient(135deg, #232f3e, #3a4a5c);
color: #FF9900;
padding: 0.25rem 0.75rem;
border-radius: 4px;
font-size: 0.85rem;
font-weight: 600;
margin-right: 0.5rem;
margin-bottom: 0.5rem;
}
.architecture-note {
background: rgba(33, 150, 243, 0.1);
border: 1px solid rgba(33, 150, 243, 0.3);
border-radius: 8px;
padding: 1.5rem;
margin: 1.5rem 0;
}
.architecture-note h4 {
color: #2196F3;
margin-bottom: 0.5rem;
}
.fade-in {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.fade-in.visible {
opacity: 1;
transform: translateY(0);
}
@media (max-width: 768px) {
.toc-list {
columns: 1;
}
.pillar-meta {
flex-direction: column;
gap: 0.5rem;
}
.chart-container {
min-height: 300px;
}
.pros-cons {
grid-template-columns: 1fr;
}
.instance-grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div id="header"><header class="site-header"><nav class="navbar"><div class="container"><div class="nav-brand"><a href="/de/" class="logo"><span class="logo-text">Odoo Expertos</span></a></div><button class="nav-toggle" aria-label="Toggle navigation"><span></span><span></span><span></span></button><div class="nav-menu"><ul class="nav-list"><li><a href="/de/">Start</a></li><li><a href="/de/odoo/">Odoo</a></li><li><a href="/de/odoo-ia/">Odoo KI</a></li><li><a href="/de/odoo-hosting/">Odoo Hosting</a></li><li><a href="/de/mapa-del-sitio/">Sitemap</a></li></ul></div></div></nav></header></div><button class="nav-toggle" aria-label="Toggle navigation"><span></span><span></span><span></span></button><div class="nav-menu"><ul class="nav-list"><li><a href="/de/">Start</a></li><li><a href="/de/odoo/">Odoo</a></li><li><a href="/de/odoo-ia/">Odoo KI</a></li><li><a href="/de/odoo-hosting/">Odoo Hosting</a></li><li><a href="/de/mapa-del-sitio/">Sitemap</a></li></ul></div></div></nav></header></div>
<!-- Breadcrumbs -->
<nav class="breadcrumbs">
<div class="container">
<ol class="breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/"><span itemprop="name">Inicio</span></a>
<span itemprop="position" style="display:none">1</span>
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/de/odoo-hosting/"><span itemprop="name">Hosting Odoo</span></a>
<span itemprop="position" style="display:none">2</span>
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<span itemprop="name">AWS Hosting Odoo 2026</span>
<span itemprop="position" style="display:none">3</span>
</li>
</ol>
</div>
</nav>
<!-- Hero Section -->
<section class="pillar-hero">
<div class="container">
<h1>AWS Hosting Odoo 2026: Guia Completa fuer Amazon Cloud</h1>
<p class="pillar-subtitle">Aprende a desplegar, configurar y optimieren Odoo en Amazon Web Services. Desde instancias EC2 hasta bases de Daten RDS, arquitectura escalable y estimacion de Kosten fuer tu Unternehmen.</p>
<div class="pillar-meta">
<span>Publicado: 25 enero 2026</span>
<span>Actualizado: 25 enero 2026</span>
<span>30 min lectura</span>
<span>Dr. Equipo Odoo Expertos</span>
</div>
</div>
</section>
<main class="container">
<!-- Quick Stats -->
<section class="quick-stats fade-in">
<div class="stat-card">
<span class="stat-number">33</span>
<span class="stat-label">Regiones AWS Disponibles</span>
</div>
<div class="stat-card">
<span class="stat-number">50EUR</span>
<span class="stat-label">Kosten Minimo/Mes</span>
</div>
<div class="stat-card">
<span class="stat-number">99.99%</span>
<span class="stat-label">SLA de Disponibilidad</span>
</div>
<div class="stat-card">
<span class="stat-number">400+</span>
<span class="stat-label">Tipos de Instancia</span>
</div>
<div class="stat-card">
<span class="stat-number">12</span>
<span class="stat-label">Meses Free Tier</span>
</div>
</section>
<!-- Table of Contents -->
<nav class="toc fade-in">
<h2>Contenido de esta Guia</h2>
<ol class="toc-list">
<li><a href="#introduccion">Introduccion a AWS fuer Odoo</a></li>
<li><a href="#arquitectura">Arquitectura AWS Recomendada</a></li>
<li><a href="#ec2-instancias">Tipos de Instancias EC2</a></li>
<li><a href="#rds-postgresql">RDS fuer PostgreSQL</a></li>
<li><a href="#costos">Estimacion de Kosten 2026</a></li>
<li><a href="#configuracion">Guia de Configuracion Paso a Paso</a></li>
<li><a href="#seguridad">Sicherheit y Mejores Practicas</a></li>
<li><a href="#escalabilidad">Escalabilidad y Auto Scaling</a></li>
<li><a href="#pros-cons">Ventajas y Desventajas</a></li>
<li><a href="#faq">Haeufig gestellte Fragen (8+)</a></li>
<li><a href="#relacionados">Articulos Relacionados</a></li>
</ol>
</nav>
<!-- Introduction -->
<section id="introduccion" class="content-section fade-in">
<h2>Introduccion: Por que Elegir AWS fuer Odoo en 2026</h2>
<p>Amazon Web Services (AWS) se ha consolidado como la plataforma de Cloud publica lider mundial, y en 2026 ofrece una infraestructura excepcional fuer desplegar Odoo ERP. Con mas de 33 regiones globales, cientos de servicios integrados y una fiabilidad probada del 99.99%, AWS representa una opcion solida fuer Unternehmen que buscan control total, escalabilidad y rendimiento Unternehmenrial.</p>
<div class="highlight-box">
<h4>Conclusion Clave</h4>
<p>AWS es ideal fuer Unternehmen medianas y grosss que cuentan con equipo tecnico o DevOps, necesitan <strong>escalabilidad automatica</strong>, requieren cumplimiento normativo especifico (GDPR, HIPAA) o buscan integrar Odoo con otros servicios cloud como machine learning, analytics o IoT. Para pequenas Unternehmen sin expertise tecnico, alternativas gestionadas como Odoo4projects pueden ser mas convenientes.</p>
</div>
<h3>Servicios AWS Esenciales fuer Odoo</h3>
<p>Un despliegue profesional de Odoo en AWS utiliza multiples servicios trabajando en conjunto:</p>
<p>
<span class="aws-service-badge">EC2</span>
<span class="aws-service-badge">RDS</span>
<span class="aws-service-badge">S3</span>
<span class="aws-service-badge">ELB</span>
<span class="aws-service-badge">CloudFront</span>
<span class="aws-service-badge">Route 53</span>
<span class="aws-service-badge">ACM</span>
<span class="aws-service-badge">VPC</span>
<span class="aws-service-badge">CloudWatch</span>
<span class="aws-service-badge">WAF</span>
</p>
<p>La combinacion estrategica de estos servicios permite erstellen una arquitectura robusta, segura y altamente disponible que puede escalar von una startup hasta una corporacion multinacional.</p>
<h3>Quien Deberia Usar AWS fuer Odoo</h3>
<ul>
<li><strong>Empresas medianas-grosss</strong> con mas de 50 Benutzer concurrentes</li>
<li><strong>Organizaciones con equipo IT/DevOps</strong> capaz de verwalten infraestructura cloud</li>
<li><strong>Empresas con requisitos de compliance</strong> especificos (financieras, salud, gobierno)</li>
<li><strong>Negocios que necesitan integraciones</strong> con servicios AWS como SageMaker, Redshift o Lambda</li>
<li><strong>Companias con presencia global</strong> que requieren baja latencia en multiples regiones</li>
</ul>
</section>
<!-- Architecture Diagram -->
<section class="chart-section fade-in">
<h3 id="arquitectura">Arquitectura AWS Recomendada fuer Odoo</h3>
<p>Este diagrama interactivo muestra la arquitectura de referencia fuer un despliegue de Odoo en AWS con alta disponibilidad. Pasa el cursor ueber cada componente fuer ver detalles.</p>
<div class="chart-container" id="architecture-diagram"></div>
</section>
<!-- EC2 Instance Types -->
<section id="ec2-instancias" class="content-section fade-in">
<h2>Tipos de Instancias EC2 fuer Odoo</h2>
<p>Elegir la instancia EC2 correcta es crucial fuer el rendimiento de Odoo. Las instancias de proposito general de la familia T3 y M5 son las mas recomendadas fuer la mayoria de despliegues.</p>
<div class="instance-grid">
<!-- t3.small -->
<div class="instance-card">
<span class="badge">Entwicklung</span>
<h4>t3.small</h4>
<p class="price">~15EUR<span class="price-period">/mes</span></p>
<ul>
<li>2 vCPU (burst)</li>
<li>2 GB RAM</li>
<li>Hasta 5 Gbps red</li>
<li>Ideal fuer Entwicklung/testing</li>
<li>1-5 Benutzer concurrentes</li>
</ul>
</div>
<!-- t3.medium -->
<div class="instance-card recommended">
<span class="badge">Recomendado PYME</span>
<h4>t3.medium</h4>
<p class="price">~30EUR<span class="price-period">/mes</span></p>
<ul>
<li>2 vCPU (burst)</li>
<li>4 GB RAM</li>
<li>Hasta 5 Gbps red</li>
<li>Produccion pequena</li>
<li>10-20 Benutzer concurrentes</li>
</ul>
</div>
<!-- t3.large -->
<div class="instance-card">
<span class="badge">Produccion Media</span>
<h4>t3.large</h4>
<p class="price">~60EUR<span class="price-period">/mes</span></p>
<ul>
<li>2 vCPU (burst)</li>
<li>8 GB RAM</li>
<li>Hasta 5 Gbps red</li>
<li>Odoo Enterprise</li>
<li>20-40 Benutzer concurrentes</li>
</ul>
</div>
<!-- m5.large -->
<div class="instance-card">
<span class="badge">Produccion Alta</span>
<h4>m5.large</h4>
<p class="price">~75EUR<span class="price-period">/mes</span></p>
<ul>
<li>2 vCPU (dedicados)</li>
<li>8 GB RAM</li>
<li>Hasta 10 Gbps red</li>
<li>Sin creditos burst</li>
<li>30-50 Benutzer concurrentes</li>
</ul>
</div>
<!-- m5.xlarge -->
<div class="instance-card">
<span class="badge">Enterprise</span>
<h4>m5.xlarge</h4>
<p class="price">~150EUR<span class="price-period">/mes</span></p>
<ul>
<li>4 vCPU (dedicados)</li>
<li>16 GB RAM</li>
<li>Hasta 10 Gbps red</li>
<li>Alta carga de traunter</li>
<li>50-100 Benutzer concurrentes</li>
</ul>
</div>
<!-- c5.xlarge -->
<div class="instance-card">
<span class="badge">Computacion Intensiva</span>
<h4>c5.xlarge</h4>
<p class="price">~135EUR<span class="price-period">/mes</span></p>
<ul>
<li>4 vCPU (optimizados)</li>
<li>8 GB RAM</li>
<li>Hasta 10 Gbps red</li>
<li>Reportes pesados</li>
<li>Procesamiento batch</li>
</ul>
</div>
</div>
<div class="architecture-note">
<h4>Nota ueber Creditos de CPU (T3)</h4>
<p>Las instancias T3 funcionan con creditos de CPU que permiten "bursts" de rendimiento. Para cargas constantes, considera el modo ilimitado (Kosten adicional) o migra a instancias M5 que ofrecen rendimiento consistente sin System de creditos.</p>
</div>
</section>
<!-- RDS PostgreSQL -->
<section id="rds-postgresql" class="content-section fade-in">
<h2>Amazon RDS fuer PostgreSQL: La Base de Datos Ideal</h2>
<p>Amazon RDS (Relational Database Service) simplifica la gestion de PostgreSQL eliminando Aufgaben administrativas como backups, parches y replicacion. Para Odoo, RDS PostgreSQL es la opcion recomendada en produccion.</p>
<h3>Comfuertiva: RDS vs PostgreSQL en EC2</h3>
<div style="overflow-x: auto;">
<table class="comparison-table">
<thead>
<tr>
<th>Caracteristica</th>
<th>RDS PostgreSQL</th>
<th>PostgreSQL en EC2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Backups automaticos</td>
<td class="check">Incluido</td>
<td class="cross">Manual</td>
</tr>
<tr>
<td>Point-in-time recovery</td>
<td class="check">Hasta 35 dias</td>
<td class="cross">Requiere config</td>
</tr>
<tr>
<td>Multi-AZ (HA)</td>
<td class="check">1 click</td>
<td class="cross">Complejo</td>
</tr>
<tr>
<td>Actualizaciones automaticas</td>
<td class="check">Gestionado</td>
<td class="cross">Manual</td>
</tr>
<tr>
<td>Escalado vertical</td>
<td class="check">Minutos</td>
<td class="cross">Downtime</td>
</tr>
<tr>
<td>Read Replicas</td>
<td class="check">Hasta 5</td>
<td class="cross">Complejo</td>
</tr>
<tr>
<td>Control total</td>
<td class="cross">Limitado</td>
<td class="check">Completo</td>
</tr>
<tr>
<td>Kosten</td>
<td>Mayor (+30-40%)</td>
<td>Menor</td>
</tr>
</tbody>
</table>
</div>
<h3>Instancias RDS Recomendadas fuer Odoo</h3>
<div style="overflow-x: auto;">
<table class="comparison-table">
<thead>
<tr>
<th>Instancia RDS</th>
<th>vCPU</th>
<th>RAM</th>
<th>Kosten/mes</th>
<th>Caso de Uso</th>
</tr>
</thead>
<tbody>
<tr>
<td>db.t3.micro</td>
<td>2</td>
<td>1 GB</td>
<td>~15EUR</td>
<td>Entwicklung/Free Tier</td>
</tr>
<tr>
<td>db.t3.small</td>
<td>2</td>
<td>2 GB</td>
<td>~30EUR</td>
<td>Produccion pequena</td>
</tr>
<tr>
<td>db.t3.medium</td>
<td>2</td>
<td>4 GB</td>
<td>~60EUR</td>
<td>PYME (recomendado)</td>
</tr>
<tr>
<td>db.m5.large</td>
<td>2</td>
<td>8 GB</td>
<td>~130EUR</td>
<td>Produccion media-alta</td>
</tr>
<tr>
<td>db.m5.xlarge</td>
<td>4</td>
<td>16 GB</td>
<td>~260EUR</td>
<td>Enterprise</td>
</tr>
</tbody>
</table>
</div>
<div class="highlight-box">
<h4>Configuracion PostgreSQL Optima fuer Odoo</h4>
<p>Ajusta estos fuermetros en el Parameter Group de RDS fuer optimieren el rendimiento de Odoo:</p>
</div>
<div class="code-block">
<pre><span class="comment"># Parameter Group personalizado fuer Odoo</span>
<span class="keyword">shared_buffers</span> = <span class="string">256MB</span> <span class="comment"># 25% de RAM disponible</span>
<span class="keyword">effective_cache_size</span> = <span class="string">768MB</span> <span class="comment"># 75% de RAM</span>
<span class="keyword">work_mem</span> = <span class="string">16MB</span>
<span class="keyword">maintenance_work_mem</span> = <span class="string">128MB</span>
<span class="keyword">max_connections</span> = <span class="string">100</span>
<span class="keyword">checkpoint_completion_target</span> = <span class="string">0.9</span>
<span class="keyword">wal_buffers</span> = <span class="string">16MB</span>
<span class="keyword">random_page_cost</span> = <span class="string">1.1</span> <span class="comment"># Optimizado fuer SSD</span></pre>
</div>
</section>
<!-- Cost Estimation Chart -->
<section class="chart-section fade-in">
<h3 id="costos">Estimacion de Kosten AWS fuer Odoo 2026</h3>
<p>Este grafico interactivo muestra los Kosten mensuales estimados fuer diferentes configuraciones de Odoo en AWS. Los Kosten incluyen EC2, RDS, almacenamiento y transferencia basica.</p>
<div class="chart-container" id="cost-chart"></div>
</section>
<!-- Detailed Cost Table -->
<section class="content-section fade-in">
<h2>Desglose de Kosten por Escenario</h2>
<div style="overflow-x: auto;">
<table class="comparison-table">
<thead>
<tr>
<th>Escenario</th>
<th>EC2</th>
<th>RDS</th>
<th>EBS/S3</th>
<th>ALB</th>
<th>Otros</th>
<th>Total/Mes</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Entwicklung</strong></td>
<td>15EUR</td>
<td>15EUR</td>
<td>5EUR</td>
<td>-</td>
<td>5EUR</td>
<td><strong>~40EUR</strong></td>
</tr>
<tr>
<td><strong>PYME (10-20 Benutzer)</strong></td>
<td>30EUR</td>
<td>60EUR</td>
<td>15EUR</td>
<td>20EUR</td>
<td>15EUR</td>
<td><strong>~140EUR</strong></td>
</tr>
<tr>
<td><strong>Mediana (30-50 Benutzer)</strong></td>
<td>75EUR</td>
<td>130EUR</td>
<td>30EUR</td>
<td>25EUR</td>
<td>25EUR</td>
<td><strong>~285EUR</strong></td>
</tr>
<tr>
<td><strong>Enterprise (50-100 Benutzer)</strong></td>
<td>150EUR</td>
<td>260EUR</td>
<td>50EUR</td>
<td>35EUR</td>
<td>50EUR</td>
<td><strong>~545EUR</strong></td>
</tr>
<tr>
<td><strong>HA Multi-AZ</strong></td>
<td>300EUR</td>
<td>520EUR</td>
<td>100EUR</td>
<td>50EUR</td>
<td>100EUR</td>
<td><strong>~1070EUR</strong></td>
</tr>
</tbody>
</table>
</div>
<p><em>* Preise aproximados region eu-west-1 (Irlanda) a enero 2026. Pueden variar segun region y uso real.</em></p>
<div class="architecture-note">
<h4>Optimizacion de Kosten</h4>
<p><strong>Reserved Instances:</strong> Comprometerse a 1-3 anos puede ahorrar hasta 72% vs On-Demand.<br>
<strong>Savings Plans:</strong> Flexibilidad con ahorros de hasta 66%.<br>
<strong>Spot Instances:</strong> Para workers no criticos, ahorro hasta 90%.</p>
</div>
</section>
<!-- Configuration Guide -->
<section id="configuracion" class="content-section fade-in">
<h2>Guia de Configuracion Paso a Paso</h2>
<p>A continuacion se presenta una guia resumida fuer desplegar Odoo en AWS. Cada paso incluye los comandos y configuraciones esenciales.</p>
<h3>Paso 1: Configurar VPC y Redes</h3>
<p>Crea una VPC con subredes publicas (fuer ALB) y privadas (fuer EC2 y RDS):</p>
<div class="code-block">
<pre><span class="comment"># Erstellen VPC con CIDR 10.0.0.0/16</span>
<span class="keyword">aws ec2 create-vpc</span> --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=odoo-vpc}]'
<span class="comment"># Erstellen subredes publicas (2 AZs fuer ALB)</span>
<span class="keyword">aws ec2 create-subnet</span> --vpc-id vpc-xxx --cidr-block 10.0.1.0/24 --availability-zone eu-west-1a
<span class="keyword">aws ec2 create-subnet</span> --vpc-id vpc-xxx --cidr-block 10.0.2.0/24 --availability-zone eu-west-1b
<span class="comment"># Erstellen subredes privadas (fuer EC2 y RDS)</span>
<span class="keyword">aws ec2 create-subnet</span> --vpc-id vpc-xxx --cidr-block 10.0.10.0/24 --availability-zone eu-west-1a
<span class="keyword">aws ec2 create-subnet</span> --vpc-id vpc-xxx --cidr-block 10.0.11.0/24 --availability-zone eu-west-1b</pre>
</div>
<h3>Paso 2: Lanzar Instancia EC2</h3>
<p>Despliega una instancia EC2 con Ubuntu 22.04 LTS:</p>
<div class="code-block">
<pre><span class="comment"># Lanzar instancia EC2</span>
<span class="keyword">aws ec2 run-instances</span> \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type t3.medium \
--key-name odoo-key \
--security-group-ids sg-xxx \
--subnet-id subnet-xxx \
--block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":50,"VolumeType":"gp3"}}]' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=odoo-server}]'</pre>
</div>
<h3>Paso 3: Erstellen Base de Datos RDS</h3>
<p>Configura RDS PostgreSQL en una subred privada:</p>
<div class="code-block">
<pre><span class="comment"># Erstellen instancia RDS PostgreSQL</span>
<span class="keyword">aws rds create-db-instance</span> \
--db-instance-identifier odoo-db \
--db-instance-class db.t3.medium \
--engine postgres \
--engine-version 16.1 \
--master-username odoo_admin \
--master-user-password "TuPasswordSeguro123!" \
--allocated-storage 100 \
--storage-type gp3 \
--vpc-security-group-ids sg-xxx \
--db-subnet-group-name odoo-db-subnet \
--backup-retention-period 7 \
--multi-az \
--no-publicly-accessible</pre>
</div>
<h3>Paso 4: Instalar Odoo</h3>
<p>Una vez conectado a la instancia EC2, instala Odoo 18:</p>
<div class="code-block">
<pre><span class="comment"># Aktualisieren System</span>
<span class="keyword">sudo apt update && sudo apt upgrade -y</span>
<span class="comment"># Instalar dependencias</span>
<span class="keyword">sudo apt install -y</span> python3-pip python3-dev python3-venv \
libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev \
libldap2-dev build-essential libssl-dev libffi-dev \
libmysqlclient-dev libjpeg-dev libpq-dev \
liblcms2-dev libblas-dev libatlas-base-dev
<span class="comment"># Instalar wkhtmltopdf fuer reportes PDF</span>
<span class="keyword">wget</span> https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
<span class="keyword">sudo dpkg -i</span> wkhtmltox_0.12.6.1-3.jammy_amd64.deb
<span class="comment"># Erstellen Benutzer Odoo</span>
<span class="keyword">sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo</span>
<span class="comment"># Clonar Odoo 18</span>
<span class="keyword">sudo su - odoo</span>
<span class="keyword">git clone</span> https://github.com/odoo/odoo.git --depth 1 --branch 18.0 /opt/odoo/odoo18
<span class="comment"># Erstellen entorno virtual e instalar dependencias</span>
<span class="keyword">python3 -m venv</span> /opt/odoo/odoo18-venv
<span class="keyword">source</span> /opt/odoo/odoo18-venv/bin/activate
<span class="keyword">pip install</span> -r /opt/odoo/odoo18/requirements.txt
<span class="keyword">pip install</span> psycopg2-binary</pre>
</div>
<h3>Paso 5: Configurar Odoo</h3>
<p>Crea el archivo de configuracion conectando a RDS:</p>
<div class="code-block">
<pre><span class="comment"># /etc/odoo.conf</span>
[options]
<span class="keyword">admin_passwd</span> = <span class="string">TuMasterPasswordSeguro</span>
<span class="keyword">db_host</span> = <span class="string">odoo-db.xxxxx.eu-west-1.rds.amazonaws.com</span>
<span class="keyword">db_port</span> = <span class="string">5432</span>
<span class="keyword">db_user</span> = <span class="string">odoo_admin</span>
<span class="keyword">db_password</span> = <span class="string">TuPasswordRDS</span>
<span class="keyword">addons_path</span> = <span class="string">/opt/odoo/odoo18/addons,/opt/odoo/custom-addons</span>
<span class="keyword">data_dir</span> = <span class="string">/opt/odoo/data</span>
<span class="keyword">logfile</span> = <span class="string">/var/log/odoo/odoo.log</span>
<span class="keyword">workers</span> = <span class="string">4</span>
<span class="keyword">max_cron_threads</span> = <span class="string">2</span>
<span class="keyword">proxy_mode</span> = <span class="string">True</span></pre>
</div>
</section>
<!-- Security Section -->
<section id="seguridad" class="content-section fade-in">
<h2>Sicherheit y Mejores Practicas en AWS</h2>
<p>La Sicherheit en AWS sigue el modelo de responsabilidad compartida. AWS protege la infraestructura, pero tu eres responsable de la configuracion segura de tus recursos.</p>
<h3>Security Groups Recomendados</h3>
<div style="overflow-x: auto;">
<table class="comparison-table">
<thead>
<tr>
<th>Security Group</th>
<th>Puerto</th>
<th>Origen</th>
<th>Descripcion</th>
</tr>
</thead>
<tbody>
<tr>
<td>ALB-SG</td>
<td>443 (HTTPS)</td>
<td>0.0.0.0/0</td>
<td>Trafico publico SSL</td>
</tr>
<tr>
<td>ALB-SG</td>
<td>80 (HTTP)</td>
<td>0.0.0.0/0</td>
<td>Redirect a HTTPS</td>
</tr>
<tr>
<td>EC2-SG</td>
<td>8069</td>
<td>ALB-SG</td>
<td>Solo von ALB</td>
</tr>
<tr>
<td>EC2-SG</td>
<td>22 (SSH)</td>
<td>Tu IP / Bastion</td>
<td>Administracion</td>
</tr>
<tr>
<td>RDS-SG</td>
<td>5432</td>
<td>EC2-SG</td>
<td>Solo von EC2</td>
</tr>
</tbody>
</table>
</div>
<h3>Checklist de Sicherheit</h3>
<ul>
<li><strong>IAM:</strong> Usar roles IAM en vez de access keys en EC2</li>
<li><strong>Encryption:</strong> Habilitar encriptacion en EBS y RDS (KMS)</li>
<li><strong>SSL/TLS:</strong> Usar ACM con ALB fuer certificados gestionados</li>
<li><strong>VPC:</strong> RDS y EC2 en subredes privadas sin IP publica</li>
<li><strong>WAF:</strong> Implementar AWS WAF en el ALB contra ataques web</li>
<li><strong>CloudTrail:</strong> Activar logging de todas las acciones API</li>
<li><strong>Secrets Manager:</strong> Almacenar credenciales de forma segura</li>
<li><strong>Updates:</strong> Automatizar parches con Systems Manager</li>
</ul>
</section>
<!-- Scalability Section -->
<section id="escalabilidad" class="content-section fade-in">
<h2>Escalabilidad y Auto Scaling</h2>
<p>Una de las mayores ventajas de AWS es la capacidad de escalar automaticamente segun la demanda. Para Odoo, esto significa poder manejar picos de carga sin ueberdimensionar la infraestructura base.</p>
<h3>Estrategias de Escalado</h3>
<h4>Escalado Vertical (Scale Up)</h4>
<p>Erhoehen recursos de una instancia existente. Util fuer RDS y EC2 cuando necesitas mas potencia rapidamente.</p>
<h4>Escalado Horizontal (Scale Out)</h4>
<p>Agregar mas instancias EC2 detras del ALB. Requiere configurar Odoo fuer sesiones compartidas (Redis).</p>
<div class="code-block">
<pre><span class="comment"># Configuracion Auto Scaling Group</span>
<span class="keyword">aws autoscaling create-auto-scaling-group</span> \
--auto-scaling-group-name odoo-asg \
--launch-template LaunchTemplateId=lt-xxx \
--min-size 2 \
--max-size 6 \
--desired-capacity 2 \
--vpc-zone-identifier "subnet-xxx,subnet-yyy" \
--target-group-arns arn:aws:elasticloadbalancing:xxx \
--health-check-type ELB \
--health-check-grace-period 300
<span class="comment"># Politica de escalado basada en CPU</span>
<span class="keyword">aws autoscaling put-scaling-policy</span> \
--auto-scaling-group-name odoo-asg \
--policy-name cpu-scale-out \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ASGAverageCPUUtilization"
},
"TargetValue": 70.0
}'</pre>
</div>
<div class="architecture-note">
<h4>Consideraciones fuer Odoo Multi-Instancia</h4>
<p>Para escalar Odoo horizontalmente necesitas:<br>
1. <strong>Redis/ElastiCache</strong> fuer sesiones compartidas<br>
2. <strong>S3 o EFS</strong> fuer el filestore compartido<br>
3. <strong>Sticky sessions</strong> en el ALB (recomendado)<br>
4. Sefuerr <strong>workers de cron</strong> en una instancia dedicada</p>
</div>
</section>
<!-- Pros and Cons -->
<section id="pros-cons" class="content-section fade-in">
<h2>Ventajas y Desventajas de AWS fuer Odoo</h2>
<div class="pros-cons">
<div class="pros">
<h4>Ventajas</h4>
<ul>
<li>Escalabilidad practicamente ilimitada</li>
<li>33 regiones globales disponibles</li>
<li>SLA del 99.99% de disponibilidad</li>
<li>Amplio ecoSystem de servicios integrados</li>
<li>Certificaciones de compliance (SOC, ISO, HIPAA, GDPR)</li>
<li>Herramientas de monitoring avanzadas (CloudWatch)</li>
<li>Backups automaticos y disaster recovery</li>
<li>Reserved Instances fuer ahorro a largo plazo</li>
<li>Integracion con servicios ML/AI (SageMaker)</li>
<li>Support Unternehmenrial 24/7 disponible</li>
</ul>
</div>
<div class="cons">
<h4>Desventajas</h4>
<ul>
<li>Curva de aprendizaje pronunciada</li>
<li>Kosten pueden escalar rapidamente</li>
<li>Requiere expertise tecnico DevOps</li>
<li>Facturacion compleja de entender</li>
<li>Support basico limitado (Zahlung extra)</li>
<li>Sin gestion especifica de Odoo</li>
<li>Actualizaciones de Odoo son manuales</li>
<li>Configuracion inicial compleja</li>
<li>Vendor lock-in potencial</li>
<li>Necesidad de monitorear Kosten constantemente</li>
</ul>
</div>
</div>
</section>
<!-- Comparison Chart -->
<section class="chart-section fade-in">
<h3>AWS vs Otras Opciones de Hosting Odoo</h3>
<p>Comfuertiva visual de AWS frente a otras alternativas populares de hosting fuer Odoo en diferentes dimensiones.</p>
<div class="chart-container" id="comparison-radar"></div>
</section>
<!-- CTA Banner -->
<section class="cta-banner fade-in">
<h3>Necesitas Ayuda con tu Despliegue AWS?</h3>
<p>Si prefieres una solucion gestionada sin la complejidad de AWS, Odoo4projects ofrece hosting especializado von 29EUR/mes con Support en espanol, IA integrada y migracion gratuita.</p>
<a href="https://odoo4projects.com" class="cta-btn" target="_blank" rel="noopener sponsored">Probar Hosting Gestionado</a>
</section>
<!-- FAQ Section -->
<section id="faq" class="faq-section fade-in">
<h2>Haeufig gestellte Fragen ueber AWS Hosting fuer Odoo</h2>
<div class="faq-item">
<div class="faq-question">Cuanto cuesta alojar Odoo en AWS mensualmente?</div>
<div class="faq-answer">El Kosten de Odoo en AWS varia segun la configuracion. Una instancia basica (t3.medium + RDS db.t3.micro) cuesta aproximadamente 50-80 EUR/mes. Para produccion Unternehmenrial con alta disponibilidad, los Kosten oscilan zwischen 200-500 EUR/mes dependiendo del trafico y Benutzer concurrentes.</div>
</div>
<div class="faq-item">
<div class="faq-question">Que instancia EC2 necesito fuer Odoo?</div>
<div class="faq-answer">Para Entwicklung/pruebas: t3.small (2 vCPU, 2GB RAM). Para produccion pequena (hasta 20 Benutzer): t3.medium (2 vCPU, 4GB RAM). Para produccion media (20-50 Benutzer): t3.large o m5.large. Para alta carga: m5.xlarge o superior con Auto Scaling configurado.</div>
</div>
<div class="faq-item">
<div class="faq-question">Debo usar RDS o instalar PostgreSQL en EC2?</div>
<div class="faq-answer">Recomendamos Amazon RDS fuer PostgreSQL en produccion. RDS ofrece backups automaticos, replicacion Multi-AZ, actualizaciones gestionadas y alta disponibilidad sin esfuerzo adicional. Instalar PostgreSQL en EC2 solo es recomendable fuer Entwicklung o si necesitas configuraciones muy especificas.</div>
</div>
<div class="faq-item">
<div class="faq-question">AWS es mejor que Odoo.sh fuer hosting?</div>
<div class="faq-answer">Depende de tus necesidades. AWS ofrece mayor control, escalabilidad y flexibilidad, ideal fuer Unternehmen con equipo tecnico. Odoo.sh es mas simple, con integracion nativa y actualizaciones automaticas, ideal fuer quienes prefieren gestion simplificada. AWS suele ser mas economico a escala, pero requiere mas expertise.</div>
</div>
<div class="faq-item">
<div class="faq-question">Como configuro SSL/HTTPS fuer Odoo en AWS?</div>
<div class="faq-answer">La forma mas sencilla es usar AWS Certificate Manager (ACM) con un Application Load Balancer (ALB). ACM proporciona certificados SSL gratuitos que se reneun automaticamente. Configura el ALB fuer terminar SSL y redirigir trafico HTTP a HTTPS. Alternativamente, puedes usar Let's Encrypt directamente en la instancia EC2.</div>
</div>
<div class="faq-item">
<div class="faq-question">Puedo usar el Free Tier de AWS fuer Odoo?</div>
<div class="faq-answer">Si, pero con limitaciones. El Free Tier incluye 750 horas de t2.micro (1 vCPU, 1GB RAM) que es insuficiente fuer produccion pero funciona fuer Entwicklung. Tambien incluye 750 horas de RDS db.t2.micro y 20GB de almacenamiento. Es ideal fuer pruebas iniciales durante los primeros 12 meses.</div>
</div>
<div class="faq-item">
<div class="faq-question">Como hago backup de Odoo en AWS?</div>
<div class="faq-answer">Implementa una estrategia de backup multicapa: 1) Snapshots automaticos de RDS (retencion 7-35 dias), 2) Snapshots de EBS fuer el filestore de Odoo, 3) AWS Backup fuer politicas centralizadas, 4) Opcional: replicacion cross-region fuer disaster recovery. Los backups de RDS permiten restauracion point-in-time.</div>
</div>
<div class="faq-item">
<div class="faq-question">Que region de AWS debo elegir fuer Odoo?</div>
<div class="faq-answer">Elige la region mas cercana a tus Benutzer fuer minimizar latencia. Para Espana: eu-south-2 (Espana) o eu-west-1 (Irlanda). Para LATAM: sa-east-1 (Sao Paulo) o us-east-1 (Virginia). Considera tambien requisitos de GDPR si manejas Daten de ciudadanos europeos, lo que requiere regiones innerhalb la UE.</div>
</div>
</section>
<!-- Related Articles -->
<section id="relacionados" class="content-section fade-in">
<h2>Articulos Relacionados</h2>
<div class="related-articles">
<a href="/de/odoo-hosting/mejor-hosting-odoo-2026/" class="related-card">
<div class="related-card-image">COMPARATIVA</div>
<div class="related-card-content">
<h4>Mejor Hosting Odoo 2026: Comfuertiva</h4>
<p>Comfuermos 15+ Lieferanten de hosting fuer Odoo</p>
</div>
</a>
<a href="/de/odoo-hosting/vps-hosting-odoo-servidor-virtual-2025/" class="related-card">
<div class="related-card-image">VPS</div>
<div class="related-card-content">
<h4>VPS fuer Odoo: Guia de Configuracion</h4>
<p>Configura tu propio Server virtual paso a paso</p>
</div>
</a>
<a href="/de/odoo-hosting/odoo-sh-hosting-oficial-plataforma-2025/" class="related-card">
<div class="related-card-image">ODOO.SH</div>
<div class="related-card-content">
<h4>Odoo.sh: Analisis Completo</h4>
<p>Todo ueber la plataforma oficial de Odoo</p>
</div>
</a>
<a href="/de/odoo-hosting/requisitos-hosting-odoo-servidor-2025/" class="related-card">
<div class="related-card-image">REQUISITOS</div>
<div class="related-card-content">
<h4>Requisitos Tecnicos fuer Odoo</h4>
<p>Especificaciones de Server recomendadas</p>
</div>
</a>
<a href="/de/odoo-hosting/precios-hosting-odoo-costos-2025/" class="related-card">
<div class="related-card-image">PRECIOS</div>
<div class="related-card-content">
<h4>Preise de Hosting Odoo</h4>
<p>Comfuertiva detallada de Kosten</p>
</div>
</a>
<a href="/de/odoo-hosting/hosting-odoo-espana-proveedores-2025/" class="related-card">
<div class="related-card-image">ES</div>
<div class="related-card-content">
<h4>Hosting Odoo en Espana</h4>
<p>Lieferanten locales con Support en espanol</p>
</div>
</a>
</div>
</section>
</main>
<!-- EEAT Author Section -->
<div id="eeat-section"></div>
<div id="footer"><footer class="site-footer"><div class="container"><div class="footer-cols"><div><strong>Odoo Expertos</strong></div><nav class="footer-nav"><a href="/de/">Start</a><a href="/de/odoo/">Odoo</a><a href="/de/odoo-ia/">Odoo KI</a><a href="/de/odoo-hosting/">Odoo Hosting</a><a href="/de/mapa-del-sitio/">Sitemap</a></nav></div><div class="footer-bottom"><small>&copy; 2026 Odoo Expertos</small></div></div></footer></div><nav class="footer-nav"><a href="/de/">Start</a><a href="/de/odoo/">Odoo</a><a href="/de/odoo-ia/">Odoo KI</a><a href="/de/odoo-hosting/">Odoo Hosting</a><a href="/de/mapa-del-sitio/">Sitemap</a></nav></div><div class="footer-bottom"><small>&copy; 2026 Odoo Expertos</small></div></div></footer></div>
<!-- Scripts -->
<script src="/js/language-router.js"></script>
<script src="/components/header.min.js"></script>
<script src="/components/footer.min.js"></script>
<script src="/components/eeat.min.js"></script>
<script src="/js/cookie-banner.min.js"></script>
<!-- D3.js -->
<script src="https://d3js.org/d3.v7.min.js"></script>
<script>
// Initialize components
// Scroll animation observer
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, { threshold: 0.1 });
document.querySelectorAll('.fade-in').forEach(el => observer.observe(el));
// FAQ Toggle
document.querySelectorAll('.faq-question').forEach(question => {
question.addEventListener('click', () => {
const item = question.parentElement;
item.classList.toggle('open');
});
});
// Tooltip
const tooltip = d3.select('body').append('div')
.attr('class', 'd3-tooltip')
.style('opacity', 0);
// AWS Color scheme
const awsColors = ['#FF9900', '#232F3E', '#00A1C9', '#7AA116', '#DD344C', '#8C4FFF'];
// Architecture Diagram Data
const architectureData = {
nodes: [
{ id: 'internet', label: 'Internet', type: 'external', x: 400, y: 30 },
{ id: 'route53', label: 'Route 53 (DNS)', type: 'aws', x: 400, y: 90 },
{ id: 'cloudfront', label: 'CloudFront (CDN)', type: 'aws', x: 400, y: 150 },
{ id: 'waf', label: 'AWS WAF', type: 'security', x: 250, y: 150 },
{ id: 'alb', label: 'Application Load Balancer', type: 'aws', x: 400, y: 220 },
{ id: 'acm', label: 'ACM (SSL)', type: 'security', x: 550, y: 220 },
{ id: 'ec2_1', label: 'EC2 Odoo (AZ-a)', type: 'compute', x: 300, y: 310 },
{ id: 'ec2_2', label: 'EC2 Odoo (AZ-b)', type: 'compute', x: 500, y: 310 },
{ id: 'rds_primary', label: 'RDS PostgreSQL (Primary)', type: 'database', x: 300, y: 400 },
{ id: 'rds_standby', label: 'RDS PostgreSQL (Standby)', type: 'database', x: 500, y: 400 },
{ id: 's3', label: 'S3 (Filestore/Backups)', type: 'storage', x: 650, y: 310 },
{ id: 'elasticache', label: 'ElastiCache Redis', type: 'cache', x: 150, y: 310 }
],
links: [
{ source: 'internet', target: 'route53' },
{ source: 'route53', target: 'cloudfront' },
{ source: 'cloudfront', target: 'alb' },
{ source: 'waf', target: 'alb' },
{ source: 'acm', target: 'alb' },
{ source: 'alb', target: 'ec2_1' },
{ source: 'alb', target: 'ec2_2' },
{ source: 'ec2_1', target: 'rds_primary' },
{ source: 'ec2_2', target: 'rds_primary' },
{ source: 'rds_primary', target: 'rds_standby' },
{ source: 'ec2_1', target: 's3' },
{ source: 'ec2_2', target: 's3' },
{ source: 'ec2_1', target: 'elasticache' },
{ source: 'ec2_2', target: 'elasticache' }
]
};
// Architecture Diagram
function renderArchitectureDiagram() {
const container = d3.select('#architecture-diagram');
if (container.empty()) return;
const width = container.node().getBoundingClientRect().width;
const height = 480;
container.html('');
const svg = container.append('svg')
.attr('width', width)
.attr('height', height);
const scale = Math.min(width / 800, 1);
const offsetX = (width - 800 * scale) / 2;
const g = svg.append('g')
.attr('transform', `translate(${offsetX}, 20) scale(${scale})`);
// Color mapping
const typeColors = {
external: '#888',
aws: '#FF9900',
security: '#DD344C',
compute: '#00A1C9',
database: '#7AA116',
storage: '#8C4FFF',
cache: '#232F3E'
};
// Draw links
architectureData.links.forEach((link, i) => {
const source = architectureData.nodes.find(n => n.id === link.source);
const target = architectureData.nodes.find(n => n.id === link.target);
g.append('line')
.attr('x1', source.x)
.attr('y1', source.y)
.attr('x2', source.x)
.attr('y2', source.y)
.attr('stroke', '#444')
.attr('stroke-width', 2)
.attr('stroke-dasharray', '5,3')
.transition()
.duration(800)
.delay(i * 50)
.attr('x2', target.x)
.attr('y2', target.y);
});
// Draw nodes
architectureData.nodes.forEach((node, i) => {
const nodeGroup = g.append('g')
.attr('transform', `translate(${node.x}, ${node.y})`)
.style('opacity', 0)
.style('cursor', 'pointer');
nodeGroup.append('rect')
.attr('x', -60)
.attr('y', -18)
.attr('width', 120)
.attr('height', 36)
.attr('rx', 6)
.attr('fill', typeColors[node.type])
.attr('fill-opacity', 0.2)
.attr('stroke', typeColors[node.type])
.attr('stroke-width', 2);
nodeGroup.append('text')
.attr('text-anchor', 'middle')
.attr('dominant-baseline', 'middle')
.attr('fill', '#e0e0e0')
.attr('font-size', '11px')
.attr('font-weight', '500')
.text(node.label.length > 18 ? node.label.substring(0, 18) + '...' : node.label);
nodeGroup.on('mouseover', function(event) {
d3.select(this).select('rect')
.attr('fill-opacity', 0.4)
.attr('stroke-width', 3);
tooltip.transition().duration(200).style('opacity', 1);
tooltip.html(`<strong>${node.label}</strong><br>Tipo: ${node.type}`)
.style('left', (event.pageX + 15) + 'px')
.style('top', (event.pageY - 28) + 'px');
})
.on('mouseout', function() {
d3.select(this).select('rect')
.attr('fill-opacity', 0.2)
.attr('stroke-width', 2);
tooltip.transition().duration(200).style('opacity', 0);
});
nodeGroup.transition()
.duration(500)
.delay(i * 80 + 300)
.style('opacity', 1);
});
// VPC boundary
g.insert('rect', ':first-child')
.attr('x', 100)
.attr('y', 180)
.attr('width', 600)
.attr('height', 260)
.attr('rx', 12)
.attr('fill', 'none')
.attr('stroke', '#FF9900')
.attr('stroke-width', 2)
.attr('stroke-dasharray', '10,5')
.attr('opacity', 0)
.transition()
.duration(1000)
.delay(800)
.attr('opacity', 0.5);
g.insert('text', ':first-child')
.attr('x', 110)
.attr('y', 195)
.attr('fill', '#FF9900')
.attr('font-size', '12px')
.attr('opacity', 0)
.text('VPC (10.0.0.0/16)')
.transition()
.duration(500)
.delay(1200)
.attr('opacity', 1);
}
// Cost Chart Data
const costData = [
{ scenario: 'Entwicklung', ec2: 15, rds: 15, storage: 5, alb: 0, other: 5, total: 40 },
{ scenario: 'PYME', ec2: 30, rds: 60, storage: 15, alb: 20, other: 15, total: 140 },
{ scenario: 'Mediana', ec2: 75, rds: 130, storage: 30, alb: 25, other: 25, total: 285 },
{ scenario: 'Enterprise', ec2: 150, rds: 260, storage: 50, alb: 35, other: 50, total: 545 },
{ scenario: 'HA Multi-AZ', ec2: 300, rds: 520, storage: 100, alb: 50, other: 100, total: 1070 }
];
// Cost Chart
function renderCostChart() {
const container = d3.select('#cost-chart');
if (container.empty()) return;
const width = container.node().getBoundingClientRect().width;
const height = 400;
const margin = { top: 40, right: 120, bottom: 60, left: 80 };
container.html('');
const svg = container.append('svg')
.attr('width', width)
.attr('height', height);
const categories = ['ec2', 'rds', 'storage', 'alb', 'other'];
const categoryLabels = { ec2: 'EC2', rds: 'RDS', storage: 'Storage', alb: 'ALB', other: 'Otros' };
const categoryColors = ['#FF9900', '#7AA116', '#8C4FFF', '#00A1C9', '#DD344C'];
const stackedData = d3.stack()
.keys(categories)(costData);
const xScale = d3.scaleBand()
.domain(costData.map(d => d.scenario))
.range([margin.left, width - margin.right])
.padding(0.3);
const yScale = d3.scaleLinear()
.domain([0, d3.max(costData, d => d.total) * 1.1])
.range([height - margin.bottom, margin.top]);
// Grid lines
svg.append('g')
.attr('class', 'grid')
.attr('transform', `translate(${margin.left}, 0)`)
.call(d3.axisLeft(yScale)
.tickSize(-(width - margin.left - margin.right))
.tickFormat(''))
.selectAll('line')
.attr('stroke', '#333');
// X Axis
svg.append('g')
.attr('transform', `translate(0, ${height - margin.bottom})`)
.call(d3.axisBottom(xScale))
.selectAll('text')
.attr('fill', '#b0b0b0')
.attr('font-size', '12px');
// Y Axis
svg.append('g')
.attr('transform', `translate(${margin.left}, 0)`)
.call(d3.axisLeft(yScale).tickFormat(d => d + 'EUR'))
.selectAll('text')
.attr('fill', '#b0b0b0');
// Stacked bars
stackedData.forEach((layer, layerIdx) => {
svg.selectAll(`.bar-${layerIdx}`)
.data(layer)
.join('rect')
.attr('class', `bar-${layerIdx}`)
.attr('x', d => xScale(d.data.scenario))
.attr('y', height - margin.bottom)
.attr('width', xScale.bandwidth())
.attr('height', 0)
.attr('fill', categoryColors[layerIdx])
.style('cursor', 'pointer')
.on('mouseover', function(event, d) {
d3.select(this).attr('opacity', 0.8);
const value = d[1] - d[0];
tooltip.transition().duration(200).style('opacity', 1);
tooltip.html(`<strong>${d.data.scenario}</strong><br>${categoryLabels[categories[layerIdx]]}: ${value}EUR<br>Total: ${d.data.total}EUR`)
.style('left', (event.pageX + 15) + 'px')
.style('top', (event.pageY - 28) + 'px');
})
.on('mouseout', function() {
d3.select(this).attr('opacity', 1);
tooltip.transition().duration(200).style('opacity', 0);
})
.transition()
.duration(800)
.delay((d, i) => i * 100 + layerIdx * 50)
.attr('y', d => yScale(d[1]))
.attr('height', d => yScale(d[0]) - yScale(d[1]));
});
// Total labels
svg.selectAll('.total-label')
.data(costData)
.join('text')
.attr('class', 'total-label')
.attr('x', d => xScale(d.scenario) + xScale.bandwidth() / 2)
.attr('y', d => yScale(d.total) - 8)
.attr('text-anchor', 'middle')
.attr('fill', '#FF9900')
.attr('font-size', '12px')
.attr('font-weight', '600')
.attr('opacity', 0)
.text(d => d.total + 'EUR')
.transition()
.duration(500)
.delay((d, i) => i * 100 + 600)
.attr('opacity', 1);
// Legend
const legend = svg.append('g')
.attr('transform', `translate(${width - margin.right + 10}, ${margin.top})`);
categories.forEach((cat, i) => {
const legendItem = legend.append('g')
.attr('transform', `translate(0, ${i * 25})`);
legendItem.append('rect')
.attr('width', 15)
.attr('height', 15)
.attr('fill', categoryColors[i])
.attr('rx', 3);
legendItem.append('text')
.attr('x', 22)
.attr('y', 12)
.attr('fill', '#b0b0b0')
.attr('font-size', '11px')
.text(categoryLabels[cat]);
});
}
// Radar comparison data
const radarData = {
categories: ['Escalabilidad', 'Control', 'Kosten', 'Facilidad', 'Support', 'Sicherheit'],
providers: [
{ name: 'AWS', values: [95, 90, 60, 50, 70, 95], color: '#FF9900' },
{ name: 'Odoo.sh', values: [75, 40, 50, 95, 90, 85], color: '#714B67' },
{ name: 'Odoo4projects', values: [70, 60, 90, 90, 95, 85], color: '#FF6B35' },
{ name: 'DigitalOcean', values: [80, 85, 80, 75, 65, 80], color: '#0080FF' }
]
};
// Radar Chart
function renderRadarChart() {
const container = d3.select('#comparison-radar');
if (container.empty()) return;
const width = container.node().getBoundingClientRect().width;
const height = 400;
const margin = 100;
const radius = Math.min(width, height) / 2 - margin;
container.html('');
const svg = container.append('svg')
.attr('width', width)
.attr('height', height)
.append('g')
.attr('transform', `translate(${width/2}, ${height/2})`);
const categories = radarData.categories;
const angleSlice = Math.PI * 2 / categories.length;
const rScale = d3.scaleLinear()
.domain([0, 100])
.range([0, radius]);
// Grid circles
const levels = 5;
for (let i = 1; i <= levels; i++) {
svg.append('circle')
.attr('r', radius * i / levels)
.attr('fill', 'none')
.attr('stroke', '#3a3a3a')
.attr('stroke-dasharray', '4,4');
svg.append('text')
.attr('x', 5)
.attr('y', -radius * i / levels)
.attr('fill', '#666')
.attr('font-size', '10px')
.text(i * 20);
}
// Axis lines and labels
categories.forEach((cat, i) => {
const angle = angleSlice * i - Math.PI / 2;
svg.append('line')
.attr('x1', 0)
.attr('y1', 0)
.attr('x2', radius * Math.cos(angle))
.attr('y2', radius * Math.sin(angle))
.attr('stroke', '#444');
const labelRadius = radius + 25;
svg.append('text')
.attr('x', labelRadius * Math.cos(angle))
.attr('y', labelRadius * Math.sin(angle))
.attr('text-anchor', 'middle')
.attr('dominant-baseline', 'middle')
.attr('fill', '#b0b0b0')
.attr('font-size', '11px')
.text(cat);
});
// Radar areas
const radarLine = d3.lineRadial()
.radius(d => rScale(d))
.angle((d, i) => angleSlice * i)
.curve(d3.curveLinearClosed);
radarData.providers.forEach((provider, idx) => {
const path = svg.append('path')
.datum(provider.values)
.attr('d', radarLine)
.attr('fill', provider.color)
.attr('fill-opacity', 0)
.attr('stroke', provider.color)
.attr('stroke-width', 2)
.attr('stroke-opacity', 0);
path.transition()
.duration(800)
.delay(idx * 200)
.attr('fill-opacity', 0.15)
.attr('stroke-opacity', 1);
// Data points
provider.values.forEach((val, i) => {
const angle = angleSlice * i - Math.PI / 2;
svg.append('circle')
.attr('cx', rScale(val) * Math.cos(angle))
.attr('cy', rScale(val) * Math.sin(angle))
.attr('r', 0)
.attr('fill', provider.color)
.transition()
.duration(500)
.delay(idx * 200 + i * 50)
.attr('r', 4);
});
});
// Legend
const legendX = width > 600 ? radius + 50 : -radius;
const legendY = width > 600 ? -radius + 20 : radius + 30;
radarData.providers.forEach((provider, idx) => {
const g = svg.append('g')
.attr('transform', `translate(${legendX}, ${legendY + idx * 25})`);
g.append('rect')
.attr('width', 15)
.attr('height', 15)
.attr('fill', provider.color)
.attr('rx', 3);
g.append('text')
.attr('x', 22)
.attr('y', 12)
.attr('fill', '#b0b0b0')
.attr('font-size', '11px')
.text(provider.name);
});
}
// Initialize charts when visible
const chartObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const id = entry.target.id;
setTimeout(() => {
if (id === 'architecture-diagram') renderArchitectureDiagram();
if (id === 'cost-chart') renderCostChart();
if (id === 'comparison-radar') renderRadarChart();
}, 100);
chartObserver.unobserve(entry.target);
}
});
}, { threshold: 0.15 });
document.querySelectorAll('.chart-container').forEach(el => chartObserver.observe(el));
// Resize handler
let resizeTimeout;
window.addEventListener('resize', () => {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(() => {
renderArchitectureDiagram();
renderCostChart();
renderRadarChart();
}, 300);
});
</script>
</body>
</html>