Serverlose Datenpipeline erstellen: IoT to Analytics

1. Übersicht/Einführung

Während mehrschichtige Anwendungen aus Web, Anwendungsserver und Datenbanken von grundlegender Bedeutung für die Webentwicklung sind und als Ausgangspunkt für viele Websites dienen, bringt der Erfolg oft Herausforderungen in Bezug auf Skalierbarkeit, Integration und Agilität mit sich. Wie können Daten beispielsweise in Echtzeit verarbeitet und an mehrere wichtige Geschäftssysteme verteilt werden? Diese Probleme, zusammen mit den Anforderungen von Anwendungen im Internet, machten die Notwendigkeit eines verteilten Messaging-Systems 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 of Things) 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 erstellt, in dem die Informationen angezeigt werden. Für das IoT-Gerät wird ein Raspberry Pi mit einem Wettersensor verwendet. Die Datenpipeline bilden mehrere Komponenten der Google Cloud Platform. Das Einrichten des Raspberry Pi ist zwar hilfreich, aber ein optionaler Teil dieses Codelabs. Die gestreamten Wetterdaten können durch ein Script 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
  • Dashboards 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 Skript 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 (ermöglicht das Anschließen einer Tastatur und Maus an den einzigen USB-Port des Raspberry Pi)
  • Jumperkabel für Breadboard (Stecker - Stecker)
  • GPIO-Hammer-Header
  • BME280-Sensor
  • Lötkolben mit Lötzinn

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. Egal, ob Sie bereits ein Google-Konto haben oder nicht, sollten Sie das kostenlose Testabo mit einem Guthaben von 300 $ 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 für alle Google Cloud-Projekte eindeutig sein. Die unten gezeigte ID ist bereits vergeben und kann nicht verwendet werden. Notieren Sie sich Ihre Projekt-ID (z. B. _____), da Sie sie später benötigen.

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. Lesen Sie sich den Abschnitt zum Bereinigen am Ende des Codelabs durch.

3. BigQuery-Tabelle erstellen

BigQuery ist ein serverloses, hoch 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 ermöglicht gleichzeitig die Abfrage der Informationen über ein Analysedashboard.

Erstellen wir eine Tabelle, die alle IoT-Wetterdaten enthält. 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“ für den Datensatz ein, wählen Sie einen Speicherort für das Dataset aus und klicken Sie auf „OK“.

62cfcbd1add830ea.png

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

3d7bff6f9843fa3c.png

Wählen Sie unter Quelldaten die Option Leere Tabelle aus. Geben Sie als Namen der Zieltabelle weatherDataTable ein. Klicken Sie unter Schema so oft auf die Schaltfläche Feld hinzufügen, bis insgesamt neun Felder vorhanden sind. Füllen Sie die Felder wie unten dargestellt aus und wählen Sie für jedes Feld den entsprechenden Typ aus. Wenn Sie fertig sind, 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 eingerichtet, in dem Sie Ihre Wetterdaten empfangen können.

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 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

Geben Sie „weatherdata“ als Themennamen ein und klicken Sie auf „Erstellen“

d7b049bc66a34db6.png

Das neu erstellte Thema sollte angezeigt werden.

7c385759f65a1031.png

Sie haben jetzt ein Pub/Sub-Thema, in dem Sie IoT-Nachrichten veröffentlichen und anderen Prozessen den Zugriff auf diese Nachrichten erlauben können.

Sichere Veröffentlichung im Thema

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

Wählen Sie in der Cloud Console „IAM und Verwaltung“ und dann „Dienstkonten“ aus.

8e2f8a1428d0feca.png

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

60892b564e0ac140.png

Wählen Sie im Drop-down-Menü „Rolle“ die Rolle „Pub/Sub-Publisher“ 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, ihn nicht zu 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 ein Name sein, der überall in Google Cloud eindeutig ist) und klicken Sie auf die Schaltfläche „Erstellen“

28c10e41b401f479.png

Suchen Sie den automatisch heruntergeladenen Sicherheitsschlüssel und ziehen Sie ihn per Drag-and-drop oder laden Sie ihn in den Speicher-Bucket hoch.

a0f6d069d42cec4b.png

