AWS IoT TwinMakerで作成したクッキー工場をAmazon Managed Grafanaのダッシュボードに表示してみた

2022.12.21

こんにちは、CX事業本部 IoT事業部の若槻です。

AWS IoT TwinMakerの理解を深めるためにハンズオンを探していたところ、次の公式のGetting Startedを見つけました。AWS IoT TwinMakerで作成したクッキー工場をAmazon Managed Grafanaのダッシュボードに表示する、というものです。

初心者がIoT TwinMakerの理解を深められるちょうど良いハンズオンのようでしたのでやってみました。

作ったもの

ハンズオンを実施して次のようなダッシュボードを作ることができました。

やってみた

リソースはすべて北部バージニア(us-east-1)リージョンに作成しました。

Amazon Managed Grafanaワークスペースを作成

Amazon Managed Grafanaワークスペースを作成します。

今回は下記エントリで作成したものを使用しました。

開発環境の準備

開発環境はAmazon Cloud9を使用しました。

Cloud9のセットアップ方法は以下を御覧ください。

ただし上記手順内の2. Adjust EC2 settingsの[Expand volume size]に関しては、スクリプトを使用したこちらの方法を取る方がインスタンスのリブートなど不要でおすすめです。

以降、コマンド実行はすべてCloud9環境上のターミナルで実行する前提とします。

次のコマンドを実行して環境の準備を行います。

# Use the following command to build Lambda layers for CDK.
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

# Git Clone
git clone https://github.com/aws-samples/aws-iot-twinmaker-samples.git

# Change into the same directory as this README
cd aws-iot-twinmaker-samples

# Set your aws account id, you can use `aws sts get-caller-identity` to see the account id you're currently using
export CDK_DEFAULT_ACCOUNT=[replace_with_your_aws_account_id]

# Set some options for our install. If you want to use another workspace ID then change 'CookieFactory' to your preference
export GETTING_STARTED_DIR=$PWD
export AWS_DEFAULT_REGION=us-east-1
export CDK_DEFAULT_REGION=$AWS_DEFAULT_REGION
export TIMESTREAM_TELEMETRY_STACK_NAME=CookieFactoryTelemetry
export WORKSPACE_ID=CookieFactory

次のコマンドを実行してクッキー工場のサンプルデータをデプロイするPythonスクリプトで必要なモジュールをインストールします。

pip3 install -r $GETTING_STARTED_DIR/src/workspaces/cookiefactory/requirements.txt

IoT TwinMakerワークスペースの作成

次のコマンドを実行してTwinMakerワークスペースの実行ロールを作成します。IoTTwinMakerWorkspaceRoleから始まるIAMロールが作成されます。

python3 $GETTING_STARTED_DIR/src/workspaces/cookiefactory/setup_cloud_resources/create_iottwinmaker_workspace_role.py --region $AWS_DEFAULT_REGION

AWS IoT TwinMakerコンソールにアクセスし、ワークスペースの作成を開始します。

Step1で次のように指定して次へ進みます。

  • Name:CookieFactory
  • S3 bucket:Create an S3 bucket
  • Execution Role:先程作成したCloud9-IoTTwinMakerWorkspaceRole-から始まるIAMロール

ここで、Amazon Managed Grafanaコンソールにアクセスして、すでに作成してあるGrafanaのワークスペースの実行ロールを確認します。

TwinMakerワークスペースの作成画面に戻り、Step2で次のように指定し、[Skip to review and create]をクリックしてワークスペースの作成を一旦完了させます。

  • how you would like to manage your Grafana dashboards:Amazon Managed Grafana
  • Grafana authentication provider:先程確認したGrafanaのワークスペースの実行ロール

ここで次のコマンドを実行して、GrafanaのダッシュボードがTwinMakerワークスペースにアクセスするためのIAMロールを作成します。Amazon Managed Grafana Workspace IAM Role ARNには先程確認したGrafanaのワークスペースの実行ロールを指定します。これによりCloud9-IoTTwinMakerDashboardRole-から始まるIAMロールが作成されます。

python3 $GETTING_STARTED_DIR/src/modules/grafana/create_grafana_dashboard_role.py \
  --workspace-id $WORKSPACE_ID \
  --region $AWS_DEFAULT_REGION \
  --account-id $CDK_DEFAULT_ACCOUNT \
  --auth-provider <Amazon Managed Grafana Workspace IAM Role ARN>

