Migración de cargas de trabajo de Linux y PostgreSQL

Completado

Este módulo le guía a través de la migración de una carga de trabajo existente desde un entorno local o en la nube a Azure. Abarca la migración del proceso a una máquina virtual (VM) de Azure y los datos a Azure Database for PostgreSQL. La aplicación es un ejemplo independiente de la nube que es un soporte técnico para cualquier aplicación real preparada para la migración a la nube.

En esta unidad, explorará el valor de realizar las siguientes transiciones con la ventaja de un conjunto completo de controles de seguridad e identidad que proporciona Azure:

  • Cambio de un entorno autohospedado (por ejemplo, una base de datos autoadministrada) a una oferta de base de datos totalmente administrada
  • Cambio de proceso sin sistema operativo a máquinas virtuales hospedadas en la nube

También explorará las ventajas de administrar recursos en la nube desde una perspectiva de costos y rendimiento. Además, aprenderá a calcular y administrar los costos antes y después de la implementación, junto con cómo optimizar el rendimiento desde una perspectiva de proceso y datos.

Carga de trabajo y datos

Nuestra carga de trabajo es una aplicación escrita en Go y que funciona con datos dentro de PostgreSQL. Nuestros datos son un conjunto de datos abierto que le permite explorar la eficacia de la plataforma Postgres y las extensiones relacionadas.

Aunque esta aplicación podría ejecutarse fácilmente dentro de un contenedor, las partes interesadas optaron por no hacerlo en esta fase. La creación de un contenedor, la implementación en una plataforma de contenedor o el uso de la orquestación de contenedores están actualmente fuera del ámbito. Pero la migración a contenedores podría ser un paso futuro lógico.

El repositorio de GitHub asociado a este módulo proporciona una aplicación y los datos relacionados. Aprenderá a preparar la aplicación y exportar los datos para llegar a un estado similar a esta aplicación de ejemplo. También puede usar la aplicación de ejemplo como plantilla para una implementación de greenfield.

¿Cuál es el valor de migrar esta carga de trabajo?

Es posible que se pregunte por las ventajas de migrar esta carga de trabajo a la nube. Estas son algunas de las propuestas de valor.

Seguridad y cumplimiento normativo

Al incorporar cargas de trabajo de proceso y datos a la nube, se benefician de una mayor funcionalidad de seguridad.

Las máquinas virtuales de Azure se benefician de una amplia gama de características de seguridad y cumplimiento, como firewalls, redes virtuales, acceso a máquinas virtuales Just-In-Time, cifrado, control de acceso basado en rol (RBAC) y computación confidencial. Azure Database for PostgreSQL admite muchas características similares, como el cifrado con claves administradas por el cliente, certificaciones de cumplimiento y compatibilidad con Microsoft Defender for Cloud.

Seguridad de las conexiones entre las máquinas virtuales y las bases de datos

A medida que integra una máquina virtual con Azure Database for PostgreSQL, es fundamental que se puedan conectar entre sí de una manera segura que reduzca el riesgo de pérdida de datos.

La autenticación de Microsoft Entra permite conectarse a Azure Database for PostgreSQL sin contraseñas tradicionales. En su lugar, usará identidades de Microsoft Entra para la carga de trabajo de la aplicación (es decir, identidades administradas), usuarios y administradores a través de sus cuentas de usuario de Microsoft Entra. Este enfoque mitiga el riesgo de que las credenciales de larga duración se vean comprometidas y permitan que los actores incorrectos accedan a los datos.

Microsoft Entra ID, identidades administradas y RBAC específico pueden permitir que la carga de trabajo de la aplicación acceda a datos y administre recursos de forma segura en Azure siguiendo el principio de privilegios mínimos.

Acceso a un proceso rentable y de alto rendimiento en varias regiones

Tanto si necesita un proceso rentable para desarrollo y pruebas como para los tipos de proceso más recientes, de mayor rendimiento o más grandes disponibles en la nube, Azure tiene una amplia selección de opciones de proceso para máquinas virtuales y Azure Database for PostgreSQL. Puede escalar verticalmente y reducir verticalmente estas opciones según sea necesario, y están disponibles en más de 60 regiones de Azure.

