見える化の先は"解かる化" ? チャットするだけで理解できる IoT プラットフォームの作り方 (後編)
2025-06-03 | Author : 森田 和明 (富士ソフト株式会社)
はじめに
本記事は後編となります。前編はこちら »
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。
5. Amazon Bedrock で分析してみよう
生成 AI を使ってAWS IoT SiteWise のデータを分析してみましょう。 AWS アーキテクチャはこのようになります。色々なサービスが登場し、手順もかなり多いのですが、一つ一つのサービスに対して実施する内容はそれほど難しくありません。
5-1. AWS IoT SiteWise のコールドストレージの設定
AWS IoT SiteWise のデータをコールドストレージに出力する設定を行います。
マネジメントコンソールで「AWS IoT SiteWise」の管理画面を開きます。
メニューの「ストレージ」を選択します。
「編集」をクリックします。

コールド階層ストレージをアクティブ化
「コールド階層ストレージをアクティブ化」を選択します。
S3 バケットの場所に、SiteWise のデータを格納するバケットを指定します。

保存
画面最下部の「保存」をクリックします。

コールドストレージの設定
これでコールドストレージの設定が有効化されました。コールドストレージへの出力は 6 時間ごとに実行されるため、すぐにはデータが格納されません。出力が実行されると、このような形で格納されます。

5-2. Glue テーブルの作成
AWS Glue にはメタデータを一元管理する Glue データカタログという機能があります。S3 に格納されている実データに対するメタデータとして、Glue テーブル (テーブルのメタデータ) を作成します。
Glue テーブルは手動で作成することも可能ですが、今回は Glue のクローラー機能を使ってテーブルを作成します。
マネジメントコンソールで「AWS Glue」の管理画面を開きます。
メニューの「Crawlers」を選択します。

「Create crawler」
「Create crawler」をクリックします。

Name を入力
Name に「sitewise-crawler」と入力し、「Next」をクリックします。

「Add a data source」をクリック
「Add a data source」をクリックします。

データソースを追加
S3 path に SiteWise のコールドストレージバケットを指定します。「Add an S3 data source」をクリックします。

「Next」
「Next」をクリックします。

IAM ロール作成
クローラーの IAM ロールを作成します。「Create new IAM role」をクリックし IAM ロールを作成します。
「Next」をクリックします。

Glue データベースを作成
Glue テーブルは Glue データベースの中に作成されるため、Glue データベースを作成します。「Add database」をクリックします。

Name を入力
新しいタブが開くので、Name に「sitewise」と入力し、「Create database」をクリックします。

データベースを選択
元のテーブル画面に戻り、Target database の横にある更新ボタンをクリックし、作成したデータベースを選択します。「Next」をクリックします。

確認画面
確認画面が表示されるので画面最下部の「Create crawler」をクリックします。

クローラーを実行
クローラーが作成されましたので、「Run crawler」をクリックし実行します。


作成されたテーブルを確認
クロールが完了すると、テーブルが作成されます。テーブルはメニューの「Data Catalog tables」から確認できます。

スキーマ情報
テーブル名の「agg」をクリックすると、スキーマ情報が確認できます。
これで、Glueテーブルの作成が完了しました。

5-3. Amazon Redshift Serverless の作成
Amazon Redshift は AWS の提供するデータウェアハウスサービスです。データウェアハウスとして使用するのが主な使い方ではあるのですが、Glue データカタログに対してクエリを実行する機能があります。今回の構成では、Amazon Redshift をデータウェアハウスとしてではなく、Glue データカタログに対するクエリを実行する「クエリエンジン」としてのみ使用します。
「Redshift Serverless」を選択
Amazon Redshift Serverless を作成します。
マネジメントコンソールで「Amazon Redshift」の管理画面を開きます。
メニューの「Redshift Serverless」を選択します。

デフォルト設定を使用
「デフォルト設定を使用」を選択します。

「設定を保存」
特に設定は変更しないので、画面最下部の「設定を保存」をクリックします。
これで、Amazon Redshift Serverless が作成されました。

5-4. Amazon Bedrock ナレッジベースの作成
Bedrock ナレッジベースを作成します。
マネジメントコンソールで「Amazon Bedrock」の管理画面を開きます。
メニューの「ナレッジベース」を選択します。

構造化データストアを含むナレッジベースを選択
「作成」をクリックして表示される「構造化データストアを含むナレッジベース」を選択します。

ナレッジベースの詳細を設定
ナレッジベースの詳細を設定する画面です。この画面では設定変更は行いませんので、「次へ」をクリックします。

クエリエンジンとワークグループを設定
クエリエンジンとして「Redshift サーバーレス」を選択し、ワークグループは「default-workgroup」を選択します。

デフォルトストレージメタデータを設定
デフォルトストレージメタデータを「AWS デフォルト Glue データカタログ」に変更します。
接続する Glue カタログテーブルに「sitewise.*」と入力します。

