Serverlose Datenpipeline erstellen: IoT to Analytics

1. Übersicht/Einführung

Mehrschichtige Anwendungen, die aus Web-, Anwendungsserver- und Datenbankebenen bestehen, sind die Grundlage für die Webentwicklung und der Ausgangspunkt für viele Websites. Erfolg bringt jedoch 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 in Verbindung mit den Anforderungen von Anwendungen im Internetmaßstab führten zum Bedarf an einem verteilten Messaging-System und zum Aufkommen eines Architekturmusters, bei dem Datenpipelines verwendet werden, um robuste Echtzeitsysteme zu realisieren. Daher ist es für Entwickler und Architekten gleichermaßen wichtig, zu wissen, wie Echtzeitdaten in einem verteilten Messaging-System veröffentlicht und dann eine Datenpipeline erstellt wird.

Überblick

In diesem Codelab erstellen Sie eine Wetterdatenpipeline, die mit einem IoT-Gerät (Internet of Things) beginnt, eine Message Queue 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, auf dem die Informationen angezeigt werden. Für das IoT-Gerät wird ein Raspberry Pi mit einem Wettersensor verwendet. Die Datenpipeline besteht aus mehreren Komponenten der Google Cloud Platform. Das Einrichten des Raspberry Pi ist zwar von Vorteil, 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 ausgeführt haben, haben Sie eine Streaming-Datenpipeline, die ein Dashboard mit Temperatur, Luftfeuchtigkeit, Taupunkt und Luftdruck speist.

e28ca9ea4abb1457.png

Lerninhalte

  • 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 verwenden und wie Sie Remote-Zugriffsaufrufe an die Google Cloud Platform schützen.

Voraussetzungen

Wenn Sie den IoT-Sensor-Teil dieses Codelabs selbst erstellen möchten, anstatt Beispieldaten und ein Skript zu verwenden, benötigen Sie außerdem Folgendes ( das als komplettes Kit oder als Einzelteile bestellt werden kann):

  • Raspberry Pi Zero W mit Netzteil, SD-Speicherkarte und Gehäuse
  • USB-Kartenleser
  • USB-Hub (zum Anschließen von Tastatur und Maus an den einzigen USB-Anschluss des Raspberry Pi)
  • Jumperkabel mit Buchse auf beiden Seiten
  • GPIO-Hammer-Header
  • BME280-Sensor
  • Lötkolben mit Lötzinn

Außerdem wird davon ausgegangen, dass Sie Zugriff auf einen Computermonitor oder Fernseher mit HDMI-Eingang, ein HDMI-Kabel, eine Tastatur und eine Maus haben.

2. Einrichtung

Umgebung zum selbstbestimmten Lernen einrichten

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

Melden Sie sich in der Google Cloud Console ( console.cloud.google.com) an. Sie können das Standardprojekt („My First Project“) 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 ein eindeutiger Name sein. Die unten gezeigte ID ist bereits vergeben und kann nicht verwendet werden. Notieren Sie sich Ihre Projekt-ID (z.B. Ihre Projekt-ID ist _____), da sie später benötigt wird.

f414a63d955621a7.png

3415e861c09cd06a.png

Die Durchführung dieses Codelabs sollte nicht mehr als ein paar Dollar kosten, aber es könnte mehr sein, wenn Sie sich für mehr Ressourcen entscheiden oder wenn Sie sie laufen lassen. Vergessen Sie nicht, den Abschnitt „Bereinigen“ am Ende des Codelabs durchzugehen.

3. BigQuery-Tabelle erstellen

BigQuery ist ein serverloses, hoch skalierbares und kostengünstiges Data Warehouse für Unternehmen und eignet sich ideal zum Speichern von Daten, die von IoT-Geräten gestreamt werden. Gleichzeitig können Analysedashboards die Informationen abfragen.

Erstellen wir eine Tabelle, in der alle IoT-Wetterdaten gespeichert werden. Wählen Sie BigQuery in der Cloud Console aus. BigQuery wird in einem neuen Fenster geöffnet. Schließen Sie das ursprüngliche Fenster nicht, da Sie es später noch einmal benötigen.

