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.
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 diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Vorbereitung
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Für alle Befehle in dieser Anleitung wird Cloud Shell verwendet.
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
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 Zoneus-central1-a
verwendet. Sie können die Region und Zone an Ihre Anforderungen anpassen. Weitere Informationen hierzu finden Sie unter Geografie und Regionen.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.
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
.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.
Klonen Sie in Cloud Shell das Git-Repository, das den Anleitungscode enthält:
git clone https://github.com/GoogleCloudPlatform/gcf-notification-forwarding
Wechseln Sie zum Arbeitsverzeichnis:
cd gcf-notification-forwarding/
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.
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)
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.
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/?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, wenn Sie das für die Anleitung erstellte Projekt löschen.
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Nächste Schritte
- Google Cloud Observability
- Logs für Cloud Logging weiterleiten
- Pub/Sub
- Anleitungen für Pub/Sub
- Cloud Functions
- Anleitungen für Cloud Functions
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center
- Ressourcen zu DevOps
- Mehr über die DevOps-Ressourcen aus dieser Anleitung erfahren:
- Über den DevOps Quick Check erfahren, wo Sie im Vergleich zum Rest der Branche stehen