サーバーレスデータパイプラインの構築:IoTから分析

Web、アプリケーションサーバー、およびデータベースで構成される多層アプリケーションはWeb開発の基盤であり、多くのWebサイトの出発点ですが、成功すると、スケーラビリティ、統合、および俊敏性に関する課題が生じることがよくあります。たとえば、データをリアルタイムで処理するにはどうすればよいでしょうか。また、複数の主要なビジネスシステムにデータを配布するにはどうすればよいでしょうか。これらの問題とインターネット規模のアプリケーションの需要が相まって、分散メッセージングシステムの必要性が高まり、データパイプラインを使用して復元力のあるリアルタイムシステムを実現するアーキテクチャパターンが生まれました。その結果、リアルタイムデータを分散メッセージングシステムに公開する方法と、データパイプラインを構築する方法を理解することは、開発者とアーキテクトの両方にとって重要なスキルです。

何を構築するか

このコードラボでは、モノのインターネット(IoT)デバイスで始まり、メッセージキューを利用してデータを送受信し、サーバーレス機能を利用してデータをデータウェアハウスに移動し、作成する気象データパイプラインを構築します。情報を表示するダッシュボード。気象センサーを備えたRaspberryPiがIoTデバイスに使用され、Google CloudPlatformのいくつかのコンポーネントがデータパイプラインを形成します。 Raspberry Piを構築することは有益ですが、このコードラボのオプション部分であり、ストリーミング気象データはスクリプトに置き換えることができます。

79cd6c68e83f7fea.png

このコードラボの手順を完了すると、温度、湿度、露点、気圧を表示するダッシュボードにデータを供給するストリーミングデータパイプラインが作成されます。

e28ca9ea4abb1457.png

あなたが学ぶこと

  • Google Pub / Subの使用方法
  • GoogleCloudFunctionをデプロイする方法
  • GoogleBigQueryを活用する方法
  • Google DataStudioを使用してダッシュボードを作成する方法
  • さらに、IoTセンサーを構築する場合は、Google Cloud SDKの利用方法と、Google CloudPlatformへのリモートアクセス通話を保護する方法も学習します。

必要なもの

サンプルデータとスクリプトを活用する代わりに、このコードラボのIoTセンサー部分を構築する場合は、次のものも必要になります( 完全なキットとして、またはここで個別のパーツとして注文できます)...

  • Raspberry Pi Zero W、電源、SDメモリーカード、ケース付き
  • USBカードリーダー
  • USBハブ(キーボードとマウスをRaspberry Piの唯一のUSBポートに接続できるようにするため)
  • 女性から女性へのブレッドボードワイヤー
  • GPIOハンマーヘッダー
  • BME280センサー
  • はんだごてとはんだごて

さらに、HDMI入力、HDMIケーブル、キーボード、およびマウスを備えたコンピューターモニターまたはテレビにアクセスできることを前提としています。

セルフペース環境のセットアップ

Googleアカウント(GmailまたはG Suite)をまだお持ちでない場合は、アカウントを作成する必要があります。すでにGoogleアカウントを持っているかどうかに関係なく、 300ドルの無料トライアルをぜひご利用ください。

Google Cloud Platformコンソール( console.cloud.google.com )にログインします。このラボではデフォルトのプロジェクト(「マイファーストプロジェクト」)を使用するか、新しいプロジェクトを作成することを選択できます。新しいプロジェクトを作成する場合は、 [リソース管理]ページを使用できます。プロジェクトIDは、すべてのGoogle Cloudプロジェクトで一意の名前である必要があります(以下に示すものはすでに取得されており、機能しません)。後で必要になるので、プロジェクトIDをメモします(つまり、プロジェクトIDは_____になります)。

f414a63d955621a7.png

3415e861c09cd06a.png

このコードラボを実行するのに数ドル以上かかることはありませんが、より多くのリソースを使用することにした場合、またはリソースを実行したままにした場合は、さらに高くなる可能性があります。コードラボの最後にあるクリーンアップセクションを必ず実行してください。

BigQueryは、サーバーレスで拡張性が高く、低コストのエンタープライズデータウェアハウスであり、分析ダッシュボードで情報をクエリできるようにしながら、IoTデバイスからストリーミングされるデータを保存するための理想的なオプションになります。

すべてのIoT気象データを保持するテーブルを作成しましょう。クラウドコンソールからBigQueryを選択します。これにより、BigQueryが新しいウィンドウで開きます(元のウィンドウに再度アクセスする必要があるため、閉じないでください)。

