サーバーレス データ パイプラインの構築: IoT からアナリティクスへ

1. 概要/概要

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

作業内容

この Codelab では、モノのインターネット(IoT)デバイスから開始し、メッセージ キューを使用してデータの受信と配信を行い、サーバーレス関数を使用してデータをデータ ウェアハウスに移動し、情報を表示するダッシュボードを作成する気象データ パイプラインを構築します。IoT デバイスには気象センサー付きの Raspberry Pi を使用し、Google Cloud Platform の複数のコンポーネントでデータ パイプラインを構成します。Raspberry Pi の作成は有益ですが、この Codelab ではオプションとなります。ストリーミング気象データはスクリプトに置き換えることができます。

79cd6c68e83f7fea.png

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

e28ca9ea4abb1457.png

学習内容

  • Google Pub/Sub の使用方法
  • Google Cloud Functions の関数をデプロイする方法
  • Google BigQuery を活用する方法
  • Google データポータルを使用してダッシュボードを作成する方法
  • さらに、IoT センサーを構築する場合は、Google Cloud SDK の利用方法と、Google Cloud Platform へのリモート アクセス呼び出しを保護する方法も学習します。

必要なもの

サンプルデータとスクリプトを活用せずに、この Codelab の IoT センサー部分を構築する場合は、以下も必要です(こちらで、完全なキットまたは個別の部品として注文できます)。

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

また、HDMI 入力を備えたパソコンのモニターまたはテレビにアクセスできること、HDMI ケーブル、キーボード、マウスを利用できることも想定されます。

2. 設定方法

セルフペース型の環境設定

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

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

f414a63d955621a7.png

3415e861c09cd06a.png

この Codelab を実行するために必要な費用は数ドル以上です。ただし、使用するリソースを増やす場合や、リソースを実行したままにする場合は、コストが高くなる可能性があります。Codelab の最後にあるクリーンアップ セクションを必ず実施してください。

3. BigQuery テーブルを作成する

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

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

12a838f78a10144a.png

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

27616683b64ce34a.png

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

62cfcbd1add830ea.png

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

3d7bff6f9843fa3c.png

[Source Data] で [Create empty table] を選択します。[Destination table name] に weatherDataTable と入力します。[スキーマ] で、合計 9 つのフィールドになるまで [フィールドを追加] ボタンをクリックします。以下に示すようにフィールドに入力し、各フィールドに適切なタイプを選択します。すべての設定が完了したら、[テーブルを作成] ボタンをクリックします。

eef352614a5696a7.png

次のような結果が表示されます。

7d10e5ab8c6d6a0d.png

これで、気象データを受信するためのデータ ウェアハウスの設定が完了しました。

4. Pub/Sub トピックを作成する

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

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

Cloud コンソールで、[Pub/Sub]、[トピック] の順に選択します。

331ad71e8a1ea7b.png

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

9f6fca9dc8684801.png

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

643670164e9fae12.png

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

d7b049bc66a34db6.png

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

7c385759f65a1031.png

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

トピックへの安全なパブリッシュ

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

Cloud コンソールで、[IAM と管理]、[サービス アカウント] の順に選択します。

8e2f8a1428d0feca.png

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

60892b564e0ac140.png

[ロール] プルダウンで、Pub/Sub パブリッシャーのロールを指定します。

31f8c944af11270e.png

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

7e3f9d7e56a44796.png

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

60a7da32dd85ba73.png

サービス アカウントが作成され、それに鍵 ID が関連付けられていることを確認します。

b25f6f5629fe8fd7.png

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

c4414fe61be320a9.png

[Create Bucket] ボタンをクリックします。

cde91311b267fc65.png

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

28c10e41b401f479.png

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

a0f6d069d42cec4b.png

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

55b25c8b9d73ec19.png

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

5. Cloud Functions の関数を作成する

クラウド コンピューティングにより、完全なサーバーレス コンピューティング モデルを実現できるようになりました。このモデルでは、どこでイベントが発生しても、それに応答してオンデマンドでロジックを起動できます。このラボでは、メッセージが天気トピックにパブリッシュされるたびに Cloud Functions が開始され、メッセージを読み取って BigQuery に保存します。

