Si te preocupan los costos y necesitas controlar el entorno relacionado con tu presupuesto, puedes usar las notificaciones de presupuesto programáticas para automatizar tu respuesta de control de costos en función de las notificaciones de presupuesto.
Las notificaciones de presupuesto usan temas Pub/Sub para proporcionar un estado en tiempo real del presupuesto de Facturación de Cloud con la escalabilidad, flexibilidad y confiabilidad del middleware empresarial orientado a los mensajes.
En esta página se muestran ejemplos e instrucciones paso a paso sobre cómo usar las notificaciones de presupuesto con Cloud Functions a fin de automatizar la administración de los costos.
Configura las notificaciones de presupuesto
El primer paso es habilitar un tema de Pub/Sub para el presupuesto. Esto se describe de forma detallada en Administra las notificaciones de alertas de presupuesto programáticas.
Después de habilitar las notificaciones de presupuesto, ten en cuenta lo siguiente:
- Tema de Pub/Sub: Es la terminal de notificaciones configurada para el presupuesto.
- Budget ID (ID de presupuesto): Es un ID único para el presupuesto que se incluye en todas las notificaciones. Podrás encontrar este ID en el presupuesto en Manage notifications (Administra las notificaciones). El ID se muestra después de que seleccionas Connect a Pub/Sub topic to this budget (Conectar un tema de Pub/Sub a este presupuesto).
Escucha tus notificaciones
El próximo paso es escuchar las notificaciones mediante la suscripción a tu tema de Pub/Sub. Si no tienes un suscriptor, Pub/Sub descartará los mensajes publicados y no podrás recuperarlos más tarde.
Aunque hay varias maneras en las que puedes suscribirte al tema, para estos ejemplos usaremos activadores de Cloud Function.
Crea una función de Cloud Functions
Para crear una Cloud Function nueva, haz lo siguiente:
En la consola de Google Cloud, ve a la página Cloud Functions.
Haz clic en
CREATE FUNCTION (Crear función) y asígnale un nombre que sea significativo para tu presupuesto.En Trigger (Activador), selecciona Pub/Sub topic (Tema de Pub/Sub).
Selecciona el tema que configuraste en tu presupuesto.
Proporciona un código fuente y dependencias para que ejecute la función.
Asegúrate de configurar la función que se ejecutará con el nombre correcto de la función.
Describe tu Cloud Function
Para indicarle a la función de Cloud Functions lo que quieres que haga con la notificación, puedes escribir el código mediante el editor directo o subir un archivo. Para obtener más detalles sobre las notificaciones que recibirá el código, consulta Formato de las notificaciones.
Por ejemplo, una función puede registrar notificaciones, atributos y datos de Pub/Sub cuando se activa por una notificación de presupuesto. Para obtener más información, consulta Activadores de Pub/Sub.
Visualiza los eventos de la función de Cloud Functions
Después de guardar la función de Cloud Functions, puedes hacer clic en VIEW LOGS (Ver registros) para ver tus notificaciones de presupuesto registradas. Esto muestra los registros de las invocaciones de función.
Prueba tu Cloud Function
Las notificaciones se envían a Pub/Sub y los suscriptores reciben los mensajes. Para probar una notificación de muestra y asegurarte de que tu función funciona como se esperaba, publica un mensaje en Pub/Sub con este objeto como el cuerpo del mensaje:
{ "budgetDisplayName": "name-of-budget", "alertThresholdExceeded": 1.0, "costAmount": 100.01, "costIntervalStart": "2019-01-01T00:00:00Z", "budgetAmount": 100.00, "budgetAmountType": "SPECIFIED_AMOUNT", "currencyCode": "USD" }
También puedes agregar atributos de mensajes, como el ID de la cuenta de facturación. Consulta la documentación completa sobre formatos de notificación para obtener más información.
Envía notificaciones a Slack
Los correos electrónicos no son siempre la mejor manera de mantenerte actualizado con los costos de la nube, en particular si tu presupuesto es fundamental y urgente. Con las notificaciones, puedes reenviar los mensajes de presupuesto a otros medios.
En este ejemplo, se describe cómo reenviar notificaciones de presupuesto a Slack. De esta manera, cada vez que la Facturación de Cloud publique una notificación de presupuesto, una función de Cloud Functions usa un bot para publicar un mensaje en un canal de Slack del espacio de trabajo del bot.
Configura un canal y permisos de Slack
El primer paso es crear el espacio de trabajo de Slack y los tokens de usuarios bot que se usan para llamar a la API de Slack. Los tokens de la API se pueden administrar en https://api.slack.com/apps. Para obtener instrucciones detalladas, consulta Usuarios bot en el sitio de Slack.
Escribe una Cloud Function
Crea una función nueva mediante los pasos que se describen en Crea una Cloud Function. Asegúrate de que el activador esté configurado con el mismo tema de Pub/Sub que usa el presupuesto.
Agrega dependencias:
Node.js
Copia lo siguiente en tu
package.json
:Python
Copia lo siguiente en tu
requirements.txt
:Escribe el código o usa el siguiente ejemplo para publicar notificaciones de presupuesto en un canal de chat de Slack mediante la API de Slack.
Asegúrese de que los siguientes parámetros postMessage de la API de Slack estén configurados correctamente:
- Token de acceso OAuth de usuario bot
- Nombre del canal
Código de ejemplo:
Node.js
Python
Ahora puedes Probar tu función de Cloud Functions para que un mensaje aparezca en Slack.
Limita (inhabilita) la facturación para detener el uso
En este ejemplo, se muestra cómo limitar los costos y detener el uso de un proyecto mediante la inhabilitación de la Facturación de Cloud. Inhabilitar la facturación en un proyecto hará que todos los servicios de Google Cloud del proyecto finalicen, incluidos los servicios de nivel gratuito.
¿Por qué inhabilitar la facturación?
Es posible que limites los costos porque tienes un límite estricto en la cantidad de dinero que puedes invertir en Google Cloud. Esto es habitual en el caso de estudiantes, investigadores o desarrolladores que trabajan en entornos de zona de pruebas. En estos casos, quieres detener el gasto y es posible que estés dispuesto a cerrar todos los servicios y el uso de Google Cloud cuando se alcance el límite del presupuesto.
Para nuestro ejemplo, usamos acme-backend-dev como un proyecto de no producción en el cual la Facturación de Cloud se puede inhabilitar de forma segura.
Antes de comenzar a trabajar con este ejemplo, asegúrate de haber hecho lo siguiente:
Habilita la API de Cloud Billing. Tu Cloud Function debe llamar a la API de Cloud Billing para inhabilitar Facturación de Cloud en un proyecto.
Configura un presupuesto para supervisar los costos del proyecto y habilitar las notificaciones de presupuesto.
Escribe una Cloud Function
A continuación, deberás configurar la función de Cloud Functions para llamar a la API de Cloud Billing. Esto permite que la función de Cloud Functions inhabilite la Facturación de Cloud para nuestro proyecto de ejemplo acme-backend-dev.
Crea una función nueva mediante los pasos que se describen en Crea una Cloud Function. Asegúrate de que el activador esté configurado con el mismo tema de Pub/Sub que usa el presupuesto.
Agrega las siguientes dependencias:
Node.js
Copia lo siguiente en tu
package.json
:Python
Copia lo siguiente en tu
requirements.txt
:Copia el código que aparece a continuación en la Cloud Function.
Configura la función para que se ejecute en “stopBilling” (Node) o “stop_billing” (Python).
Según tu entorno de ejecución, la variable de entorno
GOOGLE_CLOUD_PROJECT
puede configurarse automáticamente. Revisa la lista de variables del entorno que se configuran automáticamente y determina si necesitas configurar de forma manual la variableGOOGLE_CLOUD_PROJECT
para el proyecto en que deseas limitar (inhabilitar) la Facturación de Cloud.
Node.js
Python
Configura los permisos de la cuenta de servicio
Tu Cloud Function se ejecuta como una cuenta de servicio creada de manera automática. Para que la cuenta de servicio pueda inhabilitar la facturación, debes otorgarle los permisos correctos, como los de Administrador de facturación.
Para identificar la cuenta de servicio correcta, visualiza los detalles de la función de Cloud Functions. La cuenta de servicio se encuentra en la parte inferior de la página.
Puedes administrar los permisos de administrador de facturación en la página de Facturación de la consola de Google Cloud.
Para otorgar privilegios de administrador de cuenta de facturación a la cuenta de servicio, selecciona el nombre de la cuenta de servicio.
Valida que la Facturación de Cloud esté inhabilitada
Cuando el presupuesto envía una notificación, el proyecto especificado ya no tendrá una cuenta de facturación de Cloud. Si deseas probar la función, publica un mensaje de muestra con el mensaje de prueba anterior. El proyecto ya no podrá verse en la cuenta de facturación de Cloud, y los recursos del proyecto estarán inhabilitados, incluida la función de Cloud Functions si está en el mismo proyecto.
Puedes volver a habilitar la Facturación de Cloud de forma manual para el proyecto en la consola de Google Cloud.
Controla el uso de manera selectiva
La limitación (inhabilitación) de la Facturación de Cloud, como se describe en el ejemplo anterior, es binaria y terminal. El proyecto estará habilitado o inhabilitado. Cuando está inhabilitado, todos los servicios se detienen y, al final, todos los recursos se borran.
Si requieres una respuesta más matizada, puedes controlar los recursos de manera selectiva. Por ejemplo, si deseas detener algunos recursos de Compute Engine, pero dejar Cloud Storage intacto, puedes controlar el uso de forma selectiva. Esto reduce el costo por hora sin inhabilitar completamente el entorno.
Puedes escribir una política matizada a tu gusto. Sin embargo, en nuestro ejemplo, el proyecto ejecuta una investigación con varias máquinas virtuales de Compute Engine y almacena resultados en Cloud Storage. Con esta función de Cloud Functions de ejemplo, se cerrarán todas las instancias de Compute Engine, pero los resultados almacenados no se verán afectados después de que se exceda el presupuesto.
Escribe una Cloud Function
Crea una función nueva mediante los pasos que se describen en Crea una Cloud Function. Asegúrate de que el activador esté configurado con el mismo tema de Pub/Sub que usa el presupuesto.
Asegúrate de que agregaste las dependencias que se describen en Limita (inhabilita) la facturación para detener el uso.
Copia el código que aparece a continuación en la Cloud Function.
Configura la función que se ejecutará en “limitUse” (Nodo) o “limit_use” (Python).
Según tu entorno de ejecución, la variable de entorno
GCP_PROJECT
puede configurarse automáticamente. Revisa la lista de variables del entorno que se configuran automáticamente y determina si necesitas configurar de forma manual la variableGCP_PROJECT
para el proyecto que ejecuta las máquinas virtuales.Establece el parámetro ZONE. Esta será la zona en la que se detendrán las instancias para esta muestra.
Node.js
Python
Configura los permisos de la cuenta de servicio
- Tu Cloud Function se ejecuta como una cuenta de servicio creada de manera automática. Para controlar el uso, tienes que otorgar permisos de cuenta de servicio a cualquier servicio en el proyecto que necesite hacer cambios.
- Para identificar la cuenta de servicio correcta, visualiza los detalles de la función de Cloud Functions. La cuenta de servicio se encuentra en la parte inferior de la página.
- En la consola de Google Cloud, ve a la página IAM para configurar los permisos correspondientes.
Ir a la página IAM
Valida que las instancias se detengan
Cuando el presupuesto envía una notificación, las máquinas virtuales de Compute Engine se detienen.
Para probar la función, publica un mensaje de muestra con el mensaje de prueba anterior. Para validar que la función se ejecutó de manera correcta, verifica las máquinas virtuales de Compute Engine en la consola de Google Cloud.