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

1. 概要/概要

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

作業内容

この Codelab では、モノのインターネット(IoT)デバイスから開始し、メッセージ キューを使用してデータの受信と配信を行い、サーバーレス関数を使用してデータをデータ ウェアハウスに移動し、情報を表示するダッシュボードを作成する気象データ パイプラインを構築します。気象センサーを搭載した Raspberry Pi を IoT デバイスに使用し、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 Hammer Header
  • 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(プロジェクト 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] を選択します。[宛先テーブル名] に「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

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

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.3V)

VIN

ピン 3(CPIO2)

SDI

ピン 5(GPIO3)

SCK

ピン 9(アース)

GND

44322e38d467d66a.png

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

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

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

a16f0da19b93126.png

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

17f380b2d41751a8.png

ラズベリーのアイコン(画面の左上)をクリックし、[環境設定]、[Raspberry Pi の設定] の順に選択します。[Interfaces] タブで [I2C] を有効にします。[Localisation] タブで、言語 / 地域とタイムゾーンを設定します。タイムゾーンを設定したら、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 ストレージにアクセスできます(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 ディレクトリにない場合は、先に /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

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

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)の順にクリックし、[Query Table] ボタンをクリックします。

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

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

22bcdbb5f5f1d30c.png

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

dc6b6b0ed9ced509.png

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

c60887e29c3bdf9b.png

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

5ec3888dfdd85095.png

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

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

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

e0e82cb19921f835.png

ウィンドウの右側にある [スタイル] タブを選択します。欠損データを「行をゼロ」に変更する「改行」に変更します。[左の 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

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

9067fb2af9f907f4.png

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

a952dfeec49248c4.png

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

6310b1cc8da31a77.png