Migración a Google Cloud: Implementa tus cargas de trabajo

En este documento, se te brindará ayuda para planificar y diseñar la fase de implementación de la migración a Google Cloud. Después de evaluar el entorno actual, planificar la migración a Google Cloud y compilar la base de Google Cloud, puedes implementar las cargas de trabajo.

Este artículo es parte de una serie:

En el siguiente diagrama, se ilustra la ruta del recorrido de tu migración.

Ruta de migración con cuatro fases

La fase de implementación es la tercera fase de la migración a Google Cloud, en la que diseñas un proceso de implementación para las cargas de trabajo.

Este documento es útil si planificas una migración de un entorno local, un entorno de hosting privado o algún otro proveedor de servicios en la nube a Google Cloud, o si evalúas la posibilidad de migrar y deseas explorar cómo podría ser.

En este documento, se revisarán los diferentes tipos de procesos de implementación, en orden de flexibilidad, automatización y complejidad, junto con criterios sobre cómo elegir el enfoque adecuado para ti:

  1. Implementar de forma manual
  2. Implementar con herramientas de administración de configuración (CM)
  3. Implementar mediante herramientas de organización de contenedores
  4. Implementar de forma automática
  5. Implementar mediante la aplicación de la infraestructura como patrón de código

Antes de implementar las cargas de trabajo, planifica y diseña la fase de implementación. En primer lugar, debes evaluar los diferentes tipos de procesos de implementación que usas para las cargas de trabajo. Cuando evalúas los tipos de procesos de implementación, puedes decidir comenzar con un proceso simple y pasar a uno más complejo en el futuro. Este enfoque puede conducir a resultados más rápidos, pero también puede generar fricción cuando pasas a un proceso más avanzado, ya que debes absorber la deuda técnica que acumulaste mediante el uso del proceso más simple. Por ejemplo, si pasas de implementaciones completamente manuales a una solución automatizada, es posible que tengas que administrar las actualizaciones de la canalización de implementación y las apps.

Si bien es posible implementar diferentes tipos de procesos de implementación según las necesidades de las cargas de trabajo, este enfoque también puede aumentar la complejidad de esta fase. Si implementas diferentes tipos de procesos de implementación, puedes beneficiarte con la flexibilidad adicional, pero quizás necesites experiencia, herramientas y recursos adaptados a cada proceso, lo que se traduce en más esfuerzo de tu parte.

Implementa de forma manual

Una implementación completamente manual está respaldada por un proceso de aprovisionamiento, configuración y, también, implementación que no está automatizado en absoluto. Si bien puede haber especificaciones y listas de tareas para cada paso del proceso, no hay una verificación automatizada o una aplicación forzosa de esas especificaciones. Un proceso manual es propenso a errores humanos, no es repetible, y su rendimiento está limitado por el factor humano.

Los procesos de implementación completamente manuales pueden ser útiles, por ejemplo, cuando necesitas instrumentar con rapidez un experimento en un entorno de zona de pruebas. Configurar un proceso estructurado y automatizado para un experimento que dure unos minutos puede ralentizar de manera innecesaria tu ritmo, en especial, en las primeras etapas de la migración, cuando podrías carecer de la experiencia necesaria en las herramientas y las prácticas que te permiten compilar un proceso automatizado.

Si bien esta limitación no es el caso de Google Cloud, las implementaciones completamente manuales pueden ser la única opción cuando se trata de entornos de equipos físicos que no tienen las API de administración necesarias. En este caso, no puedes implementar un proceso automatizado debido a la falta de las interfaces necesarias. Si tienes una infraestructura virtualizada heredada que no admite ninguna automatización, es posible que debas implementar un proceso completamente manual.

Te recomendamos que evites una implementación completamente manual, a menos que no tengas otra opción.

Puedes implementar un proceso de aprovisionamiento, configuración y, también, implementación completamente manual mediante herramientas como Google Cloud Console, Cloud Shell, las API de Cloud y el SDK de Cloud.

Implementa con herramientas de administración de configuración