キュレートクエリを指定
キュレートクエリに以下の内容を入力します。
キュレートクエリを指定することで、自然言語からの検索精度が向上します。

- 質問:
ManufacturingEquipment1 アセットの Temperature プロパティの最新の値を教えて
同等の SQL クエリ :
SELECT
CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', TIMESTAMP 'epoch' + raw_.timeinseconds INTERVAL '1 second') as jst_timestamp,
raw_.doublevalue,
asset_metadata.assetpropertyunit,
asset_metadata.*
FROM
awsdatacatalog."sitewise"."raw" raw_
JOIN
awsdatacatalog."sitewise"."asset_metadata" asset_metadata
ON
raw_.seriesid = asset_metadata.timeseriesid
AND raw_.seriesbucket = asset_metadata.timeseriesbucket
WHERE
assetname = 'ManufacturingEquipment1'
AND assetpropertyname = 'Temperature'
ORDER BY timeinseconds DESC
limit 1;
- 質問 :
ManufacturingEquipment1 アセットの Temperature プロパティの直近 100 件の平均値を教えて
同等の SQL クエリ :
SELECT
AVG(raw_.doublevalue) as average_temperature,
asset_metadata.assetpropertyunit,
asset_metadata.assetname,
asset_metadata.assetpropertyname
FROM
awsdatacatalog."sitewise"."raw" raw_
JOIN
awsdatacatalog."sitewise"."asset_metadata" asset_metadata
ON
raw_.seriesid = asset_metadata.timeseriesid
AND raw_.seriesbucket = asset_metadata.timeseriesbucket
WHERE
assetname = 'ManufacturingEquipment1'
AND assetpropertyname = 'Temperature'
AND raw_.timeinseconds IN (
SELECT timeinseconds
FROM awsdatacatalog."sitewise"."raw"
WHERE seriesid IN (
SELECT timeseriesid
FROM awsdatacatalog."sitewise"."asset_metadata"
WHERE assetname = 'ManufacturingEquipment1'
AND assetpropertyname = 'Temperature'
)
ORDER BY timeinseconds DESC
LIMIT 100
)
GROUP BY
asset_metadata.assetpropertyunit,
asset_metadata.assetname,
asset_metadata.assetpropertyname;
入力後、「次へ」をクリックします。
ナレッジベースを作成
確認画面が表示されるので画面最下部の「ナレッジベースを作成」をクリックします。

Bedrock ナレッジベースの作成が完了
これで Bedrock ナレッジベースの作成が完了です。

5-5. Amazon Bedrock ナレッジベースに必要なアクセス権限の付与
Bedrock ナレッジベースから Amazon S3 に格納した IoT データにアクセスするには、追加で権限を付与する必要があります。以下の 3 つの権限を付与します。
- Amazon Redshift Serverless にて、IAM ロールに該当するユーザーの作成と権限の付与
- AWS Lake Formation にて、IAM ロールに対する権限の付与
- AWS IAM にて、サービスロールに対する AWS Glue 及び Amazon S3 へのアクセス権限を付与 (Amazon Redshift に対する権限は自動で付与済み)
5-5-1. Amazon Redshift Serverless での権限付与
マネジメントコンソールで「Amazon Redshift」の管理画面を開きます。
メニューの「クエリエディタ v2」を選択します。

クエリエティタの画面

SQL 文を入力
以下の SQL 文を入力します。"IAMR:" 以降の文字列は Bedrock ナレッジベースに付与されたサービスロールの名称です。入力後、「Run」をクリックします。
CREATE USER "IAMR:AmazonBedrockExecutionRoleForKnowledgeBase_64men" WITH PASSWORD DISABLE;
GRANT USAGE ON DATABASE awsdatacatalog TO "IAMR:AmazonBedrockExecutionRoleForKnowledgeBase_64men";
5-5-2. AWS Lake Formation での権限付与
AWS Lake Formation は Amazon S3 や Glue データカタログに対する権限管理を行うサービスです。AWS のリソースの権限管理には通常 IAM を利用しますが、AWS Lake Formation を使うと、ファイル単位の権限管理ではなく、データベースの列や行ごとに権限管理を行うことができます。
AWS Lake Formation を経由するアクセスはデフォルトで「拒否」の扱いとなるため、Bedrock ナレッジベースからクエリ実行ができるように、権限を追加します。
AWS Lake Formation の管理画面を開く
マネジメントコンソールで「AWS Lake Formation」の管理画面を開きます。
メニューの「Data permissions」を選択します。

「Grant」
「Grant」をクリックします。

サービスロールを指定
IAM users and roles は Bedrock ナレッジベースに付与されているサービスロールを指定します。

Table permissions を設定
以下にチェックを入れます。
- Table permissions : Select、Describe
- Grantable permissions : Select、Describe
「Grant」をクリックします。

