Questo tutorial è rivolto ai team DevOps che vogliono ricevere notifiche per importanti eventi Google Cloud inviati alle proprie piattaforme di collaborazione, ad esempio Google Chat, Slack o Microsoft Teams. Le notifiche liberano i team dal dover accedere regolarmente alla console Google Cloud per verificare la disponibilità di aggiornamenti sugli eventi.
Come esempio per questo tutorial, le notifiche vengono generate dopo aver acquisito snapshot del disco. L'acquisizione di uno istantanea del disco esegue il backup dei dati dei dischi permanenti a livello di zona o di regione. Puoi modificare questo tutorial in modo da eseguire automaticamente il push delle notifiche ai tuoi sistemi di collaborazione quando si verificano altri eventi Google Cloud importanti, ad esempio quando viene creata o eliminata un'istanza di macchina virtuale (VM).
Il codice per questo tutorial è disponibile in un repository di GitHub.
Questo tutorial è destinato a ingegneri specializzati in DevOps e tecnologia cloud. per cui hai familiarità con Cloud Logging, Pub/Sub e Cloud Functions.
Lo stato State of DevOps segnala le funzionalità identificate che favoriscono le prestazioni relative alla distribuzione del software. Questo tutorial ti aiuterà a utilizzare le seguenti funzionalità:
Architettura
Il seguente diagramma mostra i diversi componenti utilizzati in questo tutorial.
Per prima cosa, crei un disco permanente e acquisisci uno snapshot del disco. Quindi, filtra gli eventi di log che corrispondono agli snapshot dei dischi riusciti ed esporti gli eventi pubblicandoli in un argomento Pub/Sub. Una funzione Cloud Functions legge il messaggio dall'argomento e invia una notifica push a un webhook. Per questo tutorial, questo webhook è rappresentato da una Cloud Function.
Obiettivi
- Configura Cloud Logging per esportare gli eventi selezionati in Pub/Sub in modo che Cloud Functions possa utilizzarli.
- Esegui il deployment di una Cloud Function che utilizza gli eventi esportati da Cloud Logging e quindi attiva un webhook.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Nella console Google Cloud, attiva Cloud Shell.
Userai Cloud Shell per eseguire tutti i comandi di questo tutorial.
Abilita le API Compute Engine, Cloud Logging, Cloud Functions e Pub/Sub:
gcloud services enable \ compute.googleapis.com \ logging.googleapis.com \ cloudfunctions.googleapis.com \ pubsub.googleapis.com
Preparazione dell'ambiente
In Cloud Shell, imposta il valore predefinito di
gcloud
per la regione e la zona di Compute Engine che vuoi utilizzare per questo tutorial:gcloud config set compute/region us-central1 gcloud config set compute/zone us-central1-a
Questo tutorial utilizza la regione
us-central1
e la zonaus-central1-a
. Puoi cambiare la regione e la zona in base alle tue esigenze. Per ulteriori informazioni, consulta Area geografica e regioni.Definisci le variabili di ambiente che utilizzi per questo tutorial:
PROJECT=$(gcloud config get-value project) PUBSUB_TOPIC="gce-snapshots-events" DISK="my-disk-1" WEBHOOK_NAME="webhookEmulator" WEBHOOK_URL="https://$(gcloud config get-value compute/region)-$PROJECT.cloudfunctions.net/$WEBHOOK_NAME"
Crea le risorse
In questa sezione creerai le seguenti risorse Google Cloud per questo tutorial:
- Argomento Pub/Sub
- Sink Cloud Logging
- Funzione Cloud Functions Functions
crea un argomento Pub/Sub
In Cloud Shell, crea un argomento Pub/Sub per pubblicare messaggi evento in:
gcloud pubsub topics create $PUBSUB_TOPIC
crea un sink di Cloud Logging in Pub/Sub
Cloud Logging ti consente di archiviare, cercare e analizzare eventi di Google Cloud. Puoi filtrare ed esportare questi log in Cloud Storage, BigQuery e Pub/Sub.
In Cloud Shell, esporta i log generati dagli snapshot del disco in Pub/Sub:
gcloud logging sinks create gce-events-sink \ pubsub.googleapis.com/projects/$PROJECT/topics/$PUBSUB_TOPIC \ --log-filter='resource.type="gce_disk" jsonPayload.event_type="GCE_OPERATION_DONE" jsonPayload.event_subtype="compute.disks.createSnapshot"'
L'output contiene l'indirizzo email dell'account di servizio che Cloud Logging utilizza quando pubblica i log nell'argomento Pub/Sub che hai creato in precedenza. Questo indirizzo email assuma la forma di
SERVICE_ACCOUNT_NAME@gcp-sa-logging.iam.gserviceaccount.com
.Copia l'indirizzo email dell'account di servizio. Ti servirà nella prossima sezione.
Configurare le autorizzazioni
In Cloud Shell, concedi all'account di servizio il ruolo IAM Publisher Pub/Sub (
roles/pubsub.publisher
) in modo che possa pubblicare messaggi nell'argomento Pub/Sub:gcloud beta pubsub topics add-iam-policy-binding $PUBSUB_TOPIC \ --member='serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS' \ --role='roles/pubsub.publisher'
Sostituisci
SERVICE_ACCOUNT_EMAIL_ADDRESS
con l'indirizzo email che hai copiato nella sezione precedente.
Crea un webhook
In genere, in produzione, ricevi notifiche push di eventi importanti di Google Cloud alle tue piattaforme di collaborazione. La maggior parte di queste piattaforme offre webhook. In questo tutorial creerai una Cloud Function per simulare un webhook da una di queste piattaforme. Questa Cloud Function, che viene attivata tramite HTTP, stampa i contenuti dei messaggi ricevuti.
Per impostazione predefinita, qualsiasi utente o servizio può richiamare una funzione Cloud Functions HTTP. Puoi configurare Identity and Access Management (IAM) sulle funzioni HTTP per limitare questo comportamento in modo che la funzione HTTP possa essere richiamata solo fornendo le credenziali di autenticazione nella richiesta.
In Cloud Shell, clona il repository Git che contiene il codice tutorial:
git clone https://github.com/GoogleCloudPlatform/gcf-notification-forwarding
Passa alla directory di lavoro:
cd gcf-notification-forwarding/
Esegui il deployment del webhook
webhookEmulator
della funzione Cloud Function utilizzando un trigger HTTP:gcloud functions deploy $WEBHOOK_NAME \ --runtime=nodejs8 \ --trigger-http \ --allow-unauthenticated \ --source=webhook/
Il completamento di questo comando può richiedere fino a due minuti.
crea una Cloud Function per le notifiche push
Creerai una Cloud Function che sottoscrive l'argomento Pub/Sub creato in precedenza in modalità push. Quindi, ogni volta che Cloud Logging esporta (o esegue il push) di un evento nell'argomento Pub/Sub, questa Cloud Function viene attivata. La funzione riceve l'evento, lo elabora e lo invia all'endpoint HTTP del webhook che hai creato in precedenza.
In Cloud Shell, esegui il deployment della Cloud Function:
gcloud functions deploy pushEventsToWebhook \ --runtime=nodejs8 \ --trigger-topic=$PUBSUB_TOPIC \ --set-env-vars=WEBHOOK_URL=$WEBHOOK_URL \ --allow-unauthenticated \ --source=push_notification/
Test della configurazione
Per testare questa configurazione, acquisisci uno snapshot del disco e controlla se il webhook riceve il log eventi generato dallo snapshot del disco.
In Cloud Shell, crea un disco permanente a livello di zona. Il valore predefinito è un disco rigido standard da 500 GB.
gcloud compute disks create $DISK \ --zone=$(gcloud config get-value compute/zone)
Attiva la creazione di uno snapshot del disco che hai creato in precedenza:
gcloud compute disks snapshot $DISK \ --zone=$(gcloud config get-value compute/zone) \ --storage-location=$(gcloud config get-value compute/region)
Il completamento di questo comando può richiedere fino a due minuti. Dopo aver acquisito lo snapshot, viene generata una voce di log delle attività di amministrazione. Il log eventi viene filtrato e ne viene eseguito il push all'argomento Pub/Sub. La funzione Cloud Function sottoscritta la prende, la formatta e ne esegue il push all'endpoint HTTP del webhook.
Dopo alcuni minuti, controlla se il webhook ha ricevuto il log eventi:
gcloud beta functions logs read $WEBHOOK_NAME \ --region=$(gcloud config get-value compute/region) \ --limit=10
L'output è simile al seguente:
{ data:[ { "type":'disk', "url":'https://console.cloud.google.com/compute/disksDetail/zones/us-central1-a/disks/my-disk-1?project=$PROJECT&supportedpurview=project', "name":'my-disk-1' }, { "type":'project', "project_id":'$PROJECT', "project_url":'https://console.cloud.google.com/?project=$PROJECT' }, { "zone":'us-central1-a' }, { "date_time":'2020-04-15T09:07:21.205-06:00' } ] }
L'output mostra che il webhook ha ricevuto la notifica che indica che è stato eseguito un'istantanea del disco.
Esegui la pulizia
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Leggi ulteriori informazioni sull'osservabilità di Google Cloud.
- Scopri di più sul routing dei log per Cloud Logging.
- Ulteriori informazioni su Pub/Sub.
- Esplora i tutorial per Pub/Sub.
- Scopri di più su Cloud Functions.
- Esplora i tutorial per Cloud Functions.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.
- Leggi le nostre risorse su DevOps.
- Scopri di più sulle funzionalità DevOps correlate a questo tutorial:
- Esegui il controllo rapido di DevOps per comprendere la tua posizione rispetto al resto del settore.