Las herramientas de CM te permiten configurar un entorno de forma repetitiva y controlada. Estas herramientas incluyen un conjunto de complementos y módulos que ya implementan operaciones de configuración comunes. Estas te permiten enfocarte en el estado final que deseas alcanzar para el entorno, en lugar de implementar la lógica a fin de llegar a ese estado final. Si el conjunto de operaciones incluidas no es suficiente, las herramientas de CM suelen tener un sistema de extensión que puedes usar para desarrollar tus propios módulos. Si bien estas extensiones son posibles, intenta usar los módulos y complementos predefinidos cuando corresponda para evitar la carga adicional de desarrollo y mantenimiento.

Si bien usas herramientas de CM cuando necesitas configurar entornos, también puedes usarlas a fin de aprovisionar la infraestructura y establecer un proceso de implementación para las cargas de trabajo. Las herramientas de CM son un proceso mejor en comparación con un proceso de aprovisionamiento, configuración y, también, implementación completamente manual, ya que es repetible, controlado y auditable. Sin embargo, existen varias desventajas, dado que las herramientas de CM no están diseñadas para tareas de aprovisionamiento o implementación. Por lo general, carecen de características integradas para implementar una lógica de aprovisionamiento compleja, como detectar y administrar diferencias entre el estado real de la infraestructura y el estado deseado, o procesos de implementación enriquecidos, como implementaciones sin tiempo de inactividad o implementaciones azul-verdes. Puedes implementar las características faltantes mediante los puntos de extensión mencionados antes. Estas extensiones pueden generar un esfuerzo adicional y aumentar la complejidad general del proceso de implementación, ya que necesitas la experiencia necesaria para diseñar, desarrollar y mantener una solución de implementación personalizada.

Puedes implementar este tipo de procesos de aprovisionamiento, configuración y, también, implementación con herramientas como Ansible, Chef, Puppet y SaltStack..

Implementa mediante herramientas de organización de contenedores

Si ya invertiste o planeas invertir en la creación de contenedores para las cargas de trabajo, puedes usar una herramienta de organización de contenedores con el fin de implementarlas.

Una herramienta de organización de contenedores se encarga de administrar la infraestructura que sustenta el entorno y admite un amplio rango de operaciones de implementación y componentes básicos para implementar la lógica de implementación que puedes usar cuando los integrados no son suficientes. Si usas estas herramientas, puedes enfocarte en redactar la lógica de implementación real mediante los mecanismos proporcionados, en lugar de tener que implementarlos.

Las herramientas de organización de contenedores también proporcionan abstracciones que puedes usar a fin de generalizar los procesos de implementación en diferentes entornos subyacentes, de modo que no tienes que diseñar ni implementar varios procesos para cada uno de los entornos. Por ejemplo, estas herramientas suelen incluir la lógica para escalar y actualizar las implementaciones, por lo que no tienes que implementarlas por tu cuenta. Incluso puedes comenzar a aprovechar estas herramientas para implementar los procesos de implementación en el entorno actual y, luego, transferirlos al entorno de destino, ya que la implementación es muy similar con respecto al diseño. Si adoptas estas herramientas de forma anticipada, obtendrás experiencia en la administración de entornos en contenedores, que es útil para migrar a Google Cloud.

Usa una herramienta de organización de contenedores si las cargas de trabajo ya están en contenedores o si puedes colocarlas en contenedores en el futuro y planeas invertir en este esfuerzo. En este último caso, debes realizar un análisis detallado de cada carga de trabajo para determinar estos factores:

  • Asegúrate de que sea posible colocar la carga de trabajo en un contenedor.
  • Evalúa los posibles beneficios que podrías obtener si colocas la carga de trabajo en un contenedor.

En caso de que las posibles dificultades superen los beneficios de la creación de contenedores, solo debes usar una herramienta de organización de contenedores si los equipos ya se comprometieron a usarla y no deseas administrar entornos heterogéneos.

Por ejemplo, las soluciones de almacén de datos no suelen implementarse mediante las herramientas de organización de contenedores, ya que no están diseñadas para ejecutarse en contenedores efímeros.

