見える化の先は"解かる化" ?
チャットするだけで理解できる IoT プラットフォームの作り方 (後編)
Author : 森田 和明 (富士ソフト株式会社)
目次
1. AWS のアーキテクチャ
2. AWS IoT SiteWise Edge をインストールしてみよう
2-1. Raspberry Pi を準備
2-2. SiteWise Edge を作成
2-3. SiteWise Edge をインストール
3-1. OPC-UA シミュレーターを Amazon Q Developer で作成
3-2. OPC-UA シミュレーターを起動
3-3. SiteWise Edge のデータ収集設定
3-4. アセットモデルとアセットを作成
4. Amazon Managed Grafana で可視化してみよう
4-1. Amazon Managed Grafanaを構築
4-2. Amazon Managed Grafana へサインインするユーザーを追加
4-3. プラグイン管理機能の有効化
4-4. Amazon Managed Grafana の設定
4-5. グラフを作成
5-1. AWS IoT SiteWise のコールドストレージの設定
5-2. Glue テーブルの作成
5-3. Amazon Redshift Serverless の作成
5-4. Amazon Bedrock ナレッジベースの作成
5-5. Amazon Bedrock ナレッジベースに必要なアクセス権限の付与
5-5-1. Amazon Redshift Serverless での権限付与
5-5-2. AWS Lake Formation での権限付与
5-5-3. サービスロールへの権限付与
5-6. Amazon Bedrockナレッジベースで検索実行
6. お片付け
7. まとめ
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »
毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。
5. Amazon Bedrock で分析してみよう
生成 AI を使ってAWS IoT SiteWise のデータを分析してみましょう。
AWS アーキテクチャはこのようになります。色々なサービスが登場し、手順もかなり多いのですが、一つ一つのサービスに対して実施する内容はそれほど難しくありません。

5-1. AWS IoT SiteWise のコールドストレージの設定
AWS IoT SiteWise のデータをコールドストレージに出力する設定を行います。
マネジメントコンソールで「AWS IoT SiteWise」の管理画面を開きます。
メニューの「ストレージ」を選択します。
「編集」をクリックします。
これでコールドストレージの設定が有効化されました。コールドストレージへの出力は 6 時間ごとに実行されるため、すぐにはデータが格納されません。出力が実行されると、このような形で格納されます。
5-2. Glue テーブルの作成
AWS Glue にはメタデータを一元管理する Glue データカタログという機能があります。S3 に格納されている実データに対するメタデータとして、Glue テーブル (テーブルのメタデータ) を作成します。
Glue テーブルは手動で作成することも可能ですが、今回は Glue のクローラー機能を使ってテーブルを作成します。
クローラーが作成されましたので、「Run crawler」をクリックし実行します。
これで、Glueテーブルの作成が完了しました。
5-3. Amazon Redshift Serverless の作成
Amazon Redshift は AWS の提供するデータウェアハウスサービスです。データウェアハウスとして使用するのが主な使い方ではあるのですが、Glue データカタログに対してクエリを実行する機能があります。今回の構成では、Amazon Redshift をデータウェアハウスとしてではなく、Glue データカタログに対するクエリを実行する「クエリエンジン」としてのみ使用します。
Amazon Redshift Serverless を作成します。
マネジメントコンソールで「Amazon Redshift」の管理画面を開きます。
メニューの「Redshift Serverless」を選択します。
これで、Amazon Redshift Serverless が作成されました。
5-4. Amazon Bedrock ナレッジベースの作成
Bedrock ナレッジベースを作成します。
キュレートクエリに以下の内容を入力します。
キュレートクエリを指定することで、自然言語からの検索精度が向上します。
- 質問: 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;
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 での権限付与
以下の 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 ナレッジベースからクエリ実行ができるように、権限を追加します。
「Named Data Catalog resources」を選択します。
以下の項目を設定します。
- Catalogs : Default catalog
- Databases : sitewise
- Tables : All tables
以下にチェックを入れます。
- Table permissions : Select、Describe
- Grantable permissions : Select、Describe
「Grant」をクリックします。
5-5-3. サービスロールへの権限付与
サービスロールに IAM 権限を付与します。
マネジメントコンソールの「Bedrock」の管理画面を開き、作成した Bedrock ナレッジベースを選択します。
サービスロールの名称をクリックします。
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": [
""
]
}
]
}
5-6. Amazon Bedrock ナレッジベースで検索実行
設定が一通り完了したので、ナレッジ検索を実行してみましょう。
検索の前に、データの同期を行います。
以下の質問を入力します。
チャット入力 :
ManufacturingEquipment1 アセットの Pressure プロパティの直近 100 件の最大値を教えて
回答 :
ManufacturingEquipment1 アセットの Pressure プロパティの直近 100 件の最大値は 102.99625506089558 です。[1]
うまくデータを取得することができました ! 取得した値に対して、簡単な傾向分析を依頼してみましょう。
チャット入力 :
ManufacturingEquipment1 アセットの Vibration プロパティの直近 100 件を取得して。 その後、値の変動の傾向を日本語で教えて下さい。
回答 :
ManufacturingEquipment1 アセットの Vibration プロパティの直近 100 件のデータを取得しました。データは 2025 年 4 月 15 日 6 時 50 分から 6 時 59 分までの範囲をカバーしており、単位は mm/s です。この期間中、Vibration の値は 0.13805838776466653 mm/s から 0.5491290027961885 mm/s まで変動しています。全体的に見ると、Vibration の値は徐々に増加する傾向にあります。[1]
「徐々に増加する傾向」ということを知らせてくれました !!
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クリエイティブ刊)
AWS を無料でお試しいただけます