こんにちは、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のワークスペースの実行ロール
[Create Workspace] をクリックして、ワークスペースの作成を一旦完了させます。
ここで次のコマンドを実行して、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
- Query Type:
他の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
- Query Type:
[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
- Query Type:
[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
- Query Type:
[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
- Query Type:
[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
- Query Type:
[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
- Query Type:
- B:
- Query Type:
Get Property Value History by Entity
- Entity:
WaterTank
- Component Name:
WaterTank
- Selected Properties:
flowRate1
- Query Type:
- C:
- Query Type:
Get Property Value History by Entity
- Entity:
Mixer_1
- Component Name:
MixerComponent
- Selected Properties:
Temperature
- Query Type:
[Mixer Viewer] panelでは、queryを次のように修正し[Apply]をクリックして反映します。これにより[Alarm List]で選択中のentityのalarm statusが取得されるようになります。
- Data source:
AWS IoT TwinMaker
- A:
- Query Type:
Get Alarm
- Query Type:
最後に[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時間以前のデータが表示されるようにする
- 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_time
Tagを削除します。(削除しなければこの次回スクリプト実行時にこのTagのタイムスタンプからデータ作成が開始されてしまいます)
次にsetup_content
スクリプトをimport-telemetry
およびimport-video
オプションを指定して実行します。
cd $GETTING_STARTED_DIR/src/workspaces/cookiefactory/
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ダッシュボードを自分で一から作成できるようになっていきたいと思います。
参考
- grafana-iot-twinmaker-app/README.md at main · grafana/grafana-iot-twinmaker-app
- AWS IoT TwinMaker App plugin for Grafana | Grafana Labs
- Configure AWS authentication | Grafana documentation
以上