12a838f78a10144a.png

プロジェクト名の横にある下矢印アイコンをクリックして、[新しいデータセットの作成]を選択します

27616683b64ce34a.png

データセットに「weatherData」と入力し、保存する場所を選択して、「OK」をクリックします。

62cfcbd1add830ea.png

データセットの横にある「+」記号をクリックして、新しいテーブルを作成します

3d7bff6f9843fa3c.png

[ソースデータ]で、[空のテーブルを作成する]を選択します。 「宛先テーブル名」に、weatherDataTableと入力します。 [スキーマ]で、合計9つのフィールドが表示されるまで、[フィールド追加]ボタンをクリックします。以下に示すようにフィールドに入力し、各フィールドに適切なタイプも選択していることを確認してください。すべてが完了したら、[テーブル作成]ボタンをクリックします。

eef352614a5696a7.png

このような結果が表示されるはずです...

7d10e5ab8c6d6a0d.png

これで、気象データを受信するためのデータウェアハウスがセットアップされました。

Cloud Pub / Subは、ストリーム分析とイベント駆動型コンピューティングシステムのためのシンプルで信頼性が高くスケーラブルな基盤です。その結果、着信IoTメッセージを処理し、ダウンストリームシステムがそれらを処理できるようにするのに最適です。

まだBigQueryのウィンドウが表示されている場合は、クラウドコンソールに戻ります。 Cloud Consoleを閉じた場合は、https://console.cloud.google.comにアクセスしてください

クラウドコンソールから、[Pub / Sub]、[トピック]の順に選択します。

331ad71e8a1ea7b.png

[APIを有効にする]プロンプトが表示された場合は、[APIを有効にする]ボタンをクリックします。

9f6fca9dc8684801.png

[トピックの作成]ボタンをクリックします

643670164e9fae12.png

トピック名として「weatherdata」と入力し、[作成]をクリックします

d7b049bc66a34db6.png

新しく作成されたトピックが表示されます

7c385759f65a1031.png

これで、IoTメッセージをパブリッシュし、他のプロセスがそれらのメッセージにアクセスできるようにするためのPub / Subトピックができました。

トピックへの安全な公開

Google Cloud Consoleの外部のリソース(IoTセンサーなど)からPub / Subトピックにメッセージを公開する場合は、サービスアカウントを使用してアクセスをより厳密に制御し、作成して接続のセキュリティを確保する必要があります。信頼証明書。

クラウドコンソールから、[IAMと管理]、[サービスアカウント]の順に選択します

8e2f8a1428d0feca.png

[サービスアカウントの作成]ボタンをクリックします

60892b564e0ac140.png

[役割]ドロップダウンで、Pub / SubPublisherの役割を選択します

31f8c944af11270e.png

サービスアカウント名(iotWeatherPublisher)を入力し、[新しい秘密鍵を提供する]チェックボックスをオンにし、[鍵の種類]がJSONに設定されていることを確認して、[作成]をクリックします。

7e3f9d7e56a44796.png

セキュリティキーは自動的にダウンロードされます。キーは1つしかないため、紛失しないことが重要です。 [閉じる]をクリックします。

60a7da32dd85ba73.png

サービスアカウントが作成され、それに関連付けられたキーIDがあることがわかります。

b25f6f5629fe8fd7.png

後で簡単にキーにアクセスできるように、キーをGoogle CloudStorageに保存します。クラウドコンソールから、[ストレージ]、[ブラウザ]の順に選択します。

c4414fe61be320a9.png

[バケットの作成]ボタンをクリックします

cde91311b267fc65.png

ストレージバケットの名前を選択し(Google Cloud全体でグローバルに一意の名前である必要があります)、[作成]ボタンをクリックします

28c10e41b401f479.png

自動的にダウンロードされたセキュリティキーを見つけて、ストレージバケットにドラッグ/ドロップまたはアップロードします

a0f6d069d42cec4b.png

キーのアップロードが完了すると、CloudStorageブラウザーに表示されます。

55b25c8b9d73ec19.png

後で使用できるように、ストレージバケット名とセキュリティキーファイル名をメモしておきます。

クラウドコンピューティングは、どこからでも発生するイベントに応答してロジックをオンデマンドでスピンアップできる、完全にサーバーレスのコンピューティングモデルを可能にしました。このラボでは、天気のトピックにメッセージが公開されるたびにCloud Functionが起動し、メッセージを読み取ってBigQueryに保存します。

