Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Reduce hasta 60% los costos de Google Compute Engine con Zorya — GCE Instance Scheduler

By Aviv LauferFeb 26, 20186 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

1 bimx94i4agv23fzxumvs4a

Ejecutar entornos de no producción en la nube es genial. Están disponibles en cualquier momento, justo cuando los necesitas. Pero esa comodidad a veces tiene un costo. Por lo general, las instancias de no producción se usan sobre todo durante el día y, a veces, andas tan ocupado que se te olvida apagarlas fuera del horario laboral o los fines de semana. Aunque cada instancia cuesta apenas unos centavos por hora, el costo total puede dispararse a lo largo del mes y llegar a miles de dólares.

Como Premier y MSP Partner de Google, en DoiT International trabajamos con cientos de startups y empresas que ejecutan sus workloads en Google Cloud Platform en general, y en Google Compute Engine en particular. En el fondo, siempre buscamos reducir el gasto mensual en la nube de nuestros clientes diseñando sistemas más inteligentes y eficientes en costos.

Con esa idea en mente, hoy liberamos como open source Zorya. En la mitología eslava, las Zoryas son dos diosas guardianas. Las Zoryas representan a la estrella de la mañana y a la estrella de la tarde; si has leído o visto American Gods, de Neil Gaiman, seguramente recordarás a estas hermanas.

Entonces, ¿qué es exactamente Zorya? Es una pequeña pieza de software que puedes ejecutar en tu propia cuenta de Google Cloud Platform y que te permite configurar la programación de tus instancias de Google Compute Engine y aplicar una política transversal a todos los proyectos de tu organización.

Queríamos que Zorya fuera muy fácil de instalar y mantener, así que nos planteamos los siguientes objetivos de diseño:

  • Ejecutar Zorya de forma serverless, para reducir la carga de gestión
  • Permitir configurar múltiples horarios y políticas
  • Soportar múltiples proyectos desde una sola instancia de Zorya
  • Mantener un bajo costo operativo al ejecutar Zorya

Decidimos construir Zorya y ejecutarlo en Google App Engine, Standard Environment. Solo con eso ya cubrimos dos de los requisitos:

  1. Operación serverless gracias a App Engine: no tenemos que administrar servidores y obtenemos alta disponibilidad y escalabilidad de fábrica.
  2. Bajo costo operativo, por el modelo de precios de Google App Engine y porque Zorya "despierta" solo una vez por hora; el resto del tiempo no consume recursos, lo que mantiene el costo bajo.

El backend de Zorya está escrito en Python, con un frontend basado en React. Decidimos usar Google Cloud Datastore como base de datos para almacenar los datos de configuración.

Backend

El backend ofrece una API RESTful sencilla para consultar y configurar schedules y policies.

La entidad Schedule se compone de un nombre, una zona horaria y una matriz de 7x24 que representa cada hora de cada día de la semana. Un valor 0 significa que la instancia debe estar detenida y un 1, que debe estar online.

La entidad Policy se compone de un nombre, una lista de proyectos, el nombre del schedule asociado y una lista de etiquetas de Google Compute Engine, es decir, pares de nombres y valores.

{
"name": "My policy",
"tags": [\
{\
"dev": "sleeper",\
"staging": "resting"\
}\
],
"projetcs": [\
"project-x",\
"y-project"\
],
"schedulename": "my schedule name"
}

La API es muy simple y solo tiene ocho endpoints:

  • add_policy
  • list_schedules
  • del_schedule
  • get_schedule
  • add_policy
  • list_policies
  • get_policy
  • del_policy

La documentación de la API y un código de ejemplo en varios lenguajes están disponibles aquí.

Mediante el scheduler integrado de Google App Engine, una tarea revisa las políticas para verificar si hace falta cambiar el estado de las instancias.

https://gist.github.com/avivl/238c047d60a5824700981029ab5b15cahttps://gist.github.com/avivl/4f798263d60192a1e1248df9ed51c630

Si hay que cambiar el estado, Zorya recorre los proyectos relevantes y modifica el estado de las instancias que tengan los pares de etiquetas solicitados.

https://gist.github.com/avivl/ee9e7c11c254e25b890d48c1a873fdc1

Autenticación

Para que Zorya pueda administrar instancias en tu nombre en cualquier proyecto dentro de tu organización, debes crear una nueva entrada en el IAM de tu organización y asignarle a la cuenta de servicio de Zorya el rol de "Compute Admin".

Primero, ve a https://console.cloud.google.com, selecciona "IAM & Admin" en el menú y, por último, elige el nombre de tu organización (no solo un proyecto específico) en el desplegable que aparece en la parte superior de la página:

1 b 2mrjt3qw3x93wamm1b0a

El nombre de la cuenta de servicio a la que tendrás que asignar permisos es: [email protected]. Solo reemplaza project-id con el ID real del proyecto donde despliegues Zorya.

Frontend

Como suponemos que la mayoría de la gente usará la API de Zorya, construimos una interfaz bastante sencilla para crear schedules y policies. El frontend está basado en ReactJS y se publica en el módulo default de la aplicación de App Engine.

Para iniciar sesión en la app, usamos Cloud Identity-Aware Proxy. Cloud IAP funciona verificando la identidad del usuario y determinando si debe permitírsele acceder a la aplicación. La configuración es tan simple como entrar a la consola de GCP, habilitar IAP en tu aplicación de App Engine y agregar los usuarios o grupos que deben tener acceso a Zorya.

Para empezar a usar la interfaz, abre tu navegador en project-id.appspot.com y reemplaza project-id con el ID de tu propio proyecto en Google Cloud Platform.

Con la interfaz se configura fácilmente un nuevo schedule, como en este ejemplo: de lunes a viernes, de 8 a. m. a 7 p. m. en la zona horaria US/Eastern. Durante ese período tus instancias estarán corriendo y, fuera de ese horario, Zorya las detendrá y volverá a iniciarlas al día siguiente.

1 9d5lmvhuyf2pmjtctpcqagEditor de schedules de Zorya

Una vez configurado el schedule, necesitas crear una policy para aplicarlo a determinadas instancias. Por ejemplo, supongamos que quieres aplicar el schedule a todas las instancias del proyecto doit-playground con las etiquetas env:dev, role:frontend y app:reoptimize; las instancias afectadas serán solo las que tengan los tres pares de etiquetas.

1 pw8la9eyh98tmovrohzzpwConfiguración de una policy de Zorya

Reducción de costos

Usamos DoiT Cloud Intelligence™ para monitorear nuestros costos en Google Cloud Platform. DoiT Cloud Intelligence permite desglosar el costo por etiqueta dentro de una organización de GCP y entrega una visualización clara.

Empezamos a usar Zorya internamente en diciembre de 2017, cuando nuestros costos en Google Compute Engine eran de unos USD 780/día en promedio. Con Zorya aplicado a nuestros entornos de desarrollo y testing, hoy nuestros costos de GCE son de solo USD 320/día en promedio: una reducción de casi 60%.

1 toihb7mxeu58exxuvbqkcq (1)Dashboard de DoiT Cloud Intelligence

Cierre

Si tú también quieres usar Zorya para optimizar tu factura mensual de Google Cloud Platform, ¡danos una estrella en GitHub! ;-) Además, recibimos pull requests con los brazos abiertos y agradecemos tu ayuda para seguir mejorando Zorya con el tiempo.


¿Quieres más historias? Pásate por nuestro blog o sigue a Aviv en Twitter.