12a838f78a10144a.png

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

27616683b64ce34a.png

Geben Sie „weatherData“ für das Dataset ein, wählen Sie einen Speicherort aus und klicken Sie auf „OK“.

62cfcbd1add830ea.png

Klicken Sie neben Ihrem Dataset auf das Pluszeichen (+), um eine neue Tabelle zu erstellen.

3d7bff6f9843fa3c.png

Wählen Sie für Quelldaten die Option Leere Tabelle aus. Geben Sie als Namen der Zieltabelle „weatherDataTable“ ein. Klicken Sie unter Schema auf die Schaltfläche Feld hinzufügen, bis insgesamt 9 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 alles ausgefüllt haben, klicken Sie auf die Schaltfläche Tabelle erstellen.

eef352614a5696a7.png

Das Ergebnis sollte so aussehen:

7d10e5ab8c6d6a0d.png

Sie haben jetzt ein Data Warehouse eingerichtet, in dem Ihre Wetterdaten empfangen werden.

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 Weiterleitung an nachgelagerte Systeme zur Verarbeitung.

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 Sie eine Aufforderung zum Aktivieren der API sehen, klicken Sie auf die Schaltfläche „API aktivieren“.

9f6fca9dc8684801.png

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

643670164e9fae12.png

Geben Sie „weatherdata“ als Namen für das Thema 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 auf das andere Prozesse zugreifen können.

Sicheres Veröffentlichen im Thema

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

Wählen Sie in der Cloud Console „IAM & 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), setzen Sie ein Häkchen bei „Neuen privaten Schlüssel bereitstellen“, prüfen Sie, ob „JSON“ als Schlüsseltyp festgelegt ist, und klicken Sie auf „Erstellen“.

7e3f9d7e56a44796.png

Der Sicherheitsschlüssel wird automatisch heruntergeladen. Es gibt nur einen Schlüssel. Sie sollten ihn also nicht verlieren. Klicken Sie auf "Schließen".

60a7da32dd85ba73.png

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

b25f6f5629fe8fd7.png

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

c4414fe61be320a9.png

Auf die Schaltfläche „Bucket erstellen“ klicken

cde91311b267fc65.png

Wählen Sie einen Namen für den Speicher-Bucket aus. Er muss in Google Cloud global eindeutig sein. Klicken Sie dann auf die Schaltfläche „Erstellen“.

28c10e41b401f479.png

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

a0f6d069d42cec4b.png

Nach Abschluss des Schlüsseluploads sollte der Schlüssel 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 angepasst werden kann. In diesem Lab wird jedes Mal, wenn eine Nachricht im Wetterthema veröffentlicht wird, eine Cloud-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-Meldung angezeigt wird, klicken Sie auf die Schaltfläche „API aktivieren“.

40ba0a08430e0e8a.png

Auf die Schaltfläche „Funktion erstellen“ klicken

5d82d8faeffa55bf.png

Geben Sie im Feld „Name“ function-weatherPubSubToBQ ein. Wählen Sie für „Trigger“ die Option „Cloud Pub/Sub-Thema“ aus und wählen Sie im Drop-down-Menü „Thema“ die Option „weatherdata“ aus. Wählen Sie für den Quellcode den Inline-Editor aus. Fügen Sie auf dem Tab „index.js“ den folgenden Code ein, um den vorhandenen Code zu ersetzen. Achten Sie darauf, die Konstanten für projectId, datasetId und tableId 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 über den dort 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 2 Minuten, bis die Funktion als bereitgestellt angezeigt wird.

26f45854948426d0.png

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

6. IoT-Hardware einrichten (optional)

Raspberry Pi und Sensor zusammenbauen

Wenn mehr als 7 Pins vorhanden sind, kürzen Sie die Kopfzeile auf 7 Pins. Löte die Stiftleisten auf die Sensorplatine.

a162e24426118c97.png

