Comparteix via


Introducción a la migración de Heroku a Azure Container Apps

Si va a pasar de Heroku a Azure Container Apps, esta guía le ayuda a planear la migración mediante la asignación de los conceptos de Heroku que ya conoce a sus equivalentes de Azure. Use este artículo para evaluar el ámbito de la migración, identificar los servicios de Azure que necesita y evitar problemas comunes antes de empezar.

Para conocer los procedimientos de migración paso a paso, consulte Migración de una aplicación de Heroku a Azure Container Apps.

Mapa conceptual

En la tabla siguiente se asignan las características principales de la plataforma Heroku a sus equivalentes de Azure Container Apps.

Concepto de Heroku Equivalente a Azure Container Apps Notas
Aplicación (web dyno) Aplicación de contenedor Una sola unidad implementable que ejecuta el código de la aplicación.
Tipos de Dyno + escalado manual Escalado automático basado en KEDA Escalado automático basado en reglas que incluye la escala a cero. Reemplaza la gestión manual del conteo de dinamos.
Buildpacks (compilación de slug) Imágenes de contenedor o paquetes de compilación nativos en la nube Use az containerapp up --source para una experiencia similar a buildpack o trae tu propio Dockerfile.
Variables de configuración Variables de entorno + Azure Key Vault Los valores no sensibles usan variables de entorno. Los secretos utilizan referencias de Key Vault o secretos de Container Apps.
Extensiones (Postgres, Redis, etc.) Servicios administrados de Azure Consulte Equivalentes de servicio para obtener un mapeo completo.
heroku CLI az containerapp CLI La CLI de Azure con la containerapp extensión proporciona comandos de administración equivalentes.
Heroku Pipelines / Aplicaciones de Revisión Acciones de GitHub o Azure Pipelines Tuberías de CI/CD que usted configura y posee.
Dynos de uso único (heroku run) Trabajos de Container Apps Ejecución a demanda o programada sin necesidad de una aplicación de larga duración.
Procfile (tipos de proceso) Aplicaciones de contenedores separadas por tipo de proceso Implemente los procesos web y de trabajo como aplicaciones de contenedor independientes en el mismo entorno.
Dominio personalizado + ACM Dominio personalizado + certificado administrado gratuito Los certificados administrados son gratuitos y se actualizan automáticamente.

Equivalentes de servicio

Al migrar desde Heroku, reemplace los complementos de Heroku por los servicios administrados de Azure. En la siguiente tabla se mapean los complementos comunes a sus equivalentes de Azure.

Complemento de Heroku Equivalente de Azure Complejidad de la migración
Heroku Postgres Azure Database for PostgreSQL: servidor flexible Medio: requiere la exportación y restauración de datos.
Heroku Redis Azure Cache for Redis Bajo: normalmente no se necesita ninguna migración de datos (solo uso de caché).
Heroku Scheduler Trabajos de Container Apps (tipo programado) Bajo: vuelva a crear expresiones cron como programaciones de trabajo.
Papertrail/Logentries Azure Monitor + Log Analytics Bajo: el registro está integrado en Container Apps.
Nueva reliquia Azur Application Insights Medio: requiere cambios en el SDK o la instrumentación automática.
SendGrid SendGrid a través de Azure Marketplace o Azure Communication Services Bajo: SendGrid sigue funcionando desde Azure; actualiza solo los detalles de conexión.
CloudAMQP (RabbitMQ) Azure Service Bus Alta — API de mensajería diferente; requiere cambios de código.
Heroku Kafka Azure Event Hubs (punto de conexión compatible con Kafka) Bajo: Event Hubs admite directamente el protocolo Kafka.
Complementos Bucketeer / S3 Azure Blob Storage Medio: requiere cambios de SDK o API para las operaciones de archivo.
Memcachier Azure Cache for Redis Bajo: Redis admite protocolos compatibles con memcache.
Heroku Connect (Salesforce) Azure Logic Apps o Power Automate Alto: enfoque de integración diferente; requiere rediseño del flujo de trabajo.

Para cada complemento de la aplicación Heroku, siga este patrón general:

  1. Aprovisione el servicio equivalente de Azure.
  2. Migre los datos persistentes (bases de datos, almacenamiento).
  3. Actualice las cadenas de conexión y las credenciales en las variables de entorno de Container App.
  4. Valide la integración antes de quitar el complemento Heroku.

Comparación de escalabilidad

Heroku usa un modelo de dyno fijo donde se establece un recuento de instancias específico. Azure Container Apps usa el escalado automático basado en reglas con tecnología KEDA, que ajusta las réplicas en función de la demanda.

Capacidad Heroku Azure Container Apps (Aplicaciones de Contenedores de Azure)
Mecanismo de escala Recuento manual de dinamómetro Escalado automático basado en reglas (HTTP, CPU, longitud de cola, cron, personalizado)
Escala a cero No disponible Admitido: sin coste cuando está inactivo
Instancias mínimas Se requiere al menos 1 dyno Configurables: 0 o más réplicas
Número máximo de instancias Dependiente del plan Hasta 300 réplicas por aplicación de contenedores
Desencadenadores de escalado Ninguno - manual únicamente Simultaneidad HTTP, conexiones TCP, CPU, memoria, Cola de Azure, escaladores KEDA personalizados

