Optimización de costos mediante la administración automatizada de VM

En este documento, se describen las formas de administrar de forma automática instancias de máquinas virtuales (VM) en Google Cloud y se recomiendan prácticas recomendadas para diferentes casos de uso. Este documento está dirigido al personal de operaciones y a los administradores responsables del mantenimiento y el control de costos de la infraestructura de nube existente, y a los desarrolladores que migran los flujos de trabajo existentes a la nube.

Un beneficio principal de la nube es que solo pagas por los recursos de procesamiento que utilizas. Por ejemplo, las VM de Compute Engine se cobran por segundo. Por lo general, los sistemas de producción se ejecutan de manera constante, pero algunas VM, como las de entornos de desarrollo o prueba, suelen usarse solo durante el horario de atención. Otras VM que se usan para el procesamiento por lotes no son necesarias después de completar sus tareas. Mantener las VM en ejecución cuando no tienen usuarios ni tareas para ejecutar no tiene un propósito útil, por lo que desactivarlas permite ahorrar dinero. Por lo general, los sistemas que se migran desde hardware local no aprovechan la capacidad de desactivarse cuando no tienen usuarios o tareas para ejecutar. Administrar flotas de VM de forma manual es tedioso y aumenta las probabilidades de que se produzcan errores y es difícil de realizar en una organización grande.

Google Cloud ofrece muchas formas de optimizar y administrar de forma automática las instancias de VM, desde programas de instancias sencillos basados en el tiempo hasta herramientas como Cloud Composer, que pueden organizar flujos de trabajo complejos en muchos productos y nubes. En este documento, se presentan opciones para ayudarte a decidir qué flujo de trabajo se adapta mejor a tu caso de uso.

Elige un flujo de trabajo de automatización

En el siguiente diagrama, se proporciona un árbol de decisión que puede ayudarte a identificar el flujo de trabajo de automatización más adecuado para tu caso de uso.

Un árbol de decisión que te ayuda a elegir un flujo de trabajo automatizado.

En el diagrama anterior, se describen los siguientes pasos:

  1. ¿Se trata de VM que usan las personas, como, por ejemplo, para estaciones de trabajo remotas o los trabajos por lotes o de eventos?
    1. Si son para personas, consulta Automatiza la programación de instancias más adelante en este documento. La programación automatizada de instancias usa Cloud Scheduler y Cloud Functions.
    2. Para los trabajos por lotes o de eventos, continúa con el paso siguiente.
  2. ¿Tus trabajos implican organizar las tareas de muchos productos o nubes?
    1. Si es así, consulta Organiza flujos de trabajo complejos más adelante en este documento. Los flujos de trabajo complejos usan Workflows y Cloud Composer.
    2. De lo contrario, continúa con el siguiente paso.
  3. ¿Tus trabajos son demasiado grandes para ajustarse a una sola instancia de VM?
    1. Si es así, consulta Procesa grandes volúmenes de datos más adelante en este documento. Para procesar grandes volúmenes de datos, usa Dataflow.
    2. Si no es así, consulta Ejecuta trabajos a pedido más adelante en este documento. Para ejecutar trabajos a pedido, usa Cloud Scheduler y Cloud Functions.

Automatiza la programación de instancias

La programación es útil para las instancias de VM que solo se requieren durante ciertos momentos del día o la semana. Los casos de uso comunes incluyen escritorios virtuales y la infraestructura de desarrollo o prueba que se usa solo durante el horario laboral.

Antes de configurar la programación, ten en cuenta lo siguiente para determinar si la programación es la mejor opción para tu organización y sus usuarios:

  • Compute Engine ofrece descuentos por compromiso de uso, que pueden proporcionar ahorros de costos sustanciales para la mayoría de los recursos. Si tu organización ya tiene un contrato de compromiso de uso que es lo suficientemente grande como para cubrir todo el uso de VM, la programación no proporciona ninguna reducción de costos adicional.
  • Compute Engine ofrece descuentos por uso continuo automáticos para cualquier instancia que se ejecute durante una parte significativa de un mes de facturación. El porcentaje de descuento más alto es de hasta el 30% si la instancia se ejecuta durante más del 75% del mes. Aunque la programación aún puede reducir los costos, la ventaja del costo se reduce en este caso.
  • La programación automatizada requiere un horario predecible. Si el horario laboral de los usuarios es impredecible, considera usar una solución de limpieza automática que pueda desactivar las instancias después de un período determinado.

Detén, suspende y borra instancias

En Google Cloud, una instancia completamente operativa está en estado en ejecución. Para desactivar una instancia en ejecución, puedes suspenderla, detenerla o borrarla. En la siguiente tabla, se muestra cómo cada estado afecta la facturación y si los componentes de la instancia se retienen:

Estado de la instancia CPU virtual Memoria Disco Facturación
Activo CPU virtual, memoria y disco
Suspendida No Memoria de instancia y disco
Detenida No No Solo en disco
Borrada No No No Ninguna

Suspende una instancia

