Benachrichtigungen für Google Cloud-Ereignisse senden

Diese Anleitung richtet sich an DevOps-Teams, die Benachrichtigungen über wichtige Google Cloud-Ereignisse auf ihrer Plattform für die Zusammenarbeit erhalten möchten, z. B. Hangouts Chat, Slack oder Microsoft Teams. Mit Benachrichtigungen müssen sich Teams nicht regelmäßig in der Google Cloud Console anmelden, um nach Updates von Ereignissen zu suchen.

In dieser Anleitung werden als Beispiel Benachrichtigungen erstellt, nachdem Sie Laufwerk-Snapshots erstellt haben. Durch das Erstellen eines Laufwerk-Snapshots werden Daten von zonalen oder regionalen nichtflüchtigen Speichern gesichert. Sie können diese Anleitung so ändern, dass Benachrichtigungen automatisch an Ihre Systeme für die Zusammenarbeit gesendet werden, wenn andere wichtige Google Cloud-Ereignisse auftreten, z. B. wenn eine VM-Instanz erstellt oder gelöscht wird.

Der Code für diese Anleitung ist in einem GitHub-Repository verfügbar.

Diese Anleitung richtet sich an Entwickler, die auf DevOps und Cloud-Technologie spezialisiert sind. Dabei wird davon ausgegangen, dass Sie mit Cloud Logging, Pub/Sub und Cloud Functions vertraut sind.

Die State of DevOps-Berichte haben Faktoren aufgezeigt, die die Leistung bei der Softwarebereitstellung beeinflussen. Diese Anleitung hilft Ihnen bei den folgenden Faktoren:

Architektur

Das folgende Diagramm zeigt die verschiedenen Komponenten, die Sie in dieser Anleitung verwenden.

Architektur eines Systems, das Benachrichtigungen nach dem Erstellen von Laufwerk-Snapshots sendet.

Als Erstes erstellen Sie einen nichtflüchtigen Speicher und machen einen Laufwerk-Snapshot. Anschließend filtern Sie die Logereignisse, die erfolgreich erstellten Laufwerk-Snapshots entsprechen, und exportieren die Ereignisse, indem Sie sie in einem Pub/Sub-Thema veröffentlichen. Eine Cloud Functions-Funktion liest die Nachricht aus dem Thema und sendet eine Push-Benachrichtigung an einen Webhook. In der vorliegenden Anleitung wird dieser Webhook durch eine Cloud Functions-Funktion dargestellt.

Ziele

  • Cloud Logging so einrichten, dass ausgewählte Ereignisse nach Pub/Sub exportiert werden, damit sie von Cloud Functions verarbeitet werden können.
  • Eine Cloud Functions-Funktion bereitstellen, die von Cloud Logging exportierte Ereignisse verarbeitet und dann einen Webhook auslöst.

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Vorbereitung

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  3. Aktivieren Sie Cloud Shell in der Cloud Console.

    Cloud Shell aktivieren

    Für alle Befehle in dieser Anleitung wird Cloud Shell verwendet.

  4. Aktivieren Sie die Compute Engine API, die Cloud Logging API, die Cloud Functions API und die Pub/Sub API:

    gcloud services enable \
        compute.googleapis.com \
        logging.googleapis.com \
        cloudfunctions.googleapis.com \
        pubsub.googleapis.com
    

Umgebung vorbereiten

  1. Legen Sie in Cloud Shell den Standardwert gcloud für die Compute Engine-Region und -Zone fest, die Sie für diese Anleitung verwenden möchten:

    gcloud config set compute/region us-central1
    gcloud config set compute/zone us-central1-a
    

    In dieser Anleitung werden die Region us-central1 und die Zone us-central1-a verwendet. Sie können die Region und Zone an Ihre Anforderungen anpassen. Weitere Informationen hierzu finden Sie unter Geografie und Regionen.

  2. Definieren Sie die Umgebungsvariablen, die Sie für diese Anleitung verwenden:

    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"
    

Ressourcen erstellen

In diesem Abschnitt erstellen Sie die folgenden Google Cloud-Ressourcen für diese Anleitung:

  • Pub/Sub-Thema
  • Cloud Logging-Senke
  • Cloud Functions-Funktion

Pub/Sub-Thema erstellen

  • Erstellen Sie in Cloud Shell ein Pub/Sub-Thema, in dem Ereignisnachrichten veröffentlicht werden:

    gcloud pubsub topics create $PUBSUB_TOPIC
    

Cloud Logging-Senke für Pub/Sub erstellen

Mit Cloud Logging können Sie Ereignisse aus Google Cloud speichern, suchen und analysieren. Sie können diese Logs filtern und in Cloud Storage, BigQuery und Pub/Sub exportieren.

  1. Exportieren Sie in Cloud Shell die von Laufwerk-Snapshots generierten Logs nach 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"'
    

    Die Ausgabe enthält die E-Mail-Adresse des Dienstkontos, die Cloud Logging verwendet, wenn Logs im zuvor erstellten Pub/Sub-Thema veröffentlicht werden. Diese E-Mail-Adresse hat das Format SERVICE_ACCOUNT_NAME@gcp-sa-logging.iam.gserviceaccount.com.

  2. Kopieren Sie die E-Mail-Adresse des Dienstkontos. Sie benötigen sie im nächsten Abschnitt.