Setze 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), indem Sie der Anleitung folgen. Setzen Sie die SD-Karte in den Raspberry Pi ein und legen Sie den Raspberry Pi in das Gehäuse.

1e4e2459cd3333ec.png

Verbinde den Sensor mit den Steckbrückenkabeln gemäß dem Diagramm unten mit dem Raspberry Pi.

392c2a9c85187094.png

Raspberry Pi-Pin

Sensorverbindung

Pin 1 (3,3 V)

FIN

Pin 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

Pin 9 (Masse)

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

Wenn der Raspberry Pi hochgefahren ist, wählen Sie Raspbian als gewünschtes Betriebssystem aus. Prüfen Sie, ob die gewünschte Sprache richtig ist, und klicken Sie dann auf „Installieren“ (Festplattensymbol oben links im Fenster).

a16f0da19b93126.png

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

17f380b2d41751a8.png

Klicken Sie auf das Himbeersymbol (oben links auf dem Bildschirm), wählen Sie „Einstellungen“ und dann „Raspberry Pi-Konfiguration“ aus. Aktiviere 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 sicherzustellen, dass der Sensor richtig angeschlossen ist.

  sudo i2cdetect -y 1

Das Ergebnis sollte so aussehen. Achten Sie darauf, dass dort 77 steht.

cd35cd97bee8085a.png

Google Cloud SDK installieren

Damit die Tools auf der Google Cloud-Plattform genutzt werden können, muss das Google Cloud SDK auf dem Raspberry Pi installiert sein. Das SDK enthält die Tools, die zum Verwalten und Nutzen der Google Cloud Platform erforderlich sind, und ist für mehrere Programmiersprachen verfügbar.

Öffnen Sie ein Terminalfenster auf dem Raspberry Pi, falls noch keines geöffnet ist, und legen Sie eine Umgebungsvariable fest, die der SDK-Version des Betriebssystems 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 wissen, 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 den Inhalten während der Installation vertraut.

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

Prüfen Sie, ob die gesamte Software auf dem Raspberry Pi auf dem neuesten Stand ist, und installieren Sie das Google Cloud SDK.

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

Wenn Sie gefragt werden, ob Sie fortfahren möchten, drücken Sie die Eingabetaste.

Installieren Sie das tendo-Paket mit dem Python-Paketmanager. Dieses Paket wird verwendet, um zu prüfen, ob ein Skript mehr als einmal ausgeführt wird. Es wird für die Anwendung auf das Wetter-Skript installiert.

  pip install tendo

Prüfen Sie mit dem Python-Paketmanager, 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 den authentifizierten Remotezugriff auf die Google Cloud. In diesem Codelab wird es verwendet, um auf den Storage-Bucket zuzugreifen, damit der Sicherheitsschlüssel einfach auf den Raspberry Pi heruntergeladen werden kann.

Geben Sie in der Befehlszeile des Raspberry Pi Folgendes ein:

  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 „Rufen Sie den folgenden Link in Ihrem Browser auf:“ 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 und wählen Sie „URL kopieren“ aus. Öffnen Sie dann den Webbrowser (blaues Globussymbol oben links auf dem Bildschirm), klicken Sie mit der rechten Maustaste auf die Adressleiste und dann auf „Einfügen“.

Wenn der Anmeldebildschirm angezeigt wird, geben Sie die mit Ihrem Google Cloud-Konto verknüpfte E‑Mail-Adresse ein 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“.

Der Bestätigungscode wird angezeigt. Markieren Sie den Text 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, ein Cloud-Projekt 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, um sie zu aktivieren. Anschließend werden Sie aufgefordert, die Google Compute Engine-Einstellungen zu konfigurieren. Drücken Sie die Eingabetaste. Es wird eine Liste mit potenziellen Regionen/Zonen angezeigt. Wählen Sie eine in Ihrer Nähe aus, geben Sie die entsprechende Nummer ein und drücken Sie die Eingabetaste.

Gleich werden einige zusätzliche Informationen angezeigt. Das Google Cloud SDK ist jetzt konfiguriert. Sie können das Webbrowserfenster 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 Ein-/Ausgabe-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 dasselbe Verzeichnis wie die restliche heruntergeladene Software.

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

Bearbeiten Sie das Skript, indem Sie…

  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 für sensorID, sensorZipCode, sensorLat und sensorLong nach Bedarf. 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 die Taste 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 in 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 direkt zum Exportieren des Pfads springen.

Wenn Sie den Sicherheitsschlüssel in einem Speicher-Bucket abgelegt haben, müssen Sie sich den Namen des Speicher-Buckets und den Namen der Datei merken. Kopieren Sie den Sicherheitsschlüssel mit dem gsutil-Befehl. Mit diesem Befehl kann auf Google Storage zugegriffen werden. Daher der Name „gsutil“ und der Pfad zur Datei, der mit „gs://“ beginnt. Achten Sie darauf, den Befehl unten so zu ändern, dass er Ihren Bucket- und Dateinamen enthält.

  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 einen Pfad zum Sicherheitsschlüssel. Ändern Sie den Dateinamen entsprechend.

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

Sie haben jetzt einen vollständigen IoT-Wettersensor, der bereit ist, Daten an Google Cloud zu übertragen.

7. Datenpipeline starten

Möglicherweise müssen Sie die Compute API aktivieren

Datenstreaming von einem Raspberry Pi

Wenn Sie einen Raspberry Pi-IoT-Wettersensor gebaut haben, starten Sie das Skript, das die Wetterdaten liest und an Google Cloud Pub/Sub sendet. Wenn Sie sich nicht im Verzeichnis „/home/pi/iot-data-pipeline“ befinden, wechseln Sie zuerst dorthin.

  cd /home/pi/iot-data-pipeline

Wetterscript starten

  python checkWeather.py

Im Terminalfenster sollten die Wetterdaten-Ergebnisse jede Minute 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 gebaut haben, können Sie das Datenstreaming simulieren, indem Sie ein öffentliches Dataset verwenden, das in Google Cloud Storage gespeichert ist, und es in das vorhandene Pub/Sub-Thema einfügen. Google Dataflow wird zusammen mit einer von Google bereitgestellten 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 wir also einen Speicher-Bucket für diesen Zweck.

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

c4414fe61be320a9.png

Auf die Schaltfläche „Bucket erstellen“ klicken

cde91311b267fc65.png

Wählen Sie einen Namen für den Speicher-Bucket aus. Er muss in Google Cloud global eindeutig sein. Klicken Sie dann auf die Schaltfläche „Erstellen“. Merken Sie sich den Namen dieses Storage-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

Geben Sie die Jobdetails wie unten gezeigt ein und beachten Sie dabei Folgendes:

  • Geben Sie den Jobnamen „dataflow-gcs-to-pubsub“ ein.
  • Ihre Region sollte automatisch entsprechend dem Speicherort Ihres Projekts ausgewählt werden und muss nicht geändert werden.
  • Cloud Dataflow-Vorlage „GCS Text to Cloud Pub/Sub“ auswählen
  • Geben Sie für die Cloud Storage-Eingabedateien gs://codelab-iot-data-pipeline-sampleweatherdata/*.json ein. Dies ist ein öffentliches Dataset.
  • Der genaue Pfad für das Pub/Sub-Ausgabethema hängt von Ihrem Projektnamen ab und sieht in etwa so aus: „projects/yourProjectName/topics/weatherdata“.
  • Legen Sie für „Temporärer Speicherort“ den Namen des Google Cloud Storage-Buckets fest, den Sie gerade erstellt haben, zusammen mit dem Dateinamenpräfix „tmp“. 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 sollte etwa eine Minute dauern, bis der Dataflow-Job abgeschlossen ist.

218a3ff7197dcf75.png

8. Prüfen, ob Daten übertragen werden

Cloud Functions-Logs

Prüfen, ob 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 „Tabelle abfragen“.

44dc0f765a69580c.png