Puede escalar el proceso tanto vertical como horizontalmente, incluidas las réplicas de base de datos y las opciones distribuidas , como Azure Cosmos DB para PostgreSQL. Azure Cosmos DB for PostgreSQL es un servicio administrado para PostgreSQL ampliado con la superpotencia del código abierto de Citus de tablas distribuidas. Este proceso se empareja con algunas de las opciones de almacenamiento en la nube más rápidas para adaptar los requisitos de E/S de proceso y almacenamiento a la carga de trabajo.

Administración de costos y rentabilidad

Puede optimizar la administración de costos y la rentabilidad en los lados de Linux y PostgreSQL. En comparación con las soluciones locales, el costo a menudo puede ser más adaptado y adecuado para su situación. Puede ajustar el tamaño adecuado del proceso en comparación con una solución local. También puede administrar fácilmente toda la flota para optimizar solo el proceso y el almacenamiento que necesita y pagar solo por lo que usa, en un modelo de facturación de utilidad.

La facturación de la utilidad permite a los clientes controlar períodos de alta demanda sin tener que pagar el costo de sobreaprovisionamiento. Permite la migración a generaciones de proceso más rápidas y eficientes a medida que están disponibles.

Los clientes también pueden aprovechar las ventajas híbridas de Azure para ahorrar en los costos de licencia de distribuciones específicas de Linux. Para más información, consulte Ventaja híbrida de Azure para máquinas virtuales de Red Hat Enterprise Linux (RHEL) y SUSE Linux Enterprise Server (SLES).

Los clientes también pueden reducir los costos (hasta un 72 % en comparación con los precios de pago por uso) con términos de un año o tres años para máquinas virtuales e instancias reservadas de máquina virtual de Azure. Para más información, consulte Cómo se aplica el descuento por reserva de Azure a las máquinas virtuales. Los precios de Azure son transparentes y predecibles, y puede usar la calculadora de precios de Azure para calcular los costos antes de realizar la implementación.

Operaciones del día 2

Las operaciones del día 2 para las aplicaciones implementadas (como la evaluación de prioridades, la supervisión, la aplicación de revisiones de seguridad, las copias de seguridad y la recuperación ante desastres) son más eficaces a través de la automatización y la capacidad de actualizar con un tiempo de inactividad potencialmente cero. Además, puede administrar la infraestructura de un extremo a otro con cadenas de herramientas estándar del sector.

Antes de empezar

Este módulo está diseñado para ayudarle a migrar una carga de trabajo de Linux y PostgreSQL existente a Azure. Sin embargo, no se centra en cómo exportar los datos de la base de datos de origen ni cómo preparar la aplicación para la migración. Una razón para este enfoque es que hay muchos tipos de bases de datos y aplicaciones de origen que se pueden migrar, y el proceso de cada tipo es único.

Este módulo proporciona una aplicación de ejemplo, datos de Postgres, archivos binarios e infraestructura como código que puede usar para simular el proceso de migración. Después de completar la migración simulada, puede usar el conocimiento que obtuvo para aplicar los mismos principios a su propia carga de trabajo.

Puede utilizar la aplicación de ejemplo, Azure-Samples/tailwind-traders-go, como un sustituto del código de la aplicación que será migrado. La infraestructura de Bicep como código, los datos de ejemplo de Postgres y los datos binarios, junto con otros recursos para soportar la parte práctica de este módulo, están disponibles en el repositorio de GitHub Azure-Samples/linux-postgres-migration.

Para aplicar este enfoque a su propia carga de trabajo, debe asignar la aplicación de origen y los datos a la estructura siguiente.

Código de aplicación

Debe almacenar el código de la aplicación en el control de código fuente, preferiblemente un repositorio en GitHub.

La migración de este módulo muestra el escenario más sencillo de clonar el repositorio directamente en la máquina virtual de Azure. En un escenario real, es probable que tenga una canalización de implementación más compleja, como Acciones de GitHub, que compile e implemente el código de la aplicación en los recursos de proceso.

Datos de Postgres