Berechtigungen einrichten

  • Weisen Sie dem Dienstkonto in Cloud Shell die IAM-Rolle "Pub/Sub-Publisher" (roles/pubsub.publisher) zu, damit es Nachrichten im Pub/Sub-Thema veröffentlichen kann:

    gcloud beta pubsub topics add-iam-policy-binding $PUBSUB_TOPIC \
        --member='serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS' \
        --role='roles/pubsub.publisher'
    

    Ersetzen Sie SERVICE_ACCOUNT_EMAIL_ADDRESS durch die E-Mail-Adresse, die Sie im vorherigen Abschnitt kopiert haben.

Webhook erstellen

Normalerweise werden Sie in der Produktion durch Push-Benachrichtigungen, die an Ihre Plattformen für die Zusammenarbeit gesendet werden, über wichtige Google Cloud-Ereignisse informiert. Die meisten dieser Plattformen bieten Webhooks. In dieser Anleitung erstellen Sie eine Cloud Functions-Funktion, um einen Webhook von einer dieser Plattformen zu simulieren. Diese Cloud Functions-Funktion, die über HTTP ausgelöst wird, gibt den Inhalt der empfangenen Nachrichten aus.

Standardmäßig kann jeder Nutzer oder Dienst eine Cloud Functions-HTTP-Funktion aufrufen. Sie können IAM (Identity and Access Management) für HTTP-Funktionen konfigurieren, um dieses Verhalten einzuschränken, sodass die HTTP-Funktion nur aufgerufen werden kann, wenn in der Anfrage Anmeldedaten zur Authentifizierung angegeben werden.

  1. Klonen Sie in Cloud Shell das Git-Repository, das den Anleitungscode enthält:

    git clone https://github.com/GoogleCloudPlatform/gcf-notification-forwarding
    
  2. Wechseln Sie zum Arbeitsverzeichnis:

    cd gcf-notification-forwarding/
    
  3. Stellen Sie den Cloud Functions-Webhook webhookEmulator mithilfe eines HTTP-Triggers bereit:

    gcloud functions deploy $WEBHOOK_NAME \
        --runtime=nodejs8 \
        --trigger-http \
        --allow-unauthenticated \
        --source=webhook/
    

    Die Verarbeitung dieses Befehls kann bis zu zwei Minuten dauern.

Cloud Functions-Funktion für Push-Benachrichtigungen erstellen

Sie erstellen eine Cloud Functions-Funktion, die das Pub/Sub-Thema abonniert, das Sie zuvor im Push-Modus erstellt haben. Anschließend wird diese Cloud Functions-Funktion jedes Mal ausgelöst, wenn Cloud Logging ein Ereignis in das Pub/Sub-Thema exportiert (oder überträgt). Die Funktion empfängt das Ereignis, verarbeitet es und überträgt es an den HTTP-Endpunkt des Webhooks, den Sie zuvor erstellt haben.

  • Stellen Sie in Cloud Shell die Cloud Functions-Funktion bereit:

    gcloud functions deploy pushEventsToWebhook \
        --runtime=nodejs8 \
        --trigger-topic=$PUBSUB_TOPIC \
        --set-env-vars=WEBHOOK_URL=$WEBHOOK_URL \
        --allow-unauthenticated \
        --source=push_notification/
    

Einrichtung testen

Zum Testen der Einrichtung erstellen Sie einen Laufwerk-Snapshot und prüfen, ob der Webhook das Ereignisprotokoll empfängt, das der Laufwerk-Snapshot generiert.

  1. Erstellen Sie in Cloud Shell einen zonalen nichtflüchtigen Speicher. Dabei wird standardmäßig eine Standardfestplatte mit 500 GB verwendet.

    gcloud compute disks create $DISK \
        --zone=$(gcloud config get-value compute/zone)
    
  2. Lösen Sie das Erstellen eines Snapshots des zuvor erstellten Laufwerks aus:

    gcloud compute disks snapshot $DISK \
        --zone=$(gcloud config get-value compute/zone) \
        --storage-location=$(gcloud config get-value compute/region)
    

    Die Verarbeitung dieses Befehls kann bis zu zwei Minuten dauern. Nachdem der Snapshot erstellt wurde, wird ein Logeintrag der Administratoraktivität generiert. Das Ereignisprotokoll wird gefiltert und an das Pub/Sub-Thema gesendet. Die abonnierte Cloud Functions-Funktion ruft sie ab, formatiert sie und überträgt sie an den HTTP-Endpunkt des Webhooks.

  3. Prüfen Sie nach einigen Minuten, ob der Webhook das Ereignisprotokoll erhalten hat:

    gcloud beta functions logs read $WEBHOOK_NAME \
        --region=$(gcloud config get-value compute/region) \
        --limit=10
    

    Die Ausgabe sieht in etwa so aus:

    {
      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/home/dashboard?project=$PROJECT'
         },
         {
            "zone":'us-central1-a'
         },
         {
            "date_time":'2020-04-15T09:07:21.205-06:00'
         }
      ]
    }
    

    Die Ausgabe zeigt, dass der Webhook die Benachrichtigung erhalten hat, dass ein Laufwerk-Snapshot erstellt wurde.

Bereinigen

Am einfachsten vermeiden Sie weitere Kosten, indem Sie das für die Anleitung erstellte Projekt löschen.

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte