Serverlose Datenpipeline erstellen: IoT to Analytics

1. Übersicht/Einführung

Während mehrschichtige Anwendungen, die aus Web, Anwendungsservern und Datenbanken bestehen, die Grundlage der Webentwicklung bilden und den Ausgangspunkt für viele Websites darstellen, bringt der Erfolg oft Herausforderungen in Bezug auf Skalierbarkeit, Integration und Agilität mit sich. Wie können Daten beispielsweise in Echtzeit verarbeitet und auf mehrere wichtige Geschäftssysteme verteilt werden? Diese Probleme, zusammen mit den Anforderungen von Anwendungen im Internet, machten die Notwendigkeit eines verteilten Nachrichtensystems zur Folge und führten zu einem Architekturmuster, bei dem Datenpipelines verwendet werden, um stabile Echtzeitsysteme zu schaffen. Daher sind es sowohl für Entwickler als auch für Architekten wichtige Fähigkeiten, Echtzeitdaten in einem verteilten Nachrichtensystem zu veröffentlichen und dann eine Datenpipeline zu erstellen.

Überblick

In diesem Codelab erstellen Sie eine Wetterdatenpipeline, die mit einem IoT-Gerät (Internet der Dinge) beginnt, eine Nachrichtenwarteschlange zum Empfangen und Senden von Daten verwendet, eine serverlose Funktion nutzt, um die Daten in ein Data Warehouse zu verschieben, und dann ein Dashboard zu erstellen, das die Informationen anzeigt. Für das IoT-Gerät wird ein Raspberry Pi mit einem Wettersensor verwendet. Die Datenpipeline bilden mehrere Komponenten der Google Cloud Platform. Die Erweiterung des Raspberry Pi ist zwar von Vorteil, ist aber ein optionaler Teil dieses Codelabs. Die Streaming-Wetterdaten können durch ein Skript ersetzt werden.

79cd6c68e83f7fea.png

Nachdem Sie die Schritte in diesem Codelab abgeschlossen haben, haben Sie eine Streaming-Datenpipeline, die ein Dashboard mit Temperatur, Luftfeuchtigkeit, Taupunkt und Luftdruck versorgt.

e28ca9ea4abb1457.png

Aufgaben in diesem Lab

  • Google Pub/Sub verwenden
  • Google Cloud Functions-Funktion bereitstellen
  • Google BigQuery nutzen
  • Dashboard mit Google Data Studio erstellen
  • Wenn Sie den IoT-Sensor entwickeln, lernen Sie außerdem, wie Sie das Google Cloud SDK nutzen und wie Sie Remotezugriffsaufrufe auf die Google Cloud Platform sichern.

Voraussetzungen

Wenn Sie den IoT-Sensorteil dieses Codelabs erstellen möchten, anstatt Beispieldaten und ein Script zu verwenden, benötigen Sie außerdem Folgendes ( das hier als vollständiges Kit oder als Einzelteile bestellt werden kann).

  • Raspberry Pi Zero W mit Netzteil, SD-Speicherkarte und Gehäuse
  • USB-Kartenlesegerät
  • USB-Hub (um eine Tastatur und eine Maus an den einzigen USB-Anschluss des Raspberry Pi anzuschließen)
  • Steckplatinenkabel von Buchse zu Stecker
  • GPIO-Hammer-Header
  • BME280-Sensor
  • Lötkolben mit Lötkolben

Außerdem wird vorausgesetzt, dass Sie Zugang zu einem Computermonitor oder Fernseher mit HDMI-Eingang, HDMI-Kabel, Tastatur und Maus haben.

2. Einrichtung

Umgebung zum selbstbestimmten Lernen einrichten

Wenn Sie noch kein Google-Konto (Gmail oder G Suite) haben, müssen Sie ein Konto erstellen. Unabhängig davon, ob Sie bereits ein Google-Konto haben oder nicht, sollten Sie die kostenlose Testversion mit 300$Guthaben nutzen.

Melden Sie sich in der Google Cloud Platform Console an ( console.cloud.google.com). Sie können das Standardprojekt („Mein erstes Projekt“) für dieses Lab verwenden oder ein neues Projekt erstellen. Wenn Sie ein neues Projekt erstellen möchten, können Sie die Seite Ressourcen verwalten verwenden. Die Projekt-ID muss in allen Google Cloud-Projekten eindeutig sein. Der unten angezeigte Name ist bereits vergeben und funktioniert nicht für Sie. Notieren Sie sich Ihre Projekt-ID (d.h. Ihre Projekt-ID wird _____), da sie später benötigt wird.

f414a63d955621a7.png

3415e861c09cd06a.png

Dieses Codelab sollte nicht mehr als ein paar Euro kosten. Wenn Sie jedoch mehr Ressourcen verwenden oder sie nicht laufen lassen, kann es mehr sein. Gehen Sie unbedingt den Abschnitt „Cleanup“ am Ende des Codelabs durch.

3. BigQuery-Tabelle erstellen

BigQuery ist ein serverloses, in hohem Maße skalierbares und kostengünstiges Data Warehouse für Unternehmen. Es eignet sich ideal zum Speichern von Daten, die von IoT-Geräten gestreamt werden, und bietet gleichzeitig ein Analysedashboard, um die Informationen abzufragen.

Lassen Sie uns eine Tabelle mit allen IoT-Wetterdaten erstellen. Wählen Sie in der Cloud Console BigQuery aus. Dadurch wird BigQuery in einem neuen Fenster geöffnet. Schließen Sie das ursprüngliche Fenster nicht, da Sie noch einmal darauf zugreifen müssen.

12a838f78a10144a.png

Klicken Sie auf den Abwärtspfeil neben dem Projektnamen und wählen Sie „Neues Dataset erstellen“ aus.

27616683b64ce34a.png

Geben Sie „weatherData“ (Wetterdaten) ein. Wählen Sie einen Speicherort für das Dataset aus und klicken Sie auf "OK".

62cfcbd1add830ea.png

Klicken Sie auf das „+“, neben Ihrem Dataset, um eine neue Tabelle zu erstellen

3d7bff6f9843fa3c.png

Wählen Sie für Quelldaten die Option Leere Tabelle erstellen aus. Geben Sie als Namen der Zieltabelle weatherDataTable ein. Klicken Sie unter Schema auf die Schaltfläche Add Field (Feld hinzufügen), bis insgesamt neun Felder angezeigt werden. Füllen Sie die Felder wie unten gezeigt aus und achten Sie darauf, für jedes Feld den richtigen Typ auszuwählen. Wenn alles eingerichtet ist, klicken Sie auf die Schaltfläche Tabelle erstellen.

eef352614a5696a7.png

Sie sollten ein Ergebnis wie dieses sehen...

7d10e5ab8c6d6a0d.png

Sie haben jetzt ein Data Warehouse für den Empfang Ihrer Wetterdaten eingerichtet.

4. Pub/Sub-Thema erstellen

Cloud Pub/Sub ist eine einfache, zuverlässige und skalierbare Basis für Streamanalysen und ereignisgesteuerte Computersysteme. Daher eignet es sich perfekt für die Verarbeitung eingehender IoT-Nachrichten und die anschließende Verarbeitung dieser Nachrichten durch nachgelagerte Systeme.

Wenn Sie sich noch im Fenster für BigQuery befinden, wechseln Sie zurück zur Cloud Console. Wenn Sie die Cloud Console geschlossen haben, rufen Sie https://console.cloud.google.com auf.

Wählen Sie in der Cloud Console „Pub/Sub“ und dann „Themen“ aus.

331ad71e8a1ea7b.png

Wenn die Aufforderung „API aktivieren“ angezeigt wird, klicken Sie auf die Schaltfläche „API aktivieren“.

9f6fca9dc8684801.png

Klicken Sie auf die Schaltfläche Thema erstellen .

643670164e9fae12.png

„Wetterdaten“ eingeben als Themennamen ein und klicken Sie auf

d7b049bc66a34db6.png

Sie sollten das neu erstellte Thema sehen.

7c385759f65a1031.png

Sie haben jetzt ein Pub/Sub-Thema, um IoT-Nachrichten zu veröffentlichen und anderen Prozessen den Zugriff auf diese Nachrichten zu ermöglichen.

Sichere Veröffentlichung für das Thema

Wenn Sie vorhaben, Nachrichten von Ressourcen außerhalb Ihrer Google Cloud Console (z.B. von einem IoT-Sensor) an das Pub/Sub-Thema zu veröffentlichen, müssen Sie den Zugriff über ein Dienstkonto genauer steuern und die Sicherheit der Verbindung durch Erstellen eines vertrauenswürdigen Zertifikats gewährleisten.

Wählen Sie in der Cloud Console "IAM & Administrator und dann Dienstkonten

8e2f8a1428d0feca.png

Klicken Sie auf die Schaltfläche „Dienstkonto erstellen“.

60892b564e0ac140.png

Wählen Sie im Drop-down-Menü „Rolle“ die Pub/Sub-Publisher-Rolle aus.

31f8c944af11270e.png

Geben Sie einen Dienstkontonamen ein (iotWeatherPublisher), aktivieren Sie das Kontrollkästchen "Neuen privaten Schlüssel bereitstellen", stellen Sie sicher, dass der Schlüsseltyp auf JSON festgelegt ist, und klicken Sie auf "Erstellen".

7e3f9d7e56a44796.png

Der Sicherheitsschlüssel wird automatisch heruntergeladen. Es gibt nur einen Schlüssel. Daher ist es wichtig, dass Sie diesen nicht verlieren. Klicken Sie auf "Schließen".

60a7da32dd85ba73.png

Sie sollten sehen, dass ein Dienstkonto erstellt wurde und mit dem eine Schlüssel-ID verknüpft ist.

b25f6f5629fe8fd7.png

Damit Sie später problemlos auf den Schlüssel zugreifen können, werden wir ihn in Google Cloud Storage speichern. Wählen Sie in der Cloud Console „Storage“ und dann „Browser“ aus.

c4414fe61be320a9.png

Klicken Sie auf die Schaltfläche "Bucket erstellen".

cde91311b267fc65.png

Wählen Sie einen Namen für den Storage-Bucket aus (es muss sich um einen Namen handeln, der global in Google Cloud eindeutig ist) und klicken Sie auf die Schaltfläche „Erstellen“

28c10e41b401f479.png

Suchen Sie den Sicherheitsschlüssel, der automatisch heruntergeladen wurde, und ziehen Sie ihn per Drag-and-drop in den Storage-Bucket oder laden Sie ihn hoch

a0f6d069d42cec4b.png

Nachdem der Schlüssel hochgeladen wurde, sollte er im Cloud Storage-Browser angezeigt werden.

55b25c8b9d73ec19.png

Notieren Sie sich den Namen des Storage-Buckets und den Namen der Datei mit dem Sicherheitsschlüssel für später.

5. Cloud Functions-Funktion erstellen

Cloud-Computing ermöglicht vollständig serverlose Computing-Modelle, in denen die Logik ungeachtet der Ereignisquelle nach Bedarf hochgefahren werden kann. In diesem Lab wird jedes Mal eine Cloud Functions-Funktion gestartet, wenn eine Nachricht im Wetterthema veröffentlicht wird. Sie liest die Nachricht und speichert sie anschließend in BigQuery.

Wählen Sie in der Cloud Console „Cloud Functions“ aus.

a14ac2e4f03bf831.png

Wenn eine API-Meldung angezeigt wird, klicken Sie auf die Schaltfläche „API aktivieren“.

40ba0a08430e0e8a.png

Klicken Sie auf die Schaltfläche „Funktion erstellen“.

5d82d8faeffa55bf.png

Geben Sie im Feld Name den Wert „function-weatherPubSubToBQ“ ein. Wählen Sie als Trigger das Cloud Pub/Sub-Thema und im Drop-down-Menü „Thema“ die Option weatherdata aus. Wählen Sie für Quellcode den Inline-Editor aus. Fügen Sie auf dem Tab „index.js“ den folgenden Code ein. Ändern Sie unbedingt die Konstanten für „projectId“, „datasetId“ und „tableId“, um sie an Ihre Umgebung anzupassen.