Fügen Sie der SQL-Anweisung ein Sternchen hinzu, sodass sie wie unten dargestellt SELECT * FROM... lautet, und klicken Sie dann auf die Schaltfläche „ABFRAGE AUSFÜHREN“.

b3a001e11c2902f2.png

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

2c894d091b789ca3.png

Wenn Sie Ergebnisse sehen, werden Daten richtig übertragen.

c8a061cebb7b528a.png

Nachdem Daten übertragen werden, können Sie jetzt ein Analysedashboard 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 auf das Kästchen, 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 noch einmal 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. Alle Felder sollten eine Zahl sein, mit Ausnahme von „timecollected“ und „sensorID“. „timecollected“ ist auf „Date Hour“ (Datum und Stunde) und nicht nur auf „Date“ (Datum) festgelegt. Ändern Sie die Aggregationsfelder wie unten dargestellt. Taupunkt, Temperatur, Luftfeuchtigkeit und Druck sollten Durchschnittswerte sein und alles andere sollte auf „Keine“ festgelegt werden. Klicken Sie auf die Schaltfläche „Bericht erstellen“.

c60887e29c3bdf9b.png

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

5ec3888dfdd85095.png

Wenn Sie aufgefordert werden, Ihr Google-Konto auszuwählen, tun Sie dies und klicken Sie dann auf die Schaltfläche „Zulassen“, damit Data Studio seine Berichte in Google Drive speichern kann.

7b8006a813b3defa.png

Sie sehen einen leeren Canvas, auf dem Sie Ihr Dashboard erstellen können. Wählen Sie in der oberen Symbolleiste „Zeitreihen“ aus.

c7cd97354e1cde04.png

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

e0e82cb19921f835.png

Wählen Sie auf der rechten Seite des Fensters den Tab „Stil“ aus. „Fehlende Daten“ von „Linie zu Null“ in „Zeilenumbrüche“ ändern Löschen Sie im Bereich „Linke Y-Achse“ die 0 aus „Achse (min.)“, um die Einstellung in „(Autom.)“ zu ändern.

c7620bfe734d546.png

Klicken Sie auf das Diagramm im Tabellenblatt und kopieren/fügen Sie es dreimal ein (Strg+C/Strg+V). Richten Sie die Grafiken so aus, dass jede ein Viertel des Layouts einnimmt.

9a7d3faa28996219.png

Klicken Sie auf jedes Diagramm und dann im Bereich „Zeitreiheneigenschaften und Daten“ auf den vorhandenen Messwert (Taupunkt). Wählen Sie einen anderen Messwert aus, der angezeigt werden soll, bis alle vier Wetterdaten (Taupunkt, Temperatur, Luftfeuchtigkeit und Druck) ein eigenes Diagramm haben.

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

Sie haben jetzt ein einfaches Dashboard erstellt.

8f59e8f4d44b8552.png

10. Glückwunsch!

Sie haben eine vollständige 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 das Google Cloud SDK sicher verwendet werden kann, um Daten in die Google Cloud Platform zu übertragen. Sie haben jetzt praktische Erfahrung mit einem wichtigen Architekturmuster gesammelt, das hohe Datenmengen verarbeiten und gleichzeitig die Verfügbarkeit aufrechterhalten kann.

79cd6c68e83f7fea.png

Klären

Wenn Sie mit den Wetterdaten und der Analysepipeline fertig sind, können Sie die laufenden Ressourcen entfernen.

Wenn Sie den IoT-Sensor selbst gebaut haben, schalten Sie ihn aus. Drücken Sie im Terminalfenster Strg + C, um das Skript zu beenden, und geben Sie dann Folgendes ein, um den Raspberry Pi herunterzufahren:

  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

Rufen Sie „Speicher“ auf, 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 neben Ihrem Projektnamen auf den Abwärtspfeil, klicken Sie rechts neben dem Dataset „weatherData“ auf den Abwärtspfeil und dann auf „Dataset löschen“.

a952dfeec49248c4.png

Geben Sie bei Aufforderung die Dataset-ID (weatherData) ein, um das Löschen der Daten abzuschließen.

6310b1cc8da31a77.png