Conceptos clave de escalado

  • min-replicas: 0 habilita la escala a cero cuando no hay tráfico presente, lo que elimina el costo de las aplicaciones inactivas.
  • max-replicas limita el número de instancias para controlar los costos. Comience de forma conservadora y ajuste en función de los datos de supervisión.
  • El escalado de simultaneidad HTTP es el punto de partida más sencillo para las aplicaciones web. Agrega réplicas cuando las solicitudes simultáneas por instancia superan el umbral.
  • El escalado basado en cola es ideal para los procesos de trabajo. Implemente trabajadores como aplicaciones de contenedor independientes que se escalan en función de la profundidad de la cola.

Sugerencia

Para las aplicaciones de producción que siempre deben estar listas, establezca el valor en min-replicas1. Para entornos de desarrollo y ensayo, use min-replicas: 0 para ahorrar costos.

Comparación de costos

Escenario Heroku (Standard-1X) Azure Container Apps (Consumo)
Aplicación inactiva (24/7) ~ 25 USD al mes por dyno 0 € (escalado a cero)
Aplicación de tráfico bajo ~ 25 USD al mes por dyno ~ $1–5/mes
Aplicación de alto tráfico (10 instancias) ~ 250 USD al mes Varía según el uso real de cpu y memoria.
Concesión gratuita mensual Ninguno 180 000 vCPU-seconds + 2 millones de solicitudes

Para obtener precios detallados, consulte Precios de Azure Container Apps.

Trabajadores y trabajos en segundo plano

Si su aplicación Heroku utiliza dynos de trabajador (definidos en un Procfile), despliegue cada tipo de dyno como una aplicación de contenedor independiente en el mismo entorno. Use el escalado basado en cola en lugar de un recuento fijo de instancias.

Patrón Heroku Patrón de Apps de Contenedores de Azure
web tipo de proceso Aplicación contenedora con escalado basado en HTTP y entrada HTTP
worker tipo de proceso Aplicación en contenedor (sin acceso externo) con escalado basado en colas
Tareas programadas (Heroku Scheduler) Trabajo de Container Apps con una programación cron
Tareas puntuales (heroku run) Trabajo de Aplicaciones de Contenedores con desencadenador manual

Dificultades habituales

Revise estos problemas comunes antes y durante la migración para evitar retrasos.

Problema Síntoma Resolución
Variable de entorno PORT La aplicación no responde a las solicitudes. Container Apps establece una PORT variable y espera que la aplicación la escuche. Si codifica un puerto, establezca --target-port para que coincida al crear la aplicación de contenedor. La mayoría de las aplicaciones Heroku ya leen PORT desde el entorno y funcionan sin cambios.
Sistema de archivos efímero Los archivos escritos en tiempo de ejecución desaparecen después de reiniciarse. Al igual que Heroku, Container Apps usa un sistema de archivos efímero. En el caso de los archivos persistentes, monte un recurso compartido de Azure Files.
Error de configuración de escalamiento Costos inesperados o un rendimiento deficiente bajo carga. Comience con el escalado de simultaneidad HTTP para aplicaciones web y supervise con Azure Monitor. Evite establecer max-replicas demasiado alto antes de comprender el consumo de recursos de la aplicación.
Paridad del entorno Desfase de configuración entre desarrollo, ensayo y producción. Use la infraestructura como código (Bicep o Terraform) para mantener los entornos coherentes. Este enfoque reemplaza la consistencia proporcionada por las Heroku Pipelines.
Servicios de terceros Trabajo de migración innecesario para complementos de SaaS. Muchos complementos de Heroku son productos SaaS independientes (SendGrid, MongoDB Atlas, Elasticsearch). Estos servicios suelen seguir funcionando desde Container Apps: actualice solo la dirección URL de conexión. Solo los servicios administrados por Heroku (Heroku Postgres, Heroku Redis, Heroku Kafka) requieren la migración a equivalentes de Azure.
Disponibilidad de la compilación en la nube az containerapp up --source falla con ManagedEnvironmentNotFound, o errores del constructor. Cloud Build no está disponible en todas las regiones ni para todas las pilas de lenguajes. Vuelva al enfoque basado en ACR: cree un Dockerfile, compile con az acr builde implemente la imagen. Consulte Migración de una aplicación desde Heroku para ambos enfoques.
Orden de secretos y variables de entorno Las variables de entorno que hacen referencia a secretos se resuelven como vacías. Establezca secretos con az containerapp secret setantes de hacer referencia a ellos en variables de entorno. Tenga en cuenta también que la mera configuración de secretos no reinicia la aplicación; debe az containerapp update crear una nueva revisión.
Tiempos de aprovisionamiento de servicios de Azure La migración tarda más de lo esperado. Los servicios administrados de Azure tardan más en aprovisionarse que los complementos de Heroku. Azure Cache for Redis puede tardar entre 10 y 20 minutos; Azure Database for PostgreSQL puede tardar entre 5 y 10 minutos. Aprovisione estos servicios en paralelo durante la implementación de la aplicación.

Paso siguiente