Debe almacenar los datos de Postgres en un .sql archivo que puede usar para crear el esquema de la base de datos e insertar los datos. En esta migración simulada, se usa un archivo de datos de ejemplo, tailwind.sql, dentro del repositorio Azure-Samples/linux-postgres-migration. Copie el archivo en Azure Blob Storage y después impórtelo en Azure Database for PostgreSQL.

Cuando llegue el momento de migrar sus propios datos, exporte los datos de la base de datos de origen y guárdelo en un archivo .sql. A continuación, copie el archivo en Blob Storage como se describe en este módulo.

Archivos binarios

La mayoría de las aplicaciones tienen otros archivos binarios, como archivos multimedia, que deben migrarse. Para la aplicación de ejemplo, aprenderá a migrar imágenes copiandolas de Azure-Samples/linux-postgres-migration a Blob Storage.

Del mismo modo, debe copiar los archivos binarios en Blob Storage al migrar su propia carga de trabajo. En este caso, la computación es sin estado, y la aplicación tiene permiso para acceder a los datos binarios directamente en el almacenamiento Blob.

Infraestructura como código (Bicep)

La infraestructura como código de este módulo también se almacena en Azure-Samples/linux-postgres-migration. Está diseñado para ser una arquitectura de referencia que puede usar tal como está, con cambios mínimos, si puede hacer que los datos de origen y la aplicación se ajusten a la estructura descrita anteriormente.

La seguridad es un tema importante de esta migración y hemos elegido ciertas opciones de seguridad para que la parte práctica de este módulo sea más fácil de completar. Por ejemplo, Blob Storage usa un método de autenticación sin claves más seguro, pero se permiten conexiones de red desde cualquier dirección IP. En un entorno de producción, le gustaría bloquear el acceso de red solo a las direcciones IP que necesitan acceso a la cuenta de almacenamiento.

Del mismo modo, se deja la opción de agregar una regla de firewall al servidor PostgreSQL para permitir una dirección IP específica. En un entorno de producción, es posible que deshabilite completamente todo el acceso público al servidor.

Diferencias entre entornos de origen y Azure

Una de las principales diferencias en la migración desde otro entorno a Azure es que está usando completamente los controles de seguridad e identidad que proporciona Azure:

  • Las identidades administradas se usan para máquinas virtuales y Azure Database for PostgreSQL.
  • Si usa Microsoft Entra ID para la autenticación en la base de datos.
  • Use Microsoft Entra ID, en lugar de las claves de Secure Shell (SSH) para acceder a las máquinas virtuales.

En lugar de realizar una migración mediante lift-and-shift, está aprovechando la oportunidad de modernizar la aplicación para aprovechar al máximo las características de seguridad y cumplimiento que proporciona Azure.

En el entorno local, puede usar un nombre de usuario y una contraseña para autenticarse en la base de datos. En Azure, se muestra cómo usar la identidad administrada de la máquina virtual para autenticarse en la base de datos. Este método de autenticación es más seguro y reduce el riesgo de que las credenciales de larga duración se vean comprometidas.

El uso de una identidad administrada para la autenticación suele requerir cambios de código en la aplicación. En este módulo se muestra cómo usar la biblioteca de azidentity en Go para obtener un token para la identidad administrada. La misma biblioteca está disponible en los SDK de Microsoft.

Creación de una cuenta de Azure e instalación de la CLI de Azure

Si no tiene una cuenta de Azure, puede crear una cuenta gratuita hoy mismo. Obtiene créditos que puede usar para probar los servicios de Azure de pago. Incluso después de usar los créditos, puede mantener la cuenta y usar los servicios gratuitos de Azure.

Para ejecutar los comandos en las unidades siguientes, debe acceder a un shell de Bash. Este shell puede estar en cualquiera de estas áreas:

  • En el equipo local: Por ejemplo, use macOS, Linux, Subsistema de Windows para Linux (WSL) o Docker.
  • En una máquina virtual. Por ejemplo, use Multipass o Azure.
  • En la nube. Por ejemplo, use Azure Cloud Shell o GitHub Codespaces.

Para completar este módulo, necesita la CLI de Azure. Puede instalar la CLI de Azure en el equipo local siguiendo las instrucciones del artículo Instalación de la CLI de Azure . También debe instalar Git.

Recursos