Cuando una instancia está suspendida, ya no está disponible para su uso, pero conserva la memoria y el estado del disco. No se te cobrará por las CPU virtuales, pero se te cobrará por la memoria y el estado del dispositivo de las instancias suspendidas y por los discos conectados.

Considera suspender las instancias si es importante que los usuarios puedan reanudar su trabajo con rapidez desde donde quedaron el día anterior. Los casos de uso de suspensión comunes incluyen escritorios virtuales y estaciones de trabajo para desarrolladores. Para obtener más información, consulta Suspende y reanuda una instancia.

Detén una instancia

Cuando se detiene una instancia, se conservan los discos conectados, pero se pierde cualquier contenido en la memoria. Mientras una instancia está detenida, solo se te facturará por sus discos. Iniciar una instancia detenida es equivalente a reiniciarla desde el disco conectado, incluida la ejecución de cualquier secuencia de comandos de inicio.

Considera detener las instancias si conservar el estado de memoria y reanudar con rapidez no son requisitos. Dentro de los casos de uso comunes para la detención, se incluyen los entornos de prueba y las canalizaciones de CI/CD. A fin de obtener información sobre cómo configurar un programa, consulta Programa una instancia de VM para que se inicie y se detenga.

Borra una instancia

Una instancia borrada ya no existe y no se puede restablecer. De forma predeterminada, los discos de arranque conectados también se borran de forma automática, aunque puedes cambiar la configuración de eliminación automática.

Para volver a crear una instancia con facilidad más adelante, puedes guardar la configuración completa de una instancia, incluidos todos los discos, como una imagen de máquina. Puedes guardar el contenido de un solo disco mediante instantáneas. Los cargos por almacenamiento se aplican a las instantáneas y a las imágenes de máquina.

Si siempre necesitas restablecer la memoria y el disco a un estado conocido, considera borrar y volver a crear instancias. Un caso de uso común incluye flotas grandes de instancias que se replican a partir de una sola plantilla, como entornos de labs de aulas.

Automatiza los trabajos por lotes

Los trabajos por lotes son tareas automatizadas que se ejecutan a pedido o en un programa establecido. Una vez que finaliza el trabajo, sus recursos ya no son necesarios y pueden borrarse.

Ejecuta trabajos a pedido

Algunos trabajos por lotes se ejecutan a pedido. Por ejemplo, un usuario puede solicitar un informe difícil de elaborar que se preparará en segundo plano y se enviará por correo electrónico.

Una solución liviana para ejecutar trabajos a pedido es usar Cloud Functions. Cloud Functions permite que los desarrolladores creen funciones independientes y de un solo propósito que respondan a eventos sin necesidad de administrar una instancia. Los precios de Cloud Functions se basan en el uso, por lo que son rentables. En el siguiente diagrama, se muestra cómo funciona Cloud Functions con Compute Engine:

Cloud Functions activa trabajos de Compute Engine a pedido.

En el diagrama anterior, una aplicación invoca una función de Cloud Functions mediante una llamada a la URL de un activador HTTP. Una aplicación puede llamar a la URL de un activador según la entrada del usuario; por ejemplo, si un usuario solicita un informe en una aplicación web de frontend, esa aplicación puede llamar a la URL del activador para comenzar a preparar el informe.

Cloud Functions también se puede activar mediante eventos como, por ejemplo, subir un archivo a un bucket de Cloud Storage. Para ver un ejemplo de flujo de trabajo, consulta Automatiza la clasificación de los datos subidos a Cloud Storage.

Una Cloud Function puede llamar a la API de Compute Engine para crear una instancia temporal y, luego, esta puede ejecutar secuencias de comandos de shell o programas. Para que la instancia se borre a sí misma después de que complete su trabajo, puedes usar la herramienta de línea de comandos de gcloud. Para ver un ejemplo, consulta Crea una máquina virtual que se borre automáticamente en Compute Engine.

Para ver ejemplos más detallados, consulta los instructivos de Cloud Functions o Usa Cloud Scheduler y Cloud Functions para implementar un trabajador periódico de VM de Compute Engine.

Programa trabajos

En un entorno local, los trabajos cron son la forma estándar de ejecutar tareas programadas. Sin embargo, ejecutar un programador cron requiere que la instancia esté disponible de manera continua (que podría no ser el caso) y que se esté ejecutando, incluso cuando no realice ningún trabajo. El uso de cron tal como está en la nube puede ser poco confiable y también ineficiente. En su lugar, te recomendamos que crees un sistema cron distribuido, mediante Cloud Scheduler con Pub/Sub para enviar mensajes a instancias de Compute Engine. Para ver un ejemplo de este patrón, consulta Programación de tareas confiables en Compute Engine con Cloud Scheduler.

Procesa grandes volúmenes de datos

Algunos trabajos por lotes procesan volúmenes de datos que son demasiado grandes para controlarlos con una sola VM en un tiempo razonable. Dataflow ofrece un framework compatible con Apache Beam para ejecutar trabajos de procesamiento por lotes y de transmisión en una flota de VM, lo que crea y borra de forma automática los recursos necesarios. Para obtener un descuento adicional sobre el precio regular, puedes usar la programación flexible de recursos a fin de programar trabajos por lotes que se ejecuten durante un período de seis horas.