Nach Abschluss des Schlüsseluploads sollte er im Cloud Storage-Browser angezeigt werden.

55b25c8b9d73ec19.png

Notieren Sie sich den Namen des Speicher-Buckets und den Namen der Sicherheitsschlüsseldatei 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 angepasst werden kann. In diesem Lab wird jedes Mal, wenn eine Nachricht im Wetterthema veröffentlicht wird, eine Cloud Functions-Funktion gestartet, die die Nachricht liest und dann in BigQuery speichert.

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

a14ac2e4f03bf831.png

Wenn eine API-Nachricht 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 über den vorhandenen Code ein. Ändern Sie die Konstanten für „projectId“, „datasetId“ und „tableId“ so, dass sie zu Ihrer Umgebung passen.

/**
 * 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 über den vorhandenen 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 die Bereitstellung der Funktion abgeschlossen ist.

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

Setzen Sie die Stifte des Hammer Headers vorsichtig in den Raspberry Pi ein.

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

Position 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

Pin 9 (Boden)

GN

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 rechts oben auf dem Bildschirm 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“ die Option „I2C“. Legen Sie auf dem Tab „Lokalisierung“ das Gebietsschema und die Zeitzone fest. Nachdem Sie die Zeitzone festgelegt haben, lassen Sie den Raspberry Pi neu starten.

14741a77fccdb7e7.png

Klicken Sie nach dem Neustart auf das Terminalsymbol, 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 jetzt den Speicherort der Google Cloud SDK-Pakete hinzu, damit die Installationstools wissen, wo sie suchen müssen, wenn sie zum Installieren des SDK aufgefordert werden.

  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 mit dem Python-Paketmanager. Mit diesem Paket wird geprüft, ob ein Script mehrmals ausgeführt wird. Es wird für die Anwendung auf das Wetterskript installiert.

  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 er zum Zugriff auf den Speicher-Bucket verwendet, damit der Sicherheitsschlüssel ganz einfach auf den Raspberry Pi heruntergeladen werden kann.

Geben Sie in die Befehlszeile des Raspberry Pi

  gcloud init --console-only

Wenn Sie gefragt werden, ob Sie sich anmelden möchten (Y/n), drücken Sie die Eingabetaste.

Wenn Sie die Meldung „Gehen Sie in Ihrem Browser zu folgendem Link:“ sehen, 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 darauf 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. Geben Sie dann Ihr Passwort ein und klicken Sie auf die Schaltfläche „Weiter“.

Sie werden aufgefordert, dem Google Cloud SDK Zugriff auf Ihr Google-Konto zu gewähren. Klicken Sie auf die Schaltfläche „Zulassen“.

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

Wenn Sie aufgefordert werden, „Zu verwendendes Cloud-Projekt auswählen“ auszuwählen, geben Sie die Nummer ein, die dem Projektnamen entspricht, den Sie für dieses Codelab verwendet haben, und drücken Sie 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 Region/Zone in Ihrer Nähe aus, geben Sie die entsprechende Zahl ein und drücken Sie die Eingabetaste.

Nach kurzer Zeit werden weitere 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 zum Lesen von Informationen von den E/A-Pins.

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

Heruntergeladene Pakete installieren

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

Projektcode klonen, 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 den Abschnitten „Einrichtung“ und „Pub/Sub-Thema erstellen“ dieses Codelabs notiert.

Ändern Sie die Werte „sensorID“, „sensorZipCode“, „sensorLat“ und „sensorLong“ in einen beliebigen Wert. Breiten- und Längengradwerte für einen bestimmten Ort 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 einbauen

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

Wenn Sie den Sicherheitsschlüssel mit SFTP oder SCP von Ihrem lokalen Computer auf Ihren Raspberry Pi (in das Verzeichnis „/home/pi“) kopiert haben, können Sie den nächsten Schritt überspringen und mit dem Exportieren des Pfads fortfahren.

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 Dateipfad mit gs:// beginnt). Ersetzen Sie im folgenden Befehl den Bucket-Namen und den Dateinamen durch die entsprechenden Werte.

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

Es sollte eine Meldung angezeigt werden, dass die Datei kopiert wird, und dann, dass 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 gebaut haben, starten Sie das Script, das die Wetterdaten liest und an Google Cloud Pub/Sub sendet. Falls Sie sich nicht im Verzeichnis „/home/pi/iot-data-pipeline“ befinden, wechseln Sie dorthin.

  cd /home/pi/iot-data-pipeline

Wetterskript starten

  python checkWeather.py

Im Terminalfenster sollten alle 60 Sekunden die Ergebnisse der Wetterdaten angezeigt werden. Wenn Daten übertragen werden, können Sie mit dem nächsten Abschnitt fortfahren (Prüfen, ob Daten übertragen werden).

Simuliertes Datenstreaming

Wenn Sie den IoT-Wettersensor nicht selbst erstellt 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. Dazu werden Google Dataflow und eine von Google bereitgestellte Vorlage zum Lesen aus Cloud Storage und zum Veröffentlichen in Pub/Sub verwendet.

Im Rahmen des Prozesses benötigt Dataflow einen temporären Speicherort. Erstellen Sie dazu einen Speicher-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“. Notieren Sie sich den Namen dieses Speicher-Buckets, da Sie ihn gleich benötigen.

1dad4cfbccfc96b1.png

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

43ec245b47ae2e78.png

Klicken Sie oben auf dem Bildschirm auf „Job aus Vorlage erstellen“.

da55aaf2a1b0a0d0.png

Füllen Sie die Jobdetails wie unten gezeigt aus. Beachten Sie dabei 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 für 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 ungefähr 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. Sie sollte so aussehen: „gs://myStorageBucketName/tmp“.

Wenn Sie alle Informationen eingegeben 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 dauert etwa eine Minute, bis der Dataflow-Job abgeschlossen ist.

218a3ff7197dcf75.png

8. Prüfen, ob Daten übertragen werden

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 Protokolle sollten zeigen, dass die Funktion ausgeführt wird, Daten empfangen und 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

Klicken Sie bei Aufforderung auf die Schaltfläche „Abfrage ausführen“.

2c894d091b789ca3.png

Wenn Sie Ergebnisse sehen, funktionieren 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

Klicken Sie das Kästchen an, um die Nutzungsbedingungen zu akzeptieren, klicken Sie auf die Schaltfläche „Weiter“, wählen Sie aus, welche E-Mails Sie erhalten möchten, und klicken Sie auf die Schaltfläche „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“, dann auf die Schaltfläche „Autorisieren“ und wählen Sie das Google-Konto aus, das Sie mit Data Studio verwenden möchten. Es sollte dasselbe 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. Außer „timecollected“ und „sensorID“ sollten alle Felder Zahlen sein. Beachten Sie, dass für „timecollected“ die Einstellung „Datum/Stunde“ (und nicht nur „Datum“) verwendet wird. Ändern Sie die Aggregationsfelder wie unten gezeigt. Taupunkt, Temperatur, Luftfeuchtigkeit und Druck sollten Mittelwerte sein. Alle anderen Felder sollten auf „Kein“ gesetzt werden. 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

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

c7cd97354e1cde04.png

Zeichnen Sie oben links auf dem leeren Blatt ein Rechteck. Sie sollte etwa ein Viertel des gesamten leeren Blattes einnehmen.

e0e82cb19921f835.png

Wählen Sie rechts im Fenster den Tab „Stil“ aus. Ändern Sie fehlende Daten von "Zeile zu Null" in "Zeilenumbrüche". Löschen Sie im Bereich „Linke Y-Achse“ die 0 aus „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 einen anderen Messwert, der 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. Außerdem haben Sie gesehen, wie Sie mit dem Google Cloud SDK Daten sicher in die Google Cloud Platform einbinden 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 Script zu beenden, 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 „Thema“, klicken Sie auf das Kästchen neben dem Thema „weatherdata“ und dann auf „Löschen“.

6fb0bba3163d9a32.png

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

9067fb2af9f907f4.png

Rufen Sie bigquery.cloud.google.com auf, klicken Sie auf den Abwärtspfeil neben dem Namen Ihres Projekts, dann auf den Abwärtspfeil rechts neben dem Datensatz „weatherData“ und schließlich auf „Dataset löschen“.

a952dfeec49248c4.png

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

6310b1cc8da31a77.png