Puedes implementar este proceso de implementación mediante herramientas como Kubernetes y servicios administrados, como Google Kubernetes Engine (GKE) en Google Cloud. Si estás interesado en un entorno sin servidores, puedes usar herramientas, como el entorno flexible de App Engine, Cloud Functions y Cloud Run.

Implementa automáticamente

Sin importar las herramientas de aprovisionamiento, configuración, implementación y organización que uses en el entorno, puedes recurrir a procesos de implementación completamente automatizados para minimizar los errores humanos y consolidar, optimizar y estandarizar los procesos en la organización. También puedes insertar pasos de aprobación manual en el proceso de implementación si es necesario, pero cada paso es automático.

Estos son los pasos de una canalización de implementación típica de extremo a extremo:

  1. Revisión de código
  2. Integración continua (IC)
  3. Producción de artefactos
  4. Implementación continua (IC), con aprobaciones manuales eventuales

Puedes automatizar cada uno de estos pasos de forma independiente de los demás para migrar de manera gradual los procesos de implementación actuales a una solución automatizada, o puedes implementar un nuevo proceso directamente en el entorno de destino. Para que este proceso sea eficaz, necesitas procedimientos de prueba y validación en cada paso de la canalización, no solo durante el paso de revisión de código o de CI.

Para cada cambio en la base de código, debes realizar una revisión exhaustiva a fin de evaluar la calidad del cambio. La mayoría de las herramientas de administración de código fuente cuentan con una asistencia de primera clase para las revisiones de código. A menudo, también admiten la creación automática y la inicialización de revisiones mediante la examinación del área de código fuente modificada, siempre que hayas configurado los equipos responsables de cada área de la base de código. En cada revisión, también puedes ejecutar verificaciones automáticas del código fuente, como linters y analizadores estáticos para aplicar estándares de coherencia y calidad en la base de código.

Después de revisar y, luego, integrar un cambio en la base de código, la herramienta de CI puede ejecutar pruebas, evaluar los resultados y notificarte sobre cualquier problema con la compilación actual automáticamente. Puedes agregar valor a este paso si sigues un proceso de desarrollo basado en pruebas para obtener una cobertura de prueba completa de las características de cada carga de trabajo.

Para cada compilación exitosa, puedes automatizar la creación de artefactos de implementación. Estos artefactos representan una versión de las cargas de trabajo lista para implementar con los cambios más recientes. Como parte del paso de creación de artefactos, también puedes realizar una validación automática. Por ejemplo, ejecutas un análisis de vulnerabilidades contra problemas conocidos y apruebas el artefacto para la implementación solo si no se encuentran vulnerabilidades.

Por último, puedes automatizar la implementación de cada artefacto aprobado en el entorno de destino. Si tienes varios entornos de ejecución, también puedes implementar una lógica de implementación única para cada uno, incluso si agregas pasos de aprobación manual, si es necesario. Por ejemplo, puedes implementar automáticamente versiones nuevas de las cargas de trabajo en los entornos de desarrollo, control de calidad y preproducción, mientras aún necesitas una revisión manual y la aprobación del equipo de control de producción para implementarlas en el entorno de producción.

Si necesitas un proceso automatizado, estructurado, optimizado y auditable, una de las mejores opciones es un proceso completamente automatizado de extremo a extremo. Sin embargo, su implementación no es una tarea trivial. Antes de elegir este tipo de proceso, debes tener una visión clara de los beneficios esperados, los costos involucrados, y si el nivel actual de conocimiento y experiencia del equipo es suficiente para realizar un proceso de implementación completamente automatizado.

Puedes implementar un proceso completamente automatizado con herramientas como SonarQube, Jenkins, Cloud Build, Container Registry y Spinnaker.

Implementa mediante la aplicación de la infraestructura como patrón de código

La infraestructura como código es un proceso en el que se trata el aprovisionamiento de los recursos en un entorno de ejecución de la misma manera que se maneja el código fuente de las cargas de trabajo. Por ejemplo, puedes administrar la totalidad del ciclo de vida de los recursos de Google Cloud con las API de Cloud y codificar el estado final en el código fuente. Luego, implementas un proceso de aprovisionamiento completamente automatizado para la infraestructura, similar al que implementas en las cargas de trabajo, con un conjunto de pruebas integral.

