Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Etichettatura automatica di istanze e dischi Google Cloud Compute Engine alla creazione

By Avi KeinanNov 1, 20204 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Eviti costi cloud occulti che si accumulano nel tempo etichettando le istanze fin dall'avvio.

Come individuare le istanze "fantasma"

Analizzando l'utilizzo di Google Cloud Compute Engine, può capitare di trovare istanze o dischi senza nome o, peggio ancora, con un nome poco chiaro. Queste risorse possono essere uno spreco totale di denaro oppure rivelarsi fondamentali per i workloads di produzione.

Spesso si tratta di istanze create anni prima, di cui nessuno in azienda ha più informazioni né le credenziali per accedervi.

Per evitare questo problema, le aziende impongono policy di etichettatura che obbligano ogni istanza appena creata ad avere un'etichetta Name/Owner/Project/ecc.

Le etichette in Google Cloud Compute Engine non comportano alcun costo aggiuntivo.

…tuttavia, dato che a lanciare le istanze sono persone e script di automazione scritti da persone, il processo è facilmente soggetto a errori.

Per ovviare a questi casi ho creato una soluzione di etichettatura automatica per Google Cloud (una soluzione analoga per AWS è disponibile qui) che applica automaticamente alle istanze l'etichetta created-by e ai dischi le etichette created-by e instance.

In questo modo, se in futuro qualcuno si imbatte in un'istanza o in un disco di cui ignora lo scopo, queste etichette renderanno immediato risalire a chi li ha configurati.

Le etichette di Google Cloud accettano solo un set specifico di caratteri. Lo script sostituirà quindi la chiocciola (@) nell'email dell'utente con un underscore ( _) e il punto ( .) con un trattino ( -).

Come funziona l'etichettatura automatica?

Panoramica del processo di etichettatura

Una nuova macchina Compute Engine viene creata da un utente o da un service account.

  1. La chiamata API viene registrata in StackDriver; tramite uno StackDriver sink (noto anche come Operations Logging) l'evento viene inviato a Cloud Pub/Sub.
  2. Cloud Pub/Sub invoca una Cloud Function passandole le informazioni dell'evento.
  3. Cloud Functions etichetta l'istanza e i relativi dischi.

Come implementare l'etichettatura automatica per istanze e dischi

Se è la prima volta che distribuisci una function, verifica che la Cloud Build API sia abilitata.

1. Crea un service account dedicato con i privilegi minimi

Questo passaggio è facoltativo, ma fortemente consigliato!

Quando crei una nuova cloud function, per impostazione predefinita questa utilizza il service account di App Engine con i permessi del ruolo Editor sull'intero progetto.

Il ruolo Editor consente alla function di modificare qualsiasi risorsa del progetto: per ragioni di sicurezza è meglio assegnarle il minor numero possibile di permessi, così che, in caso di errore, sia limitata a un set ristretto di azioni — quelle che le permettono di leggere le informazioni di istanze e dischi e di impostarne le etichette:

# GCP IAM Permissions required for the function:
compute.disks.get
compute.disks.setLabels
compute.instances.get
compute.instances.setLabels

Creare un Service Account con un ruolo personalizzato è un'operazione un po' macchinosa, che richiede vari passaggi su schermate diverse. Per semplificare, ecco i comandi gcloud da usare:

# Replace <project-id> with your project id. 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

L'indirizzo email del nuovo service account è autolabel-instances@ .iam.gserviceaccount.com

2. Vai alla pagina Cloud Functions e fai clic su CREATE FUNCTION.

a) Assegna un nome alla function e imposta il trigger su Cloud Pub/Sub. Poi, nel riquadro sottostante, fai clic su CREATE A TOPIC e dai un titolo al nuovo topic.

b) Se hai saltato la creazione del service account, fai clic sui pulsanti SAVE e Next; in caso contrario, fai clic su VARIABLES, NETWORKING AND ADVANCED SETTINGS, seleziona il service account creato e poi fai clic sui pulsanti SAVE e NEXT.

c) Imposta il runtime della function su Python 3.7.

Poi fai clic su Source code e seleziona ZIP Upload: puoi scaricare il file zip dal nostro repository GitHub (contiene anche il codice sorgente della function). Infine, fai clic su DEPLOY.

3. Vai a StackDriver Logging

Nella casella di ricerca, fai clic sulla freccia a destra, passa al filtro avanzato e incolla quanto segue:

resource.type="gce_instance"
jsonPayload.event_subtype="compute.instances.insert"
jsonPayload.event_type="GCE_API_CALL"

Poi fai clic su CREATE SINK. Assegna un nome al Sink, imposta il servizio Sink su Pub/Sub e imposta la destinazione del Sink sul topic Pub/Sub creato al passaggio precedente. Infine, fai clic su Create Sink.

4. Avvia un'istanza per verificare che la function funzioni correttamente.

Vai alla pagina VM instances: la nuova istanza dovrebbe risultare etichettata automaticamente.

Pagina VM instances

Vai alla pagina Disks: anche i dischi dell'istanza dovrebbero risultare etichettati automaticamente.

Pagina Disks

Note:

Questa soluzione etichetta soltanto le istanze create dopo l'installazione della Cloud Function.

Abbiamo rilasciato in open source Iris, una soluzione completa sviluppata da DoiT International per etichettare automaticamente le risorse Google Cloud.