Introducción
Microsoft Azure ofrece múltiples opciones de bases de datos relacionales completamente administradas que ayudan a las organizaciones a enfocarse en el desarrollo de aplicaciones, en lugar de invertir tiempo en la administración de servidores y la infraestructura. En este artículo, exploraremos detalladamente cómo aprovisionar y configurar servicios de bases de datos relacionales en Azure, abarcando Azure SQL Database, Azure SQL Managed Instance, Azure Database for MySQL, Azure Database for PostgreSQL, y Azure Database for MariaDB. Además, mostraremos tablas comparativas y ejemplos para ilustrar cada paso.
1. Opciones de Bases de Datos Relacionales en Azure
Azure cuenta con varias ofertas de bases de datos relacionales. A continuación, se presenta una tabla comparativa de las principales características de cada servicio:
Servicio | Tipo de Motor | Casos de Uso Principales | Modelo de Precios | Nivel de Compatibilidad |
---|---|---|---|---|
Azure SQL Database | SQL Server (Última versión) | - Aplicaciones cloud nativas- Microservicios- SaaS | - DTU o vCore- Opción Serverless | Compatibilidad con SQL Server (base de datos) |
Azure SQL Managed Instance | SQL Server (Última versión) | - Migraciones lift-and-shift- Necesidad de funcionalidades de instancia (SQL Agent, etc.) | - vCore | Alta compatibilidad a nivel de instancia |
Azure Database for MySQL | MySQL (Comunidad) | - Aplicaciones LAMP- WordPress, Drupal, Magento | - Básico- General Purpose- Memory Optimized | Compatible con MySQL |
Azure Database for PostgreSQL | PostgreSQL (Comunidad) | - Aplicaciones empresariales- Análisis geoespacial (PostGIS) | - Básico- General Purpose- Memory Optimized | Compatible con PostgreSQL |
Azure Database for MariaDB | MariaDB (Comunidad) | - Sustitución de MySQL- Aplicaciones Open Source | - Básico- General Purpose- Memory Optimized | Compatible con MariaDB |
SQL Server en Máquinas Virtuales | SQL Server en IaaS (VM de Azure) | - Control total del sistema operativo- Software personalizado | - Pago por hora- Bring Your Own License (BYOL) | 100% compatibilidad con SQL Server on-premises |
Nota: Elegir la opción adecuada depende del nivel de compatibilidad necesario, el tipo de aplicación, los requisitos de rendimiento y el presupuesto disponible.
2. Aprovisionamiento de Bases de Datos Relacionales
2.1 Pasos Generales de Aprovisionamiento
- Crear o seleccionar un Grupo de Recursos (Resource Group)
Es recomendable agrupar recursos que comparten el mismo ciclo de vida y permisos. - Elegir el Servicio de Base de Datos
Seleccionar si usarás Azure SQL Database, SQL Managed Instance, o alguna de las opciones de bases de datos Open Source (MySQL, PostgreSQL, MariaDB). - Configurar los Detalles Principales
- Nombre del servidor (ej.
mi-servidor.mysql.database.azure.com
) - Usuario administrador y contraseña
- Región (importante para la latencia y la soberanía de datos)
- Nivel de precio y escalado (Básico, General Purpose, vCore, DTU, etc.)
- Nombre del servidor (ej.
- Ajustar la Red y la Seguridad
- Definir si el servidor tendrá un endpoint público o un endpoint privado (Azure Private Endpoint).
- Configurar reglas de firewall o de acceso por IP.
- (Opcional) Habilitar Azure Active Directory para la autenticación.
- Revisar y Crear
- Confirmar configuración, costos estimados y crear la instancia.
┌─────────────────────────────┐
│ Iniciar Aprovisionamiento │
└─────────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ Seleccionar Grupo de Recursos │
└───────────────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ Elegir Tipo de Base de Datos │
│ (SQL, MySQL, etc.) │
└───────────────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ Configurar Nivel de Precio │
│ (DTU, vCore, Tiers, etc.) │
└───────────────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ Ajustar Seguridad y Networking │
│ (Firewall, Endpoint Privado) │
└───────────────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ Crear la Instancia │
└───────────────────────────────────┘
2.2 Configuración Específica por Servicio
2.2.1 Azure SQL Database
- Opciones de Computo:
- DTU (Basic, Standard, Premium)
- vCore (General Purpose, Business Critical, Hyperscale)
- Serverless (escalado automático)
- Característica Clave: Se maneja como una base de datos única, ideal para aplicaciones basadas en microservicios o SaaS.
2.2.2 Azure SQL Managed Instance
- Requiere integración con una VNet (Virtual Network).
- Ofrece SQL Agent, cross-database queries, soporte para CLR y más.
- Especialmente útil para migraciones de SQL Server on-premises con dependencias a nivel de instancia.
2.2.3 Azure Database for MySQL/PostgreSQL/MariaDB
- Tiers: Básico, General Purpose, Memory Optimized.
- Permite configurar read replicas (en PostgreSQL y MySQL) para escalado de lectura.
- Alta disponibilidad y backups automáticos incorporados.
3. Configuración y Seguridad
3.1 Autenticación
- SQL Authentication / Username-Password
- Azure Active Directory (para bases de datos SQL)
- Para MySQL/PostgreSQL/MariaDB, se usa la autenticación de usuario nativa del motor.
3.2 Firewall y Redes
- Firewall a nivel de servidor: Permite o bloquea rangos de IP.
- Virtual Network (VNet) y Private Endpoint: Restringe el acceso a nivel interno sin exponer la base de datos a Internet pública.
3.3 Cifrado de Datos
- Transparente en reposo (TDE) para Azure SQL.
- Encriptación en tránsito mediante SSL/TLS para MySQL/PostgreSQL/MariaDB.
3.4 Backup y Recuperación
- Backups automáticos con retención configurable (hasta 35 días en la mayoría de los casos).
- Restauración a un punto en el tiempo (PITR).
- Geo-Redundancia (depende del nivel de servicio) para planes de recuperación ante desastres (DR).
4. Rendimiento y Escalado
4.1 Métricas de Rendimiento
- DTU (Database Transaction Unit) en Azure SQL Database (modelo antiguo).
- vCore: Permite definir núcleos virtuales y memoria (General Purpose o Memory Optimized).
4.2 Opciones de Escalado
- Escalado vertical: Aumentar vCores, DTUs o cambiar el tier (Básico → General Purpose → Premium).
- Escalado horizontal: Usar réplicas de lectura (en MySQL/PostgreSQL) o Azure SQL Database con geo-replicación para lecturas.
4.3 Buenas Prácticas de Optimización
- Índices adecuados para tus tablas y queries críticos.
- Query Performance Insight en Azure SQL Database para identificar consultas de alto consumo.
- Caching a nivel de aplicación para reducir llamadas innecesarias a la base de datos.
5. Monitoreo y Alertas
Herramienta | Descripción |
---|---|
Azure Monitor | Consolida métricas (CPU, memoria, IOPS) y registros de todos los servicios Azure. |
Query Performance Insight (SQL) | Identifica las consultas con mayor consumo de DTU o vCore, y su tiempo de ejecución. |
Azure Metrics y Logs | Alertas basadas en umbrales (p.ej., CPU > 80%). |
Integración con terceros (Datadog) | Soporta complementos y exportación de logs para herramientas externas. |
Tip: Configura alertas tempranas para CPU alta o conexiones fallidas, lo que ayuda a tomar acciones proactivas.
6. Migración de Datos
- Azure Database Migration Service (DMS): Para migraciones a gran escala con mínima interrupción.
- Data Migration Assistant (DMA): Evalúa compatibilidad y migra bases de datos SQL en menor escala.
- Import/Export usando BACPAC o herramientas nativas (pg_dump, mysqldump) para volúmenes más pequeños.
7. Mejores Prácticas
- Seguridad
- Usa Private Endpoints para mitigar riesgos.
- Activa SSL/TLS siempre que sea posible.
- Monitorea e implementa actualizaciones de seguridad.
- Diseño para Alta Disponibilidad
- Configura réplicas o geo-replicación.
- Elige regiones emparejadas para planes de DR.
- Automatización
- Utiliza Azure Resource Manager (ARM) templates o Bicep para despliegues repetibles.
- Integra con Azure DevOps o GitHub Actions para CI/CD.
- Escalabilidad Proactiva
- Revisa métricas de uso para ajustar tus capas de servicio o vCores antes de que se produzcan cuellos de botella.
- Cost Management
- Activa alertas de costo.
- Analiza la opción Serverless (para Azure SQL Database) si tu carga de trabajo es intermitente.
8. Ejemplo de Script ARM (Referencia)
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"serverName": {
"type": "string",
"metadata": {
"description": "Nombre del servidor."
}
},
"administratorLogin": {
"type": "string",
"metadata": {
"description": "Nombre de usuario administrador."
}
},
"administratorLoginPassword": {
"type": "secureString",
"metadata": {
"description": "Contraseña del administrador."
}
},
"databaseName": {
"type": "string",
"metadata": {
"description": "Nombre de la base de datos."
}
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2021-02-01-preview",
"name": "[parameters('serverName')]",
"location": "[resourceGroup().location]",
"properties": {
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]",
"minimalTlsVersion": "1.2"
},
"resources": [
{
"type": "databases",
"apiVersion": "2021-02-01-preview",
"name": "[parameters('databaseName')]",
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', parameters('serverName'))]"
],
"properties": {
"collation": "SQL_Latin1_General_CP1_CI_AS"
}
}
]
}
]
}
Esta plantilla JSON es un ejemplo básico de cómo aprovisionar un servidor y una base de datos de Azure SQL, que luego puedes mejorar para incluir configuración de precios, firewall, private endpoints, etc.
Conclusión
Aprovisionar y configurar servicios de bases de datos relacionales en Azure es un proceso sencillo, pero también muy poderoso y flexible. Con las opciones de Azure SQL Database, Azure SQL Managed Instance, Azure Database for MySQL, Azure Database for PostgreSQL y Azure Database for MariaDB, puedes construir soluciones escalables, seguras y de alto rendimiento sin la carga de administrar la infraestructura subyacente.
Puntos Clave:
- Elige la opción de base de datos basada en la compatibilidad y funcionalidades requeridas (SQL Agent, cross-database queries, etc.).
- Configura siempre la seguridad desde el principio (firewall, endpoints privados, autenticación).
- Supervisa y escala conforme crezca tu aplicación.
- Automatiza las implementaciones con ARM, Bicep y Azure DevOps.
Recursos Adicionales
- Documentación oficial de Azure SQL Database (Microsoft)
- Documentación de Azure Database for MySQL
- Documentación de Azure Database for PostgreSQL
- Documentación de Azure Database Migration Service
Si te ha gustado este artículo, ¡compártelo y suscríbete para recibir más contenidos sobre arquitectura de datos en la nube y mejores prácticas en Azure!
¿Tienes dudas o experiencias que compartir?
¡Déjanos un comentario y conversemos sobre tus proyectos en la nube!