Una herramienta de aprovisionamiento está diseñada con el objetivo de iniciar la infraestructura y prepararla para la configuración. No es adecuada para completar tareas de configuración. Por este motivo, después de aprovisionar todos los recursos en la infraestructura, debes usar una herramienta de CM para configurar esos recursos según los requisitos. Si bien puedes implementar tareas de configuración con herramientas de aprovisionamiento y tareas de aprovisionamiento con herramientas de CM, están diseñadas para un propósito y se complementan entre sí. Debes usar la herramienta adecuada para el trabajo, así que usa herramientas de aprovisionamiento a fin de aprovisionar la infraestructura y las herramientas de CM con el objetivo de configurarla.

Si puedes administrar los recursos en el entorno de destino solo con las API, como en Google Cloud, debes implementar una infraestructura como proceso de código. Obtienes auditabilidad y control de versiones inmediatos y completos para toda la infraestructura de nube. Incluso puedes implementar un proceso de integración y de implementación continuas (CI/CD) para aplicar automáticamente los cambios a la infraestructura.

Por otro lado, si el entorno de destino no ofrece acceso programático para administrar y configurar recursos, no es posible implementar una infraestructura como implementación de código. Además, debes consultar con el departamento de adquisiciones, ya que aprovisionar y desaprovisionar recursos en un entorno de nube puede generar diferencias en la facturación y los gastos.

Puedes implementar una infraestructura como proceso de código con herramientas como Terraform y servicios administrados como Deployment Manager. También puedes usar herramientas como RSpec, Serverspec y InSpec a fin de implementar paquetes de prueba para la infraestructura.

Resumen

Ahora que comprendes las diferentes opciones, cuándo usarlas, y cuándo evitarlas, y tienes ejemplos de herramientas que puedes explorar, el siguiente gráfico te ayudará a comparar y contrastar con facilidad cada opción para las cargas de trabajo y los casos prácticos.

Tipo de proceso de implementación Cuándo se utiliza Cuándo evitarlo Herramientas y servicios
Implementación completamente manual Cuando necesites instrumentar con rapidez un experimento en un entorno de zona de pruebas o cuando se trate de entornos de equipos físicos o una infraestructura virtualizada heredada, que carezcan de las API de administración necesarias Cada vez que hay alternativas más administrables N/A
Implementación con herramientas de CM Cuando necesitas una forma de automatizar las implementaciones manuales y ya invertiste mucho dinero en herramientas de CM para la configuración de los entornos Cuando el esfuerzo por superar las limitaciones de las herramientas de CM en términos de implementación es demasiado alto Ansible, Chef, Puppet, SaltStack
Organización de contenedores Si las cargas de trabajo ya están en contenedores o pueden estarlo en el futuro y piensas invertir en este esfuerzo Cuando las posibles dificultades superan los beneficios de la creación de contenedores Kubernetes, GKE, el entorno flexible de App Engine, Cloud Functions, Cloud Run
Automatización de la implementación Si necesitas un proceso automatizado, estructurado, optimizado y auditable Si tus equipos no tienen las habilidades necesarias y no tienen la oportunidad de capacitarse, o si no puedes afrontar el esfuerzo de implementar un proceso completamente automatizado SonarQube, Jenkins, Cloud Build, Container Registry, Spinnaker
Infraestructura como código Cuando los recursos en el entorno de destino se pueden administrar por completo con las API y de manera programática Si el entorno de destino no ofrece acceso programático para administrar y configurar los recursos Terraform, Cloud Deployment Manager

Ningún proceso de implementación es el mejor, ya que depende por completo de tu situación actual, tu nivel de experiencia y lo que esperas del proceso.

Obtén ayuda

Google Cloud ofrece varias opciones y recursos a fin de que encuentres la ayuda y la asistencia necesarias para hacer mejor uso de los servicios de Google Cloud:

Hay más recursos para ayudarte a migrar cargas de trabajo a Google Cloud en el Centro de migración de Google Cloud.

Para obtener más información sobre estos recursos, consulta la sección de obtención de ayuda de Migración a Google Cloud: Comienza ahora.

Próximos pasos