Cloud コンソールで、[Cloud Functions] を選択します。

a14ac2e4f03bf831.png

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

40ba0a08430e0e8a.png

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

5d82d8faeffa55bf.png

[名前] フィールドに、「function-weatherPubSubToBQ」と入力します。[トリガー] で [Cloud Pub/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

これで、Functions を使用して Pub/Sub を BigQuery に接続できました。

6. IoT ハードウェアを設定する(省略可)

Raspberry Pi とセンサーを組み立てる

ピンが 7 個を超える場合は、ヘッダーを 7 個のみにカットします。ヘッダーピンをセンサーボードに半田付けします。

a162e24426118c97.png

ハンマー ヘッダーのピンを Raspberry Pi に慎重に取り付けます。

a3a697907fe3c9a9.png

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

1e4e2459cd3333ec.png

ブレッドボードのワイヤーで、下の図のようにセンサーを Raspberry Pi に接続します。

392c2a9c85187094.png

Raspberry Pi のピン

センサーの接続

ピン 1(3.3 V)

VIN

ピン 3(CPIO2)

SDI

ピン 5(GPIO3)

SCK

ピン 9(接地)

GND

44322e38d467d66a.png

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

Raspberry Pi とセンサーを構成する

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

a16f0da19b93126.png

Wi-Fi アイコン(画面右上)をクリックし、ネットワークを選択します。セキュリティで保護されたネットワークの場合は、パスワード(事前共有キー)を入力します。

17f380b2d41751a8.png

画面左上のラズベリー アイコンをクリックし、[設定]、[Raspberry Pi の設定] の順に選択します。[Interfaces] タブで [I2C] を有効にします。[ローカライズ] タブで、言語 / 地域とタイムゾーンを設定します。タイムゾーンを設定したら、Raspberry Pi の再起動を許可します。

14741a77fccdb7e7.png

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

9df6f228f6a31601.png

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

  sudo i2cdetect -y 1

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

cd35cd97bee8085a.png

Google Cloud SDK をインストールする

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

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

  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 Cloud SDK をインストールします。

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

[Do you want to continue?] というメッセージが表示されたら、Enter キーを押します。

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

  pip install tendo

Python パッケージ管理システムを使用して、Python 用の Google Cloud Pub/Sub パッケージと OAuth2 パッケージがインストールされ、最新の状態であることを確認する

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

Google Cloud SDK を初期化する

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

Raspberry Pi のコマンドラインから、

  gcloud init --console-only

「Would you like to log in (Y/n)?」というメッセージが表示されたら、Enter キーを押します。

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

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

Google Cloud SDK が Google アカウントへのアクセスをリクエストしていることを示すメッセージが表示されます。[許可] ボタンをクリックします。

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

[Pick cloud project to use:] を求められたら、この Codelab で使用しているプロジェクト名に対応する番号を入力し、Enter キーを押します。

Compute API を有効にするように求められたら、Enter ボタンを押して有効にします。その後、Google Compute Engine を構成するように求められます。Enter キーを押します。リージョン / ゾーンの候補のリストが表示されます。近くのリージョン / ゾーンを選択し、対応する番号を入力して Enter キーを押します。

しばらくすると、いくつかの追加情報が表示されます。Google Cloud SDK が構成されました。ウェブブラウザ ウィンドウは、今後必要なくなるため閉じていただいても構いません。

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

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 トピックの名前に変更します(これらについては、この Codelab の「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"

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

セキュリティ キー(「トピックへの安全なパブリッシュ」セクションのキー)を Raspberry Pi にコピーします。

SFTP または SCP を使用してローカルマシンから Raspberry Pi に(/home/pi ディレクトリに)セキュリティ キーをコピーした場合は、次のステップをスキップして、パスのエクスポートに進んでください。

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

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

ファイルがコピー中であり、オペレーションが完了したことを示すメッセージが表示されます。

Raspberry Pi のコマンドラインから、セキュリティ キーのパスをエクスポートします(ファイル名を実際のものに変更します)。

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

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

7. データ パイプラインを開始します。

Compute API を有効にする必要がある場合がある

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

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

  cd /home/pi/iot-data-pipeline

天気スクリプトを開始する

  python checkWeather.py

ターミナル ウィンドウに、天気データの結果が 1 分ごとに出力されます。データフローでは、次のセクション(データフローの確認)までスキップできます。

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

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

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

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

c4414fe61be320a9.png

[Create Bucket] ボタンをクリックします。

cde91311b267fc65.png

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

1dad4cfbccfc96b1.png

Cloud コンソールで [Dataflow] を選択します。

43ec245b47ae2e78.png

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

da55aaf2a1b0a0d0.png

ジョブの詳細を次のように入力します。その際、以下の点に注意してください。

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

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

5f8ca16672f19d9b.png

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

e020015c369639ad.png

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

218a3ff7197dcf75.png

8. データの送信を確認する

Cloud Functions の関数ログ

Cloud Functions の関数が Pub/Sub によってトリガーされていることを確認する

  gcloud beta functions logs read function-weatherPubSubToBQ

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

d88f7831dabc8b3f.png

BigQuery データ

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

85627127d58f1d2e.png

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

44dc0f765a69580c.png

SQL ステートメントにアスタリスクを追加して、次のように SELECT * FROM... と書かれるようにしてから、[RUN QUERY] ボタンをクリックします。

b3a001e11c2902f2.png

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

2c894d091b789ca3.png

結果が表示された場合は、データが正常に転送されています。

c8a061cebb7b528a.png

これで、データが流れるようになったので、分析ダッシュボードを構築できます。

9. データポータル ダッシュボードを作成する

Google データポータルではデータを情報豊富なダッシュボードやレポートにまとめて、簡単に読み取りや共有ができ、全面的にカスタマイズすることもできます。

ウェブブラウザで https://datastudio.google.com にアクセスします。

10f8c27060cd7430.png

[新しいレポートの開始] で [空白] をクリックし、[使ってみる] ボタンをクリックします。

df1404bc0047595e.png

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

55e91d3dd88b05ca.png

[Create New Data Source] ボタンをクリックします。

a22f3fac05774fc9.png

[BigQuery] をクリックし、[承認] ボタンをクリックし、データポータルで使用する Google アカウントを選択します(この Codelab で使用していたアカウントと同じものである必要があります)。

5ab03f341edc8964.png

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

22bcdbb5f5f1d30c.png

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

dc6b6b0ed9ced509.png

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

c60887e29c3bdf9b.png

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

5ec3888dfdd85095.png

Google アカウントの選択を求められたら、アカウントを選択して [許可] ボタンをクリックし、データポータルでレポートを Google ドライブに保存できるようにします。

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

空白のシートの左上に長方形を描画します。空白シート全体の約 4 分の 1 を占めるはずです。

e0e82cb19921f835.png

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

c7620bfe734d546.png

シート上のグラフをクリックし、3 回コピー&ペースト(Ctrl+C / Ctrl+V)します。それぞれが 4 分の 1 のレイアウトを持つようにグラフを揃えます。

9a7d3faa28996219.png

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

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

これで、基本的なダッシュボードが完成しました。

8f59e8f4d44b8552.png

10. 完了

これで、データ パイプライン全体が作成されました。その中で、Google Pub/Sub の使用方法、サーバーレス関数のデプロイ方法、BigQuery の活用方法、データポータルを使用して分析ダッシュボードを作成する方法を学びました。また、Google Cloud SDK を使用して Google Cloud Platform にデータを安全に転送する方法についても説明しました。最後に、可用性を維持しながら大規模な処理を処理できる重要なアーキテクチャ パターンを実際に体験しました。

79cd6c68e83f7fea.png

クリーンアップ

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

IoT センサーを構築した場合は、センサーをシャットダウンします。ターミナル ウィンドウで Ctrl+C キーを押してスクリプトを停止してから、次のコマンドを入力して Raspberry Pi の電源を切ります。

  shutdown -h now

Cloud Functions に移動し、function-weatherPubSubToBQ の横にあるチェックボックスをオンにして、[削除] をクリックします。

ae95f4f7178262e0.png

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

6fb0bba3163d9a32.png

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

9067fb2af9f907f4.png

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

a952dfeec49248c4.png

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

6310b1cc8da31a77.png