TwinMakerコンソールでワークスペースCookieFactoryの[Dashboard settings]で[Modify]をクリック。

Step 2で次のように指定して、Step 3へ進み設定を保存します。

  • Dashboard role:先程作成したCloud9-IoTTwinMakerDashboardRole-から始まるIAMロール

サンプルIoTデータ格納用のリソース作成

次のコマンドを実行して、サンプルIoTデータを格納するためのリソースを作成します。

cd $GETTING_STARTED_DIR/src/modules/timestream_telemetry/cdk/

# install dependencies for the module
npm install

# Deploy the module.
cdk deploy --require-approval never

Amazon Timestreamテーブルなどのリソースが作成されました。

クッキー工場のエンティティ作成

次のコマンドを実行してTwinMakerのワークスペースにクッキー工場のエンティティを作成します。

cd $GETTING_STARTED_DIR/src/workspaces/cookiefactory/

# import cookie factory data into your workspace
python3 -m setup_content \
  --telemetry-stack-name $TIMESTREAM_TELEMETRY_STACK_NAME \
  --workspace-id $WORKSPACE_ID \
  --region-name $AWS_DEFAULT_REGION \
  --import-all

TwinMakerのワークスペースのエンティティ一覧を見ると作成されていますね。

またシーンは2つ作成されています。

シーンCookieFactoryを開くと、クッキー工場の3Dデータが確認できま。

シーンMixerを開くと、クッキー製造用のミキサーの3Dデータが確認できます。

GrafanaワークスペースでTwinMakerデータソースの設定

Grafanaワークスペースに管理者ユーザーでサインインします。

[Configuration > Pligins]でAWS IoT TwinMaker Appがインストール済みであることを確認します。

[Configuration > Data source]で[Add data source]をクリック。

データソース一覧からAWS IoT TwinMakerを選択。