Organiza flujos de trabajo complejos

Algunos trabajos requieren recursos adicionales junto con las instancias de VM, como las bases de datos, el almacenamiento temporal o las canalizaciones de extracción, transformación y carga (ETL).

Puedes usar Workflows para crear flujos de trabajo básicos a fin de procesar eventos o organizar microservicios. Los flujos de trabajo funcionan bien con Cloud Functions, Cloud Run o cualquier otra API (dentro o fuera de Google Cloud) a las que se pueda acceder mediante red y que admitan HTTP. Workflows no tiene servidores y puede reducir la escala a cero, por lo que son adecuados para cargas de trabajo impredecibles que responden a aumentos repentinos de demanda con baja latencia. Por ejemplo, consulta Carga datos de Cloud Storage en BigQuery mediante Workflows y Crea una canalización de aprendizaje automático personalizado con Workflows y servicios sin servidores.

Para los flujos de trabajo de organización por lotes, como la ingeniería de datos o ETL, Google Cloud ofrece una versión administrada de Apache Airflow llamada Cloud Composer. Los flujos de trabajo de Cloud Composer se modelan como grafos acíclicos dirigidos que se ejecutan en un clúster escalable y siempre activo, y pueden usar una gran variedad de operadores de Airflow en otros productos o nubes. Si deseas ver una solución de ejemplo que toma instantáneas de instancias para fines de copia de seguridad, consulta Automatiza la infraestructura con Cloud Composer.

Reduce la capacidad sin usar

Compilar infraestructura para uso futuro requiere que calcules la demanda. Cuando calculas la demanda, a veces las VM son demasiado grandes para su trabajo o no se usan para nada. Estos problemas son comunes cuando se migran infraestructuras locales con cambios mínimos en la arquitectura (a veces llamada migración lift-and-shift). Aunque las inversiones de hardware físico no se pueden revertir con facilidad, en la nube puedes reducir los costos con solo cambiar el tamaño de las instancias o borrándolas.

Como parte de Active Assist, Google proporciona un Centro de recomendaciones que muestra sugerencias de seguridad y eficiencia para tu proyecto. Dos tipos de recomendaciones clave son la reducción de costos de VM y la identificación de recursos sin usar.

Reduce el costo de las VM

Las instancias de Compute Engine se cobran por CPU virtual y tamaño de memoria, por lo que es ineficiente ejecutar una instancia más grande de lo necesario para la carga de trabajo real.

Según el uso de VM durante los cinco días anteriores, Google Cloud proporciona recomendaciones sobre el tamaño de las máquinas en el Centro de recomendaciones y en la página de Compute Engine de Cloud Console. Estas recomendaciones también están disponibles a través del comando gcloud recommender recommendations y la API del recomendador.

Entre otras opciones para reducir los costos, se incluyen las siguientes:

Puedes cambiar el tipo de máquina de la instancia para cambiar su tamaño y obtener una instancia más pequeña o más económica. Para cambiar el tipo de máquina de una instancia, primero debes detenerla.

Identifica instancias inactivas

A veces, se crean instancias para tareas sin un extremo definido con claridad. Por ejemplo, los usuarios pueden crear instancias de prueba para probar una función o versión en particular y, luego, olvidarse de cerrarlas cuando terminan. En el siguiente diagrama, se muestra cómo puedes usar Cloud Scheduler con Cloud Functions y la API del recomendador para identificar y borrar VM inactivas:

Las recomendaciones del recomendador ayudan a identificar y borrar las instancias inactivas.

Para identificar de forma automática las instancias inactivas, el recomendador evalúa el uso de CPU y red de las instancias de Compute Engine durante un período. Estos datos se usan para crear recomendaciones de VM inactivas disponibles en la API del recomendador. En el diagrama anterior, Cloud Scheduler activa una función con la que se obtiene la recomendación de VM inactiva y, luego, se borran las instancias inactivas. Para ayudar a reducir los costos, puedes administrar las instancias inactivas de Compute Engine de forma automática a fin de etiquetar instancias inactivas para su revisión y, de forma opcional, detenerlas o borrarlas.

Para obtener información sobre cómo verificar los recursos asociados, como las direcciones IP y los discos persistentes, consulta Automatiza las optimizaciones de costos mediante Cloud Functions, Cloud Scheduler y Cloud Monitoring.

Limpia instancias vencidas

Puedes usar Cloud Scheduler y Cloud Functions para configurar una función de recolección de elementos no utilizados, como se muestra en el siguiente diagrama. La función borra de forma automática las VM seleccionadas que se ejecutan por más tiempo que el período que configuras.

Cloud Scheduler ayuda a limpiar las instancias vencidas.

En el diagrama anterior, Cloud Scheduler envía un mensaje a Pub/Sub, lo que activa Cloud Functions para borrar las VM vencidas. Para ver un ejemplo de este patrón, consulta Limpia instancias de Compute Engine a gran escala.

¿Qué sigue?