Evita costos ocultos en la nube etiquetando tus instancias desde el momento en que se crean.

Cómo identificar las instancias "John Doe"
Al revisar el uso de Google Cloud Compute Engine, puede que te encuentres con instancias o discos sin nombre o, peor aún, con un nombre poco claro. Estos recursos pueden ser dinero tirado a la basura o, por el contrario, resultar críticos para workloads en producción.
Algunas instancias pueden tener varios años de antigüedad, sin que nadie en la organización tenga información sobre ellas ni las credenciales para conectarse.
Para evitar este problema, las empresas aplican políticas de etiquetado: cada instancia que se aprovisiona debe llevar una etiqueta de Nombre/Propietario/Proyecto/etc.
Usar etiquetas en Google Cloud Compute Engine no tiene costo adicional.
…sin embargo, como las personas lanzan instancias y escriben scripts de automatización que también las lanzan, este proceso es propenso a errores.
Para evitar esos casos, creé una solución de etiquetado automático para Google Cloud (puedes encontrar una similar para AWS aquí) que etiqueta automáticamente las instancias con la etiqueta created-by y los discos con las etiquetas created-by e instance.
Así, en el futuro, si alguien se topa con una instancia o un disco cuyo propósito desconoce, estas etiquetas le facilitarán identificar quién lo configuró.
Las etiquetas de Google Cloud están limitadas a un conjunto específico de caracteres. Por eso, el script reemplaza el signo de arroba (@) del email del usuario por un guion bajo ( _), y el punto ( .) por un guion ( -).
¿Cómo funciona el etiquetado automático?

Visión general del proceso de etiquetado
Un usuario o una cuenta de servicio crea una nueva máquina de Compute Engine.
- La llamada a la API se registra en StackDriver y, mediante un sink de StackDriver (también conocido como Operations Logging), el evento se envía a Cloud Pub/Sub.
- Cloud Pub/Sub invoca una Cloud Function con la información del evento.
- Cloud Functions etiqueta la instancia y los discos asociados.
Cómo implementar el etiquetado automático para instancias y discos
Si es la primera vez que despliegas una function, asegúrate de tener habilitada la API de Cloud Build.
1. Crea una cuenta de servicio dedicada con los privilegios mínimos
¡Este paso es opcional, pero muy recomendable!
Cuando creas una nueva cloud function, por defecto se utiliza la cuenta de servicio de App Engine con permisos de Editor a nivel de todo el proyecto.
El permiso de Editor le da a la function acceso para modificar recursos en todo el proyecto. Por seguridad, conviene otorgarle los menores permisos posibles, de modo que, ante un error, la function quede limitada a un conjunto reducido de permisos: solo los necesarios para listar la información de instancias y discos y aplicarles etiquetas:
# Permisos de IAM en GCP requeridos por la function:
compute.disks.get
compute.disks.setLabels
compute.instances.get
compute.instances.setLabels
Crear una cuenta de servicio con un rol personalizado puede resultar algo complejo y requiere varios pasos en distintas pantallas. Para facilitarlo, aquí tienes los comandos de gcloud para crearla:
# Reemplaza <project-id> con el ID de tu proyecto. gcloud iam roles create autolabel_instances --title=autolabel-instances --project <project-id> --description='cloud function service account to label instanes and disks upon creation' --permissions=compute.disks.get,compute.disks.setLabels,compute.instances.get,compute.instances.setLabels --stage=GAgcloud iam service-accounts create autolabel-instancesgcloud projects add-iam-policy-binding <project-id> --member serviceAccount:autolabel-instances@<project-id>.iam.gserviceaccount.com --role projects/<project-id>/roles/autolabel_instancesgcloud projects add-iam-policy-binding <project-id> --member serviceAccount:autolabel-instances@<project-id>.iam.gserviceaccount.com --role roles/logging.logWriter
El email de la nueva cuenta de servicio es autolabel-instances@
2. Ve a la página de Cloud Functions y haz clic en CREATE FUNCTION.

a) Asígnale un nombre a la function y cambia el trigger a Cloud Pub/Sub. Luego, en el cuadro de abajo, haz clic en CREATE A TOPIC y dale un título al nuevo topic.

b) Si te saltaste la creación de la cuenta de servicio, haz clic en SAVE y Next. Si no, haz clic en VARIABLES, NETWORKING AND ADVANCED SETTINGS, selecciona la cuenta de servicio que creaste y luego haz clic en SAVE y NEXT.
c) Cambia el runtime de la function a Python 3.7.

Después, haz clic en Source code y cámbialo a ZIP Upload. Puedes descargar el archivo zip desde nuestro repositorio en GitHub (también contiene el código fuente de la function). Por último, haz clic en DEPLOY.
3. Ve a StackDriver Logging
En el cuadro de búsqueda, haz clic en la flecha (a la derecha) y cambia al filtro avanzado. Pega lo siguiente:
resource.type="gce_instance"
jsonPayload.event_subtype="compute.instances.insert"
jsonPayload.event_type="GCE_API_CALL"
Luego, haz clic en CREATE SINK. Asígnale un nombre al Sink, cambia el servicio del Sink a Pub/Sub y define como destino del Sink el topic de Pub/Sub que creaste en el paso anterior. Por último, haz clic en Create Sink.

4. Lanza una instancia para comprobar que la function funciona.
Ve a la página VM instances: la nueva instancia debería aparecer etiquetada automáticamente.

Página de VM instances
Ve a la página Disks: los discos de la instancia también deberían aparecer etiquetados automáticamente.

Página de Disks
Notas:
Esta solución solo etiquetará las instancias creadas después de instalar la Cloud Function.
Liberamos como código abierto Iris, una solución completa creada por DoiT International para etiquetar automáticamente recursos de Google Cloud.