クラウドコンソールから、[クラウド機能]を選択します

a14ac2e4f03bf831.png

APIメッセージが表示された場合は、[APIを有効にする]ボタンをクリックします

40ba0a08430e0e8a.png

[関数の作成]ボタンをクリックします

5d82d8faeffa55bf.png

「名前」フィールドに、function-weatherPubSubToBQと入力します。 [トリガー]で[CloudPub / Sub]トピックを選択し、[トピック]ドロップダウンで[weatherdata]を選択します。ソースコードについては、インラインエディタを選択してください。 index.jsタブで、最初にあるものの上に次のコードを貼り付けます。ご使用の環境に合わせて、projectId、datasetId、およびtableIdの定数を必ず変更してください。

/**
 * 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();
};

package.jsonタブで、そこにあるプレースホルダーコードの上に次のコードを貼り付けます

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

実行する関数が「HelloWorld」に設定されている場合は、「subscribe」に変更してください。 [作成]ボタンをクリックします

3266d5268980a4db.png

関数がデプロイされたことを示すまで、約2分かかります

26f45854948426d0.png

おめでとう!関数を介してPub / SubをBigQueryに接続しました。

ラズベリーパイとセンサーを組み立てる

ピンが7つを超える場合は、ヘッダーを7ピンのみにトリミングします。ヘッダーピンをセンサーボードにはんだ付けします。

a162e24426118c97.png

ハンマーヘッダーピンをRaspberryPiに慎重に取り付けます

a3a697907fe3c9a9.png

こちらの手順に従って、SDカードをフォーマットし、NOOBS(New Out Of Box Software)インストーラーをインストールします。 SDカードをRaspberryPiに挿入し、RaspberryPiをケースに入れます。

1e4e2459cd3333ec.png

下の図に従って、ブレッドボードワイヤーを使用して、センサーをRaspberryPiに接続します。

392c2a9c85187094.png

ラズベリーパイピン

センサー接続

ピン1(3.3V)

VIN

ピン3(CPIO2)

SDI

ピン5(GPIO3)

SCK

ピン9(アース)

GND

44322e38d467d66a.png

モニター(ミニHDMIコネクタを使用)、キーボード/マウス(USBハブ付き)、最後に電源アダプターを接続します。

RaspberryPiとセンサーを構成します

Raspberry Piの起動が完了したら、目的のオペレーティングシステムでRaspbianを選択し、目的の言語が正しいことを確認してから、[インストール](ウィンドウの左上部分にあるハードドライブアイコン)をクリックします。

a16f0da19b93126.png

Wifiアイコン(画面の右上)をクリックして、ネットワークを選択します。安全なネットワークの場合は、パスワード(事前共有キー)を入力します。

17f380b2d41751a8.png

ラズベリーアイコン(画面の左上)をクリックし、[設定]、[ラズベリーパイの構成]の順に選択します。 [インターフェイス]タブで、I2Cを有効にします。 [ローカリゼーション]タブから、ロケールとタイムゾーンを設定します。タイムゾーンを設定した後、RaspberryPiを再起動します。

14741a77fccdb7e7.png

再起動が完了したら、ターミナルアイコンをクリックしてターミナルウィンドウを開きます。

9df6f228f6a31601.png

次のコマンドを入力して、センサーが正しく接続されていることを確認します。

  sudo i2cdetect -y 1

結果は次のようになります。77と表示されていることを確認してください。

cd35cd97bee8085a.png

Google CloudSDKをインストールします

Google Cloudプラットフォームのツールを活用するには、Google CloudSDKをRaspberryPiにインストールする必要があります。 SDKには、Google Cloud Platformの管理と活用に必要なツールが含まれており、いくつかのプログラミング言語で利用できます。

Raspberry Piでターミナルウィンドウをまだ開いていない場合は開き、SDKのバージョンをRaspberryPiのオペレーティングシステムに一致させる環境変数を設定します。

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

次に、Google Cloud SDKパッケージが保存されている場所を追加して、インストールツールがSDKのインストールを求められたときにどこを見ればよいかがわかるようにします。

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

Googleのパッケージリポジトリから公開鍵を追加して、Raspberry Piがセキュリティを検証し、インストール中にコンテンツを信頼するようにします

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

Raspberry Piのすべてのソフトウェアが最新であることを確認し、コアのGoogle CloudSDKをインストールします

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

「続行しますか?」というプロンプトが表示されたら、Enterキーを押します。

Pythonパッケージマネージャーを使用してtendoパッケージをインストールします。このパッケージは、スクリプトが複数回実行されており、天気スクリプトに適用するためにインストールされているかどうかを確認するために使用されます。

  pip install tendo

Pythonパッケージマネージャーを使用して、Python用のGoogle Cloud PubSubおよびOAuth2パッケージがインストールされ、最新であることを確認します

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

Google CloudSDKを初期化します

SDKを使用すると、GoogleCloudへのリモートの認証済みアクセスが可能になります。このコードラボでは、セキュリティキーをRaspberry Piに簡単にダウンロードできるように、ストレージバケットにアクセスするために使用されます。

Raspberry Piのコマンドラインから、次のように入力します。

  gcloud init --console-only

「ログインしますか(Y / n)?」というプロンプトが表示されたら、Enterキーを押します。

「ブラウザで次のリンクに移動します:」の後にhttps://accounts.google.com/o/oauth ?...で始まる長いURLが表示されたら、マウスでURLにカーソルを合わせて右クリックします。 「URLをコピー」を選択します。次に、Webブラウザ(画面の左上隅にある青い地球のアイコン)を開き、アドレスバーを右クリックして[貼り付け]をクリックします。

サインイン画面が表示されたら、Google Cloudアカウントに関連付けられているメールアドレスを入力し、Enterキーを押します。次に、パスワードを入力して、[次へ]ボタンをクリックします。

Google CloudSDKがGoogleアカウントにアクセスするように求められます。 [許可]ボタンをクリックします。

確認コードが表示されます。マウスを使用して強調表示し、右クリックして[コピー]を選択します。ターミナルウィンドウに戻り、カーソルが「確認コードを入力してください:」の右側にあることを確認し、マウスで右クリックして、[貼り付け]を選択します。 Enterボタンを押します。

「使用するクラウドプロジェクトを選択してください:」というメッセージが表示された場合は、このコードラボで使用しているプロジェクト名に対応する番号を入力して、Enterキーを押します。

コンピューティングAPIを有効にするように求められた場合は、Enterボタンを押して有効にします。その後、Google ComputeEngineの設定を構成するように求められます。 Enterキーを押します。可能性のある地域/ゾーンのリストが表示されます–近くの地域/ゾーンを選択し、対応する番号を入力して、Enterキーを押します。

すぐに、いくつかの追加情報が表示されます。これで、Google CloudSDKが構成されました。今後は必要ないので、Webブラウザウィンドウを閉じることができます。

センサーソフトウェアと天気スクリプトをインストールします

Raspberry Piのコマンドラインから、入力/出力ピンから情報を読み取るために必要なパッケージのクローンを作成します。

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

ダウンロードしたパッケージをインストールします

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

気象センサーを有効にするプロジェクトコードのクローンを作成します

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

ダウンロードしたソフトウェアの残りの部分と同じディレクトリにセンサードライバをコピーします。

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

次のように入力してスクリプトを編集します...

  nano checkWeather.py

プロジェクトをプロジェクトIDに変更し、トピックをPub / Subトピックの名前に変更します(これらは、このコードラボの「セットアップとPub / Subトピックの作成」セクションに記載されています)。

sensorID、sensorZipCode、sensorLat、sensorLongの値を任意の値に変更します。特定の場所または住所の緯度と経度の値は、ここにあります

必要な変更を完了したら、Ctrl-Xを押してnanoエディターの終了を開始します。 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"

セキュリティキーをインストールします

セキュリティキー(「トピックへの安全な公開」セクションから)をRaspberryPiにコピーします。

SFTPまたはSCPを使用してセキュリティキーをローカルマシンからRaspberryPi(/ home / piディレクトリ)にコピーした場合は、次の手順をスキップして、パスのエクスポートにジャンプできます。

セキュリティキーをストレージバケットに配置した場合は、ストレージバケットの名前とファイルの名前を覚えておく必要があります。 gsutilコマンドを使用して、セキュリティキーをコピーします。このコマンドはGoogleストレージにアクセスできます(gsutilという名前で、ファイルへのパスがgs://で始まる理由)。以下のコマンドを変更して、バケット名とファイル名を指定してください。

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

ファイルがコピー中であり、操作が完了したことを示すメッセージが表示されます。

Raspberry Piのコマンドラインから、セキュリティキーへのパスをエクスポートします(ファイル名を変更して、使用しているものと一致させます)

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

これで、GoogleCloudにデータを送信する準備ができたIoT気象センサーが完成しました。

ComputeAPIを有効にする必要があるかもしれません

RaspberryPiからのデータストリーミング

Raspberry Pi IoT気象センサーを構築した場合は、気象データを読み取るスクリプトを開始し、それをGoogle Cloud Pub / Subにプッシュします。 / home / pi / iot-data-pipelineディレクトリにいない場合は、最初にそこに移動します

  cd /home/pi/iot-data-pipeline

天気スクリプトを開始します

  python checkWeather.py

ターミナルウィンドウが毎分気象データの結果をエコーするのが見えるはずです。データが流れている状態で、次のセクションにスキップできます(データが流れていることを確認してください)。

シミュレートされたデータストリーミング

IoT気象センサーを構築しなかった場合は、Google Cloud Storageに保存されている公開データセットを使用し、それを既存のPub / Subトピックにフィードすることで、データストリーミングをシミュレートできます。 Google Dataflowと、Cloud Storageから読み取り、Pub / SubにパブリッシュするためのGoogle提供のテンプレートが使用されます。

プロセスの一環として、Dataflowには一時的な保存場所が必要になるため、この目的のためにストレージバケットを作成しましょう。

クラウドコンソールから、[ストレージ]、[ブラウザ]の順に選択します。

c4414fe61be320a9.png

[バケットの作成]ボタンをクリックします

cde91311b267fc65.png

ストレージバケットの名前を選択し(Google Cloud全体でグローバルに一意の名前である必要があることに注意してください)、[作成]ボタンをクリックします。間もなく必要になるため、このストレージバケットの名前を覚えておいてください。

1dad4cfbccfc96b1.png

クラウドコンソールから、[データフロー]を選択します。

43ec245b47ae2e78.png

テンプレートからジョブを作成(画面の上部)をクリックします

da55aaf2a1b0a0d0.png

以下に注意して、以下に示すようにジョブの詳細を入力します。

  • dataflow-gcs-to-pubsubのジョブ名を入力します
  • リージョンは、プロジェクトがホストされている場所に応じて自動選択する必要があり、変更する必要はありません。
  • GCS Text to Cloud Pub / SubのCloudDataflowテンプレートを選択します
  • 入力クラウドストレージファイルには、gs:// codelab-iot-data-pipeline-sampleweatherdata / *。jsonと入力します(これはパブリックデータセットです)
  • 出力Pub /サブトピックの場合、正確なパスはプロジェクト名によって異なり、「projects / yourProjectName / topics / weatherdata」のようになります。
  • 一時場所を、作成したGoogle Cloud Storageバケットの名前と、ファイル名プレフィックス「tmp」に設定します。 「gs:// myStorageBucketName / tmp」のようになります。

すべての情報を入力したら(以下を参照)、[ジョブの実行]ボタンをクリックします

5f8ca16672f19d9b.png

Dataflowジョブの実行が開始されます。

e020015c369639ad.png

Dataflowジョブが完了するまで約1分かかります。

218a3ff7197dcf75.png

クラウド機能ログ

クラウド機能がPub / Subによってトリガーされていることを確認します

  gcloud beta functions logs read function-weatherPubSubToBQ

ログには、関数が実行されていること、データが受信されていること、BigQueryに挿入されていることが示されている必要があります

d88f7831dabc8b3f.png

BigQueryデータ

データがBigQueryテーブルに流れていることを確認してください。 Cloud Consoleから、BigQuery(bigquery.cloud.google.com)に移動します。

85627127d58f1d2e.png

プロジェクト名(ウィンドウの左側)の下で、データセット(weatherData)をクリックし、次にテーブル(weatherDataTable)をクリックしてから、[テーブルのクエリ]ボタンをクリックします。

44dc0f765a69580c.png

以下に示すように、SQLステートメントにアスタリスクを追加してSELECT * FROM ...と表示し、[クエリの実行]ボタンをクリックします。

b3a001e11c2902f2.png

プロンプトが表示されたら、[クエリの実行]ボタンをクリックします

2c894d091b789ca3.png

結果が表示された場合、データは適切に流れています。

c8a061cebb7b528a.png

データが流れると、分析ダッシュボードを構築する準備が整います。

Google Data Studioは、データを読みやすく、共有しやすく、完全にカスタマイズ可能な有益なダッシュボードとレポートに変換します。

Webブラウザーから、https://datastudio.google.comにアクセスします。

10f8c27060cd7430.png

[新しいレポートを開始する]で、[空白]をクリックしてから、[開始]ボタンをクリックします

df1404bc0047595e.png

チェックボックスをクリックして利用規約に同意し、[次へ]ボタンをクリックして、受信するメールを選択し、[完了]ボタンをクリックします。もう一度、[新しいレポートを開始する]で、[空白]をクリックします

55e91d3dd88b05ca.png

[新しいデータソースの作成]ボタンをクリックします

a22f3fac05774fc9.png

BigQueryをクリックし、[認証]ボタンをクリックして、Data Studioで使用するGoogleアカウントを選択します(コードラボで使用しているものと同じである必要があります)。

5ab03f341edc8964.png

[許可]ボタンをクリックします

22bcdbb5f5f1d30c.png

プロジェクト名、データセット、テーブルを選択します。次に、[接続]ボタンをクリックします。

dc6b6b0ed9ced509.png

以下に示すようにタイプフィールドを変更します(timecollectedとsensorIDを除くすべてが数値である必要があります)。 timecollectedは(日付だけでなく)日付時間に設定されていることに注意してください。以下に示すように、[集計]フィールドを変更します(露点、温度、湿度、および圧力は平均であり、その他はすべて「なし」に設定する必要があります)。 [レポートの作成]ボタンをクリックします。

c60887e29c3bdf9b.png

[レポートに追加]ボタンをクリックして確認します

5ec3888dfdd85095.png

Googleアカウントを選択するように求められた場合は、選択してから[許可]ボタンをクリックして、データスタジオにレポートをGoogleドライブに保存させます。

7b8006a813b3defa.png

ダッシュボードを作成するための空白のキャンバスが表示されます。アイコンの一番上の行から、[時系列]を選択します。

c7cd97354e1cde04.png

白紙の左上隅に長方形を描きます。ブランクシート全体の約1/4を占める必要があります。

e0e82cb19921f835.png

ウィンドウの右側で、[スタイル]タブを選択します。欠落データを「LineToZero」から「LineBreaks」に変更します。 [左のY軸]セクションで、[軸の最小値]から0を削除して、(自動)に変更します。

c7620bfe734d546.png

シートのグラフをクリックして、3回コピー/貼り付け(Ctrl-C / Ctrl-V)します。それぞれがレイアウトの1/4になるようにグラフを配置します。

9a7d3faa28996219.png

各グラフをクリックし、[時系列プロパティとデータ]セクションで既存のメトリック(露点)をクリックし、4つの気象測定値(露点、温度、湿度、圧力)すべてに独自のグラフが表示されるまで表示する別のメトリックを選択します。

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

これで基本的なダッシュボードができました!

8f59e8f4d44b8552.png

データパイプライン全体を作成しました。そうすることで、Google Pub / Subの使用方法、サーバーレス関数のデプロイ方法、BigQueryの活用方法、DataStudioを使用した分析ダッシュボードの作成方法を学びました。さらに、Google CloudSDKを安全に使用してデータをGoogleCloudPlatformに取り込む方法を見てきました。最後に、可用性を維持しながら大量を処理できる重要なアーキテクチャパターンを実際に体験できるようになりました。

79cd6c68e83f7fea.png

掃除

気象データと分析パイプラインの実験が終了したら、実行中のリソースを削除できます。

IoTセンサーを構築した場合は、シャットダウンします。ターミナルウィンドウでCtrl-Cを押してスクリプトを停止し、次のように入力してRaspberryPiの電源を切ります。

  shutdown -h now

Cloud Functionsに移動し、function-weatherPubSubToBQの横にあるチェックボックスをクリックしてから、Deleteをクリックします。

ae95f4f7178262e0.png

Pub / Subに移動し、トピックをクリックし、weatherdataトピックの横にあるチェックボックスをクリックしてから、削除をクリックします。

6fb0bba3163d9a32.png

[ストレージ]に移動し、ストレージバケットの横にあるチェックボックスをクリックしてから、[削除]をクリックします

9067fb2af9f907f4.png

bigquery.cloud.google.comにアクセスし、プロジェクト名の横にある下向き矢印をクリックし、weatherDataデータセットの右側にある下向き矢印をクリックしてから、[データセットの削除]をクリックします。

a952dfeec49248c4.png

プロンプトが表示されたら、データの削除を完了するためにデータセットID(weatherData)を入力します。

6310b1cc8da31a77.png