/**
 * Background Cloud Function to be triggered by PubSub.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.subscribe = function (event, callback) {
  const BigQuery = require('@google-cloud/bigquery');
  const projectId = "myProject"; //Enter your project ID here
  const datasetId = "myDataset"; //Enter your BigQuery dataset name here
  const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
  const PubSubMessage = event.data;
  // Incoming data is in JSON format
  const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
  const jsonData = JSON.parse(incomingData);
  var rows = [jsonData];

  console.log(`Uploading data: ${JSON.stringify(rows)}`);

  // Instantiates a client
  const bigquery = BigQuery({
    projectId: projectId
  });

  // Inserts data into a table
  bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows)
    .then((foundErrors) => {
      rows.forEach((row) => console.log('Inserted: ', row));

      if (foundErrors && foundErrors.insertErrors != undefined) {
        foundErrors.forEach((err) => {
            console.log('Error: ', err);
        })
      }
    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END bigquery_insert_stream]


  callback();
};

Fügen Sie auf dem Tab „package.json“ den folgenden Code in den Platzhaltercode ein:

{
  "name": "function-weatherPubSubToBQ",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "dependencies": {
    "@google-cloud/bigquery": "^0.9.6"
  }
}

Wenn die auszuführende Funktion auf „HelloWorld“ festgelegt ist, ändern Sie sie in „Subscribe“. Auf „Erstellen“ klicken

3266d5268980a4db.png

Es dauert etwa zwei Minuten, bis in der Funktion angezeigt wird, dass sie bereitgestellt wurde

26f45854948426d0.png

Glückwunsch! Sie haben Pub/Sub gerade über Functions mit BigQuery verbunden.

6. IoT-Hardware einrichten (optional)

Raspberry Pi und Sensor zusammenbauen

Wenn es mehr als sieben Pins gibt, kürzen Sie den Header auf nur sieben. Löten Sie die Stifte an die Sensorplatine.

a162e24426118c97.png

Bringen Sie die Hammerkopfstifte vorsichtig im Raspberry Pi an.

a3a697907fe3c9a9.png

Formatieren Sie die SD-Karte und installieren Sie das NOOBS-Installationsprogramm (New Out Of Box Software). Folgen Sie dazu dieser Anleitung. Legen Sie die SD-Karte in den Raspberry Pi und den Raspberry Pi in das Gehäuse ein.

1e4e2459cd3333ec.png

Verbinden Sie den Sensor über die Steckplatinenkabel mit dem Raspberry Pi (siehe Abbildung unten).

392c2a9c85187094.png

Raspberry Pi-Pin

Sensorverbindung

Pin 1 (3,3 V)

FIN

Pin 3 (CPIO2)

SDI

PIN 5 (GPIO3)

Logo: SCK

Pin 9 (Boden)

GND

44322e38d467d66a.png

Schließen Sie den Monitor (über den Mini-HDMI-Anschluss), die Tastatur/Maus (über den USB-Hub) und schließlich das Netzteil an.

Raspberry Pi und Sensor konfigurieren

Nachdem der Start des Raspberry Pi abgeschlossen ist, wählen Sie Raspbian für das gewünschte Betriebssystem aus, vergewissern Sie sich, dass die gewünschte Sprache korrekt ist, und klicken Sie dann auf Installieren (das Festplattensymbol oben links im Fenster).

a16f0da19b93126.png

Klicken Sie oben rechts auf das WLAN-Symbol und wählen Sie ein Netzwerk aus. Wenn es sich um ein gesichertes Netzwerk handelt, geben Sie das Passwort (vorinstallierten Schlüssel) ein.

17f380b2d41751a8.png

Klicken Sie oben links auf dem Bildschirm auf das Himbeer-Symbol, wählen Sie „Einstellungen“ und dann „Raspberry-Pi-Konfiguration“ aus. Aktivieren Sie auf dem Tab „Schnittstellen“ I2C. Legen Sie auf dem Tab „Lokalisierung“ das Gebietsschema und die Zeitzone fest. Lassen Sie nach dem Festlegen der Zeitzone den Neustart des Raspberry Pi zu.

14741a77fccdb7e7.png

Klicken Sie nach dem Neustart auf das Terminal-Symbol, um ein Terminalfenster zu öffnen.

9df6f228f6a31601.png

Geben Sie den folgenden Befehl ein, um zu prüfen, ob der Sensor richtig angeschlossen ist.

  sudo i2cdetect -y 1

Das Ergebnis sollte wie folgt aussehen. Stellen Sie sicher, dass als Wert 77 angezeigt wird.

cd35cd97bee8085a.png

Google Cloud SDK installieren

Damit Sie die Tools auf der Google Cloud Platform nutzen können, muss das Google Cloud SDK auf dem Raspberry Pi installiert werden. Das SDK enthält die Tools, die zur Verwaltung und Nutzung der Google Cloud Platform erforderlich sind, und ist für verschiedene Programmiersprachen verfügbar.

Öffnen Sie auf dem Raspberry Pi ein Terminalfenster, falls noch nicht geschehen, und legen Sie eine Umgebungsvariable fest, die der SDK-Version dem Betriebssystem auf dem Raspberry Pi entspricht.

  export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

Fügen Sie nun den Speicherort der Google Cloud SDK-Pakete hinzu, damit die Installationstools erkennen, wo sie suchen müssen, wenn sie aufgefordert werden, das SDK zu installieren.

  echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" |  sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

Fügen Sie den öffentlichen Schlüssel aus dem Paket-Repository von Google hinzu, damit der Raspberry Pi die Sicherheit überprüft und dem Inhalt während der Installation vertraut.

  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Sicherstellen, dass die gesamte Software auf dem Raspberry Pi auf dem neuesten Stand ist, und das Google Cloud SDK installieren

  sudo apt-get update && sudo apt-get install google-cloud-sdk

Wenn die Aufforderung „Möchten Sie fortfahren?“ angezeigt wird, drücken Sie die Eingabetaste.

Installieren Sie das Tendo-Paket mithilfe des Python-Paketmanagers. Dieses Paket wird verwendet, um zu prüfen, ob ein Skript mehrmals ausgeführt wird und für seine Anwendung im Wetterskript installiert wird.

  pip install tendo

Mit dem Python-Paketmanager prüfen, ob die Google Cloud PubSub- und OAuth2-Pakete für Python installiert und auf dem neuesten Stand sind

  sudo pip install --upgrade google-cloud-pubsub
  sudo pip install --upgrade oauth2client

Google Cloud SDK initialisieren

Das SDK ermöglicht authentifizierten Remotezugriff auf die Google Cloud. In diesem Codelab wird sie für den Zugriff auf den Storage-Bucket verwendet, damit der Sicherheitsschlüssel einfach auf den Raspberry Pi heruntergeladen werden kann.

Geben Sie in die Befehlszeile des Raspberry Pi

  gcloud init --console-only

Wenn die Aufforderung „Möchten Sie sich anmelden (J/N)?“ angezeigt wird, drücken Sie die Eingabetaste.

Wenn die Meldung „Gehe zu folgendem Link in deinem Browser“ angezeigt wird: gefolgt von einer langen URL, die mit https://accounts.google.com/o/oauth?... beginnt, bewegen Sie den Mauszeiger auf die URL, klicken Sie mit der rechten Maustaste und wählen Sie "URL kopieren" aus. Öffnen Sie dann den Webbrowser (blaues Globussymbol in der oberen linken Ecke des Bildschirms), klicken Sie mit der rechten Maustaste über die Adressleiste und klicken Sie auf "Einfügen".

Geben Sie auf dem Anmeldebildschirm die E-Mail-Adresse ein, die mit Ihrem Google Cloud-Konto verknüpft ist, und drücken Sie die Eingabetaste. Gib dann dein Passwort ein und klicke auf die Schaltfläche Next (Weiter).

Sie werden aufgefordert, dass das Google Cloud SDK auf Ihr Google-Konto zugreifen möchte. Klicken Sie auf die Schaltfläche Zulassen.

Der Bestätigungscode wird Ihnen angezeigt. Markieren Sie es mit der Maus, klicken Sie mit der rechten Maustaste darauf und wählen Sie „Kopieren“. Kehren Sie zum Terminalfenster zurück und achten Sie darauf, dass sich der Cursor rechts neben "Bestätigungscode eingeben:" befindet. Klicken Sie mit der rechten Maustaste und wählen Sie dann "Einfügen" aus. Drücken Sie die Eingabetaste.

Wenn Sie nach „Cloud-Projekt auswählen:“ gefragt werden, geben Sie die Nummer ein, die dem Projektnamen entspricht, den Sie für dieses Codelab verwendet haben, und drücken Sie dann die Eingabetaste.

Wenn Sie aufgefordert werden, die Compute API zu aktivieren, drücken Sie die Eingabetaste. Anschließend werden Sie aufgefordert, die Google Compute Engine-Einstellungen zu konfigurieren. Drücken Sie die Eingabetaste. Es wird eine Liste potenzieller Regionen/Zonen angezeigt. Wählen Sie eine in Ihrer Nähe aus, geben Sie die entsprechende Zahl ein und drücken Sie die Eingabetaste.

In Kürze werden einige zusätzliche Informationen angezeigt. Das Google Cloud SDK ist jetzt konfiguriert. Sie können das Browserfenster schließen, da Sie es nicht mehr benötigen.

Sensorsoftware und Wetterskript installieren

Klonen Sie über die Befehlszeile auf dem Raspberry Pi die erforderlichen Pakete, um Informationen von den Eingabe-/Ausgabe-Pins zu lesen.

  git clone https://github.com/adafruit/Adafruit_Python_GPIO

Heruntergeladene Pakete installieren

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

Klonen Sie den Projektcode, der den Wettersensor aktiviert

  git clone https://github.com/googlecodelabs/iot-data-pipeline

Kopieren Sie den Sensortreiber in das Verzeichnis, in dem sich auch die heruntergeladene Software befindet.

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

Skript durch Eingabe von...

  nano checkWeather.py

Ändern Sie das Projekt in Ihre Projekt-ID und das Thema in den Namen Ihres Pub/Sub-Themas (diese wurden in diesem Codelab in den Abschnitten zum Einrichten und Erstellen eines Pub/Sub-Themas notiert).

Ändern Sie die Werte „sensorID“, „sensorZipCode“, „sensorLat“ und „sensorLong“ in einen beliebigen Wert. Die Breiten- und Längengradwerte für einen bestimmten Standort oder eine bestimmte Adresse finden Sie hier.

Wenn Sie die erforderlichen Änderungen vorgenommen haben, drücken Sie Strg + X, um den nano-Editor zu schließen. Drücken Sie zur Bestätigung „Y“.

# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"

Sicherheitsschlüssel installieren

Kopieren Sie den Sicherheitsschlüssel aus dem Abschnitt „Sichere Veröffentlichung zu einem Thema“ auf den Raspberry Pi.

Wenn Sie SFTP oder SCP verwendet haben, um den Sicherheitsschlüssel von Ihrem lokalen Computer auf Ihren Raspberry Pi (in das Verzeichnis /home/pi) zu kopieren, können Sie den nächsten Schritt überspringen und zum Exportieren des Pfads wechseln.

Wenn Sie den Sicherheitsschlüssel in einem Storage-Bucket abgelegt haben, müssen Sie sich den Namen des Storage-Buckets und den Namen der Datei merken. Kopieren Sie den Sicherheitsschlüssel mit dem Befehl gsutil. Dieser Befehl kann auf Google Storage zugreifen (warum es gsutil heißt und warum der Pfad zur Datei mit gs:// beginnt). Ändern Sie den Befehl unten so, dass der Bucket- und der Dateiname übernommen werden.

  gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .

Es sollte eine Meldung angezeigt werden, dass die Datei kopiert wird und der Vorgang abgeschlossen ist.

Exportieren Sie über die Befehlszeile auf dem Raspberry Pi den Pfad zum Sicherheitsschlüssel. Ändern Sie dabei den Dateinamen entsprechend.

  export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json

Sie haben jetzt einen fertigen IoT-Wettersensor, der Daten an Google Cloud übertragen kann.

7. Datenpipeline starten

Möglicherweise muss die Compute API aktiviert werden

Datenstreaming von einem Raspberry Pi

Wenn Sie einen Raspberry Pi IoT-Wettersensor konstruiert haben, starten Sie das Skript, das die Wetterdaten liest und per Push in Google Cloud Pub/Sub überträgt. Wenn Sie sich nicht im Verzeichnis „/home/pi/iot-data-pipeline“ befinden, gehen Sie zuerst dorthin

  cd /home/pi/iot-data-pipeline

Wetterskript starten

  python checkWeather.py

Das Terminalfenster sollte jede Minute die Ergebnisse der Wetterdaten anzeigen. Wenn die Daten übertragen werden, können Sie mit dem nächsten Abschnitt (Überprüfen, ob die Daten übertragen werden) fortfahren.

Simuliertes Datenstreaming

Wenn Sie den IoT-Wettersensor nicht selbst entwickelt haben, können Sie das Datenstreaming simulieren, indem Sie ein öffentliches Dataset verwenden, das in Google Cloud Storage gespeichert ist und dieses in das vorhandene Pub/Sub-Thema einspeisen. Es werden Google Dataflow und eine von Google bereitgestellte Vorlage zum Lesen aus Cloud Storage und zum Veröffentlichen in Pub/Sub verwendet.

Da Dataflow einen temporären Speicherort benötigt, erstellen wir zu diesem Zweck einen Storage-Bucket.

Wählen Sie in der Cloud Console „Storage“ und dann „Browser“ aus.

c4414fe61be320a9.png

Klicken Sie auf die Schaltfläche "Bucket erstellen".

cde91311b267fc65.png

Wählen Sie einen Namen für den Storage-Bucket aus (es muss ein Name sein, der global in Google Cloud eindeutig ist) und klicken Sie auf die Schaltfläche „Erstellen“. Merken Sie sich den Namen dieses Storage-Buckets, da er in Kürze benötigt wird.

1dad4cfbccfc96b1.png

Wählen Sie in der Cloud Console "Dataflow" aus.

43ec245b47ae2e78.png

Klicken Sie im oberen Teil des Bildschirms auf „Job aus Vorlage erstellen“.

da55aaf2a1b0a0d0.png

Geben Sie die Auftragsdetails wie unten gezeigt ein. Achten Sie dabei auf Folgendes:

  • Geben Sie den Jobnamen "dataflow-gcs-to-pubsub" ein
  • Ihre Region sollte automatisch basierend darauf ausgewählt werden, wo Ihr Projekt gehostet wird, und sollte nicht geändert werden müssen.
  • Cloud Dataflow-Vorlage von GCS Text für Cloud Pub/Sub auswählen
  • Geben Sie als Eingabedatei für Cloud Storage Folgendes ein: gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (dies ist ein öffentliches Dataset).
  • Der genaue Pfad für das Pub/Sub-Ausgabethema hängt vom Projektnamen ab und sieht in etwa so aus: „projects/yourProjectName/topics/weatherdata“
  • Legen Sie als temporärer Speicherort den Namen des gerade erstellten Google Cloud Storage-Buckets zusammen mit dem Dateinamenspräfix „tmp“ fest. Er sollte so aussehen: „gs://myStorageBucketName/tmp“.

Wenn Sie alle Informationen ausgefüllt haben (siehe unten), klicken Sie auf die Schaltfläche Job ausführen

5f8ca16672f19d9b.png

Der Dataflow-Job sollte jetzt ausgeführt werden.

e020015c369639ad.png

Es sollte etwa eine Minute dauern, bis der Dataflow-Job abgeschlossen ist.

218a3ff7197dcf75.png

8. Prüfen, ob die Daten fließen

Cloud Functions-Logs

Achten Sie darauf, dass die Cloud Functions-Funktion von Pub/Sub ausgelöst wird

  gcloud beta functions logs read function-weatherPubSubToBQ

Die Logs sollten zeigen, dass die Funktion ausgeführt wird, Daten empfangen werden und dass sie in BigQuery eingefügt werden

d88f7831dabc8b3f.png

BigQuery-Daten

Prüfen Sie, ob Daten in die BigQuery-Tabelle fließen. Rufen Sie in der Cloud Console BigQuery (bigquery.cloud.google.com) auf.

85627127d58f1d2e.png

Klicken Sie unter dem Projektnamen (auf der linken Seite des Fensters) auf das Dataset (weatherData), dann auf die Tabelle (weatherDataTable) und anschließend auf die Schaltfläche Query Table (Abfragetabelle).

44dc0f765a69580c.png

Fügen Sie der SQL-Anweisung ein Sternchen ein, sodass sie wie unten gezeigt SELECT * FROM... lautet, und klicken Sie dann auf die Schaltfläche RUN QUERY (ABFRAGE AUSFÜHREN)

b3a001e11c2902f2.png

Wenn Sie dazu aufgefordert werden, klicken Sie auf die Schaltfläche Abfrage ausführen

2c894d091b789ca3.png

Wenn Sie Ergebnisse sehen, fließen die Daten ordnungsgemäß.

c8a061cebb7b528a.png

Da die Daten fließen, können Sie nun ein Analyse-Dashboard erstellen.

9. Data Studio-Dashboard erstellen

Mit Google Data Studio können Sie aussagekräftige Dashboards und Berichte erstellen, teilen und entsprechend Ihren Anforderungen anpassen.

Rufen Sie in Ihrem Webbrowser https://datastudio.google.com auf.

10f8c27060cd7430.png

Klicken Sie unter „Neuen Bericht starten“ auf „Leer“ und dann auf die Schaltfläche „Jetzt starten“.

df1404bc0047595e.png

Aktivieren Sie das Kontrollkästchen, um die Bedingungen zu akzeptieren, klicken Sie auf die Schaltfläche Weiter , wählen Sie die E-Mails aus, die Sie erhalten möchten, und klicken Sie auf Fertig. Klicken Sie wieder unter „Neuen Bericht starten“ auf „Leer“.

55e91d3dd88b05ca.png

Klicken Sie auf die Schaltfläche „Neue Datenquelle erstellen“.

a22f3fac05774fc9.png

Klicken Sie auf „BigQuery“ und dann auf die Schaltfläche „Autorisieren“. Wählen Sie dann das Google-Konto aus, das Sie mit Data Studio verwenden möchten. Es sollte dasselbe Konto sein, das Sie für das Codelab verwendet haben.

5ab03f341edc8964.png

Klicken Sie auf die Schaltfläche „Zulassen“.

22bcdbb5f5f1d30c.png

Wählen Sie den Projektnamen, das Dataset und die Tabelle aus. Klicken Sie dann auf die Schaltfläche Verbinden.

dc6b6b0ed9ced509.png

Ändern Sie die Typfelder wie unten gezeigt (alles sollte eine Zahl sein, außer der zeiterfassungsbezogenen ID und der sensorID). Beachten Sie, dass timecollected auf Datum/Stunde (und nicht nur auf Datum) eingestellt ist. Ändern Sie die Felder für die Zusammenfassung wie unten dargestellt. Taupunkt, Temperatur, Luftfeuchtigkeit und Druck sollten Durchschnittswerte sein und alles andere auf „Keine“. Klicken Sie auf die Schaltfläche Bericht erstellen.

c60887e29c3bdf9b.png

Klicken Sie zur Bestätigung auf die Schaltfläche „Zum Bericht hinzufügen“.

5ec3888dfdd85095.png

Wenn Sie aufgefordert werden, Ihr Google-Konto auszuwählen, klicken Sie auf die Schaltfläche „Zulassen“, damit die Berichte von Data Studio in Google Drive gespeichert werden.

7b8006a813b3defa.png

Nun wird ein leerer Canvas angezeigt, auf dem Sie Ihr Dashboard erstellen können. Wählen Sie in der oberen Symbolzeile die Option Zeitreihe aus.

c7cd97354e1cde04.png

Zeichnen Sie ein Rechteck in die obere linke Ecke des leeren Tabellenblatts. Es sollte etwa ein Viertel des gesamten leeren Tabellenblatts einnehmen.

e0e82cb19921f835.png

Wählen Sie auf der rechten Seite des Fensters die Registerkarte Stil aus. Fehlende Daten von "Zeile zu Null" ändern zu "Zeilenumbrüche". Löschen Sie im Bereich Linke Y-Achse die „0“ von „Achse (Min.)“, um sie in (Auto) zu ändern.

c7620bfe734d546.png

Klicken Sie auf die Grafik auf dem Blatt und kopieren Sie sie dreimal und fügen Sie sie mit Strg + C/Strg + V ein. Richten Sie die Diagramme so aus, dass jedes ein Viertel des Layouts hat.

9a7d3faa28996219.png

Klicken Sie auf jedes Diagramm und im Abschnitt Zeitreiheneigenschaften und Daten auf den vorhandenen Messwert (Taupunkt). Wählen Sie eine andere Metrik aus, die angezeigt werden soll, bis alle vier Wettermesswerte (Taupunkt, Temperatur, Luftfeuchtigkeit und Druck) ein eigenes Diagramm haben.

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

Sie haben jetzt ein einfaches Dashboard!

8f59e8f4d44b8552.png

10. Glückwunsch!

Sie haben eine komplette Datenpipeline erstellt. Dabei haben Sie gelernt, wie Sie Google Pub/Sub verwenden, eine serverlose Funktion bereitstellen, BigQuery nutzen und mit Data Studio ein Analysedashboard erstellen. Darüber hinaus haben Sie erfahren, wie Sie mit dem Google Cloud SDK Daten sicher in die Google Cloud Platform übertragen können. Schließlich haben Sie jetzt praktische Erfahrung mit einem wichtigen Architekturmuster, das große Datenmengen bewältigen kann, ohne die Verfügbarkeit zu beeinträchtigen.

79cd6c68e83f7fea.png

Klären

Nachdem Sie mit den Wetterdaten und der Analysepipeline experimentiert haben, können Sie die laufenden Ressourcen entfernen.

Wenn Sie den IoT-Sensor selbst gebaut haben, fahren Sie ihn herunter. Drücken Sie im Terminalfenster Strg + C, um das Skript anzuhalten, und geben Sie dann Folgendes ein, um den Raspberry Pi auszuschalten

  shutdown -h now

Rufen Sie Cloud Functions auf, klicken Sie auf das Kästchen neben „function-weatherPubSubToBQ“ und dann auf „Löschen“.

ae95f4f7178262e0.png

Rufen Sie Pub/Sub auf, klicken Sie auf „Topic“ (Thema), klicken Sie auf das Kästchen neben dem „weatherdata“-Thema und dann auf „Delete“ (Löschen).

6fb0bba3163d9a32.png

Gehen Sie zu „Storage“, klicken Sie auf die Kästchen neben den Storage-Buckets und dann auf „Löschen“.

9067fb2af9f907f4.png

Rufen Sie bigquery.cloud.google.com auf, klicken Sie auf den Abwärtspfeil neben dem Projektnamen, dann auf den Abwärtspfeil rechts neben dem weatherData-Dataset und klicken Sie dann auf „Delete dataset“ (Dataset löschen).

a952dfeec49248c4.png

Geben Sie bei entsprechender Aufforderung die Dataset-ID (weatherData) ein, um den Löschvorgang abzuschließen.

6310b1cc8da31a77.png