5-5-3. サービスロールへの権限付与
サービスロールに IAM 権限を付与します。
マネジメントコンソールの「Bedrock」の管理画面を開き、作成した Bedrock ナレッジベースを選択します。
サービスロールの名称をクリックします。

インラインポリシーを作成
「許可を追加」をクリックし、「インラインポリシーを作成」を選択します。

アクセス許可を指定
「JSON」をクリックし、画面表示を JSON に切り替えます。

ポリシーエディタ
JSON 部分に以下の内容を入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"glue:GetDatabases",
"glue:GetDatabase",
"glue:GetTables",
"glue:GetTable",
"glue:GetPartitions",
"glue:GetPartition",
"glue:SearchTables"
],
"Resource": [
""
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
""
]
}
]
}
「次へ」
「次へ」をクリックします。

ポリシー名を入力
ポリシー名に「s3_glue_policy」と入力し、「ポリシーの作成」をクリックします。

5-6. Amazon Bedrock ナレッジベースで検索実行
設定が一通り完了したので、ナレッジ検索を実行してみましょう。
検索の前に、データの同期を行います。
Query engine セクションにある「同期」をクリックします。

モデルを選択
Status が「COMPLETE」に変わったら同期が完了です。
右側のチャット欄でナレッジ検索を行いましょう。「モデルを選択」をクリックします。

Amazon Nova Pro を選択
回答生成に使用するモデルを選びます。「Amazon Nova Pro」を選択し、「適用」をクリックします。

質問を入力
以下の質問を入力します。

チャット入力 :
ManufacturingEquipment1 アセットの Pressure プロパティの直近 100 件の最大値を教えて
回答 :
ManufacturingEquipment1 アセットの Pressure プロパティの直近 100 件の最大値は 102.99625506089558 です。[1]
傾向分析を依頼
うまくデータを取得することができました ! 取得した値に対して、簡単な傾向分析を依頼してみましょう。

チャット入力 :
ManufacturingEquipment1 アセットの Vibration プロパティの直近 100 件を取得して。 その後、値の変動の傾向を日本語で教えて下さい。
6. お片付け
検証が終わったら、構築した環境を削除しましょう。
- Amazon Bedrock : Amazon Bedrock 管理画面の「ナレッジベース」を選択し、作成したナレッジベースを削除します。
- Amazon Redshift : Amazon Redshift 管理画面の「ワークグループの設定」を選択し、ワークグループを削除します。
- AWS Lake Formation : 利用料はかからないので削除不要です。削除したい場合は、AWS Lake Formation 管理画面の「Data permissions」を選択し、作成した権限を削除します。
- AWS Glue : AWS Glue 管理画面の「Databases」を選択し、データベースを削除します。
- Amazon S3 : Amazon S3 管理画面の「汎用バケット」を選択し、コールドストレージの出力先バケットを削除します。
- Amazon Managed Grafana : Amazon Managed Grafana 管理画面の「すべてのワークスペース」を選択し、ワークスペースを削除します。
- AWS IoT SiteWise : AWS IoT SiteWise の管理画面にて、以下のリソースを削除します。
◦ Edge ゲートウェイ
◦ モデル
◦ アセット
◦ データストリーム
7. まとめ
本記事では、AWS IoT SiteWise を中心とした工場 IoT の実装から、生成 A Iを活用したデータ分析までの一連の流れを解説しました。
「データはあるが活用できていない」という製造現場の課題に対して、AWS のサービスを組み合わせることで、比較的シンプルに解決策を構築できることがお分かりいただけたと思います。
特に注目していただきたいのは、最後の Bedrock ナレッジベースを使った"解かる化"の部分です。従来の IoT システムでは "見える化" までが一般的でしたが、生成 AI の力を借りることで、チャットで質問するだけでデータを分析し意味を理解できる "解かる化" を実現できます。「Vibration の値は徐々に増加する傾向にある」といった洞察を、SQL やデータ分析の専門知識がなくても、自然な会話から得られるようになったのは大きな進歩です。
製造現場のデータ活用において、"見える" だけでなく "解かる" ようになることで、より多くの現場担当者がデータ分析の恩恵を受けられるようになります。データの民主化が進み、より迅速な意思決定や問題解決につながるでしょう。
ぜひ、本記事を参考に、皆さんの製造現場でも "見える化" の先にある "解かる化" の取り組みを進めていただければ幸いです。
筆者プロフィール
森田和明
富士ソフト株式会社
エリア事業本部 西日本支社 第2システム部 第5技術グループ
業務系 Web システム開発やモバイルアプリ開発の経験を経て、2015 年頃から AWS 案件に従事。
サーバーレスのメリットを活かした様々な IoT 案件に携わった後、現在は生成 AI にも活動の幅を広げ、お客様を広くご支援しています。
AWS Ambassador (2023 ~)、Japan AWS Top Engineer (2020 ~)、Japan AWS All Certifications Engineer (2024) 認定
著書「Amazon Bedrock 生成AIアプリ開発入門」(SBクリエイティブ刊)
