Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Tagli del 60% i costi di Google Compute Engine con Zorya

By Aviv LauferFeb 26, 20186 min read

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

1 bimx94i4agv23fzxumvs4a

Gli ambienti non di produzione nel cloud sono una grande risorsa: disponibili in qualsiasi momento, esattamente quando servono. Ma questa comodità a volte ha un prezzo. Le istanze non di produzione vengono in genere utilizzate durante il giorno e, quando si è presi dal lavoro, capita di dimenticare di spegnerle fuori orario o nei weekend. Anche se ogni istanza costa solo pochi centesimi all'ora, nel corso del mese il conto può lievitare rapidamente fino a migliaia di dollari.

In qualità di Premier e MSP Partner di Google, in DoiT International lavoriamo con centinaia di startup e aziende che eseguono i propri workloads su Google Cloud Platform e, in particolare, su Google Compute Engine. La nostra missione è ridurre la spesa cloud mensile dei clienti progettando sistemi più intelligenti, efficienti e convenienti.

È proprio in quest'ottica che oggi rilasciamo in open source Zorya. Nella mitologia slava, le Zorya sono due dee guardiane: le Zorya rappresentano la stella del mattino e la stella della sera. Chi ha letto o visto American Gods di Neil Gaiman ricorderà sicuramente queste due sorelle.

Ma cos'è esattamente Zorya? È un piccolo software che può eseguire sul Suo account Google Cloud Platform e che Le consente di configurare la pianificazione delle istanze Google Compute Engine e di definire una policy valida per tutti i progetti della Sua organizzazione.

Volevamo che Zorya fosse davvero semplice da installare e mantenere, quindi ci siamo posti i seguenti obiettivi di design:

  • Eseguire Zorya in modalità serverless, riducendo l'onere di gestione
  • Poter configurare più pianificazioni e policy
  • Supportare più progetti da un'unica istanza di Zorya
  • Mantenere bassi i costi operativi di Zorya

Abbiamo deciso di sviluppare Zorya ed eseguirlo su Google App Engine, Standard Environment. Già questa scelta ci ha permesso di soddisfare due dei requisiti:

  1. Funzionamento serverless grazie ad App Engine: nessun server da gestire e alta disponibilità e scalabilità out of the box.
  2. Costi operativi contenuti grazie al modello di pricing di Google App Engine e al fatto che Zorya "si sveglia" solo una volta all'ora; nel resto del tempo non consuma risorse, mantenendo così bassa la spesa.

Il backend di Zorya è scritto in Python, mentre il frontend è basato su React. Come database per i dati di configurazione abbiamo scelto Google Cloud Datastore.

Backend

Il backend espone una semplice API RESTful per leggere e impostare schedules e policies.

L'entità Schedule è composta da un nome, un fuso orario e una matrice 7x24 che rappresenta ogni ora di ogni giorno della settimana. Il valore 0 indica che l'istanza deve essere ferma, mentre 1 indica che deve essere attiva.

L'entità Policy è composta da un nome, un elenco di progetti, il nome della pianificazione associata e un elenco di label di Google Compute Engine, ovvero coppie nome-valore.

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

L'API è molto semplice e dispone di soli otto endpoint:

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

La documentazione dell'API e un esempio di codice consumer in alcuni linguaggi sono disponibili qui.

Sfruttando lo scheduler integrato di Google App Engine, un task verifica periodicamente le policy per capire se è necessario modificare lo stato delle istanze.

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

Quando è necessario cambiare stato, Zorya scorre i progetti pertinenti e aggiorna lo stato delle istanze che presentano le coppie di label richieste.

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

Autenticazione

Per consentire a Zorya di gestire le istanze per Suo conto in qualsiasi progetto della Sua organizzazione, dovrà creare una nuova voce nell'IAM dell'Organizzazione e assegnare al service account di Zorya il ruolo "Compute Admin".

Per prima cosa, vada su https://console.cloud.google.com, selezioni "IAM & Admin" dal menu e infine scelga il nome della Sua organizzazione (non quello di un progetto specifico) dal menu a tendina in alto:

1 b 2mrjt3qw3x93wamm1b0a

Il service account a cui assegnare le autorizzazioni è: [email protected]; sostituisca project-id con l'ID reale del progetto in cui ha distribuito Zorya.

Frontend

Dato che la maggior parte degli utenti userà direttamente l'API di Zorya, abbiamo realizzato un'interfaccia utente piuttosto essenziale per creare schedules e policies. Il frontend è basato su ReactJS ed è pubblicato sul modulo predefinito dell'applicazione App Engine.

Per l'accesso all'app utilizziamo Cloud Identity-Aware Proxy. Cloud IAP verifica l'identità dell'utente e determina se può accedere all'applicazione. La configurazione è semplicissima: basta andare nella console GCP, abilitare IAP sulla Sua applicazione App Engine e aggiungere gli utenti o i gruppi che devono avere accesso a Zorya.

Per iniziare a utilizzare l'interfaccia utente, apra il browser all'indirizzo project-id.appspot.com sostituendo project-id con l'ID del Suo progetto Google Cloud Platform.

Dall'interfaccia è facile impostare una nuova pianificazione, come in questo esempio: dal lunedì al venerdì, dalle 8 alle 19 nel fuso orario US/Eastern. In quella finestra le istanze restano attive; al di fuori, Zorya le arresta per poi riavviarle il giorno successivo.

1 9d5lmvhuyf2pmjtctpcqagEditor delle pianificazioni di Zorya

Una volta configurata la pianificazione, dovrà definire una policy per applicarla a un sottoinsieme di istanze. Supponiamo di voler applicare la pianificazione a tutte le istanze del progetto doit-playground con le label env:dev, role:frontend e app:reoptimize: verranno coinvolte solo le istanze che presentano tutte e tre le coppie di label.

1 pw8la9eyh98tmovrohzzpwConfigurazione di una policy di Zorya

Riduzione dei costi

Per monitorare i costi di Google Cloud Platform usiamo DoiT Cloud Intelligence™. Cloud Intelligence permette di suddividere i costi per label all'interno di una determinata Organizzazione GCP e di visualizzarli in modo chiaro ed efficace.

Abbiamo iniziato a usare Zorya internamente a dicembre 2017, quando i nostri costi di Google Compute Engine si attestavano in media sui 780 dollari al giorno. Con Zorya attivo sugli ambienti di sviluppo e test, oggi la spesa GCE è scesa in media a soli 320 dollari al giorno: una riduzione di quasi il 60%.

1 toihb7mxeu58exxuvbqkcq (1)Dashboard di DoiT Cloud Intelligence

Conclusioni

Se anche Lei vuole usare Zorya per ottimizzare la fattura mensile di Google Cloud Platform, ci lasci una star su GitHub! ;-) Siamo molto aperti alle pull request e ogni contributo per migliorare Zorya nel tempo è benvenuto.


Vuole leggere altri articoli? Dia un'occhiata al nostro blog oppure segua Aviv su Twitter.