[Settings]で次のように指定して[Save & Test]をクリックしテストが成功することを確認します。

  • Assume Role ARN:TwinMakerワークスペースの[Dashboard settings > Dashboard role]に設定したRole Arn
  • Workspace:TwinMakerワークスペースID(CookieFactory

Grafanaダッシュボードの作成

パス$GETTING_STARTED_DIR/src/workspaces/cookiefactory/sample_dashboards/にあるダッシュボード定義JSONmixer_alarms_dashboard.jsonをCloud9環境からダウンロードします。

Grafanaワークスペースで[+ > Import]をクリック。

インポートします。

ダッシュボードが作成され、クッキー工場の3Dデータやメトリクスなどが表示できました!

ダッシュボードの表示がエラーとなる場合

ダッシュボード定義JSONをインポートした際に、unknown query typeエラーが発生しデータの読み込みが上手く行えない場合があります。

その場合はエラーになっているpanelのquery設定を修正します。

[Alarm List] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これによりalarm listのデータが取得されるようになります。

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Alarms

他のpanelを修正時に正常な設定となっているか確認しやすいように、いずれかの[Alarm List]でいずれかのalarmを選択しておきます。(未選択だと必ずエラーとなるため)

[Selected Alarm History] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより[Alarm List]で選択中のentityのalarm statusの履歴が取得されるようになります。

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Property Value History by Entity
    • Entity:${sel_entity}
    • Component Name:${sel_comp}
    • Selected Properties:alarm_status

[Motor Temperature] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより[Alarm List]で選択中のmixerのTemperatureの履歴が取得されるようになります。

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Property Value History by Entity
    • Entity:${sel_entity}
    • Component Name:MixerComponent
    • Selected Properties:Temperature

[RPM] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより[Alarm List]で選択中のMixerのRPMの履歴が取得されるようになります。

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Property Value History by Entity
    • Entity:${sel_entity}
    • Component Name:MixerComponent
    • Selected Properties:RPM

[Mixer Alarm Id] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより[Alarm List]で選択中のAlarmIdが取得されるようになります.

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Property Value
    • Entity:${sel_entity}
    • Component Name:AlarmComponent
    • Selected Properties:alarm_key

[Asset Specification Documents] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより[Alarm List]で選択中のentityのドキュメント情報が取得されるようになります。

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Property Value
    • Entity:${sel_entity}
    • Component Name:SpecSheets
    • Selected Properties:documents

[Scene Viewer] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより各3Dモデルにalarm statusおよびtemperatureの情報が反映されるようになります。

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Property Value History by Component Type
    • Component Type:com.example.cookiefactory.alarm
    • Selected Properties:alarm_status
  • B:
    • Query Type:Get Property Value History by Entity
    • Entity:WaterTank
    • Component Name:WaterTank
    • Selected Properties:flowRate1
  • C:
    • Query Type:Get Property Value History by Entity
    • Entity:Mixer_1
    • Component Name:MixerComponent
    • Selected Properties:Temperature

[Mixer Viewer] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより[Alarm List]で選択中のentityのalarm statusが取得されるようになります。

  • Data source:AWS IoT TwinMaker
  • A:
    • Query Type:Get Alarm

最後に[Save]をクリックして変更を保存します。

ダッシュボードを触ってみる

各Mixerは継続的にIoTデータを送信しており、またアラームが設定されています。

一覧からいずれかのアラームを選択すると、[Selcted Alarm History]ではそのアラームのデータ履歴が表示されます。[Scene Viewer]では3Dモデル内で該当のミキサーが拡大表示されます。[Video Feeds]では該当のミキサーの現在のライブカメラ映像が表示されます。[Mixer Viewer]では該当のミキサー単体の3Dモデルが表示され詳細を確認できます。

StatusがACTIVEなアラームを選択すると、[Mixer Viewer]で該当のミキサーのアラーム発生部分がアイコンで分かるようになっています。

[Mixer Viewer]の[View]をクリックします。

するとミキサーを大きな画面で表示できます。

なぜか既定でライトが当たっておらず真っ黒ですが、画面更新したらライトが当たり良く見えるようになりました。

ちなみにダッシュボードに戻ると、次は[Scene Viewer]で工場全体の3Dモデルにライトが当たらなくなりましたが、Mixerと同じ要領でライトを再度当てることができます。この事象は必ず再現しますが原因が分かっていないです。解決方法分かり次第共有します。

ミキサーの色やアイコンの種類はIoTデータの値により変わります。

このルールはワークスペースの[Rules]より確認可能です。

Alarm Listにデータが表示されない場合

環境を作成してからしばらく経った後にダッシュボードにアクセスすると、Alarm Listにデータが表示されなくなっている場合があります。

これは、Grafanaでは既定では1時間以内の時系列データのみ取得されるようになっているためです。

これを解決する方法は2つあります。

  1. 1時間以前のデータが表示されるようにする
  2. data sourceに取得期間内のタイムスタンプのデータを作成する
1時間以前のデータが表示されるようにする

query optionを設定することにより既定の1時間から取得期間を変更できます。

[Query option > Relative time]で1wなどを指定すると、その期間のデータを取得できるようになります。

data sourceに取得期間内のタイムスタンプのデータを作成する

data sourceであるAmazon Timestream tableに直近のタイムスタンプのデータを作成および対応する時間のビデオを再作成することによっても対応可能です。こちらの方が実際の利用に即した対応方法かと思います。

まずAWS IoT TwinMaker > Workspaces > CookieFactory > Manage tags コンソールにアクセスして、samples_content_start_timeTagを削除します。(削除しなければこの次回スクリプト実行時にこのTagのタイムスタンプからデータ作成が開始されてしまいます)

次にsetup_contentスクリプトをimport-telemetryおよびimport-videoオプションを指定して実行します。

python3 -m setup_content \
  --telemetry-stack-name $TIMESTREAM_TELEMETRY_STACK_NAME \
  --workspace-id $WORKSPACE_ID \
  --region-name $AWS_DEFAULT_REGION \
  --import-telemetry \
  --import-video

これによりAlarm Listのデータおよびビデオが取得され表示されるようになりました。

おわりに

AWS IoT TwinMakerで作成したクッキー工場をAmazon Managed Grafanaのダッシュボードに表示してみました。

若干不安定な部分もありましたが、とてつもなくリッチなGrafanaダッシュボードが簡単に作れてしまいました。工場内でIoTデータを取得している産業機器で異常を検知した際に、メトリクスのグラフだけでなくカメラのLIVE動画や3Dモデルをパチパチ切り替えながら一つのダッシュボード上で簡単に状況を確認できるというのは体験としてとても衝撃的でした。

今回は公式ハンズオンの力を借りましたが、今後はこのレベルのGrafanaダッシュボードを自分で一から作成できるようになっていきたいと思います。

参考

以上