メインコンテンツに移動

builders.flash

デベロッパーのためのクラウド活用方法

見える化の先は"解かる化" ? チャットするだけで理解できる IoT プラットフォームの作り方 (後編)

2025-06-03 | Author : 森田 和明 (富士ソフト株式会社)

はじめに

本記事は後編となります。前編はこちら »
 

X ポスト » | Facebook シェア » | はてブ »

ご注意

本記事で紹介する 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」の管理画面を開きます。
メニューの「ストレージ」を選択します。
編集」をクリックします。

Missing alt text value

コールド階層ストレージをアクティブ化

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

Missing alt text value

保存

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

Missing alt text value

コールドストレージの設定

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

Missing alt text value

5-2. Glue テーブルの作成

AWS Glue にはメタデータを一元管理する Glue データカタログという機能があります。S3 に格納されている実データに対するメタデータとして、Glue テーブル (テーブルのメタデータ) を作成します。

Glue テーブルは手動で作成することも可能ですが、今回は Glue のクローラー機能を使ってテーブルを作成します。

マネジメントコンソールで「AWS Glue」の管理画面を開きます。
メニューの「Crawlers」を選択します。

Missing alt text value

「Create crawler」

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

Missing alt text value

Name を入力

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

Missing alt text value

「Add a data source」をクリック

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

Missing alt text value

データソースを追加

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

Missing alt text value

IAM ロール作成

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

Next」をクリックします。

Missing alt text value

Glue データベースを作成

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

Missing alt text value

Name を入力

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

Missing alt text value

データベースを選択

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

Missing alt text value

確認画面

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

Missing alt text value

クローラーを実行

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

Missing alt text value
Missing alt text value

作成されたテーブルを確認

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

Missing alt text value

スキーマ情報

テーブル名の「agg」をクリックすると、スキーマ情報が確認できます。

 

これで、Glueテーブルの作成が完了しました。

Missing alt text value

5-3. Amazon Redshift Serverless の作成

Amazon Redshift は AWS の提供するデータウェアハウスサービスです。データウェアハウスとして使用するのが主な使い方ではあるのですが、Glue データカタログに対してクエリを実行する機能があります。今回の構成では、Amazon Redshift をデータウェアハウスとしてではなく、Glue データカタログに対するクエリを実行する「クエリエンジン」としてのみ使用します。

「Redshift Serverless」を選択

Amazon Redshift Serverless を作成します。
マネジメントコンソールで「Amazon Redshift」の管理画面を開きます。

メニューの「Redshift Serverless」を選択します。 

Missing alt text value

デフォルト設定を使用

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

Missing alt text value

「設定を保存」

特に設定は変更しないので、画面最下部の「設定を保存」をクリックします。

 

これで、Amazon Redshift Serverless が作成されました。

Missing alt text value

5-4. Amazon Bedrock ナレッジベースの作成

Bedrock ナレッジベースを作成します。


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

Missing alt text value

構造化データストアを含むナレッジベースを選択

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

Missing alt text value

ナレッジベースの詳細を設定

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

Missing alt text value

クエリエンジンとワークグループを設定

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

Missing alt text value

デフォルトストレージメタデータを設定

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

Missing alt text value

キュレートクエリを指定

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

Missing alt text value

- 質問:

sql
ManufacturingEquipment1 アセットの Temperature プロパティの最新の値を教えて

同等の SQL クエリ :

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;

- 質問 :

sql
ManufacturingEquipment1 アセットの Temperature プロパティの直近 100 件の平均値を教えて

同等の SQL クエリ :

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;
         

入力後、「次へ」をクリックします。

ナレッジベースを作成

確認画面が表示されるので画面最下部の「ナレッジベースを作成」をクリックします。

Missing alt text value

Bedrock ナレッジベースの作成が完了

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

Missing alt text value

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」を選択します。

Missing alt text value

クエリエティタの画面

Missing alt text value

SQL 文を入力

以下の SQL 文を入力します。"IAMR:" 以降の文字列は Bedrock ナレッジベースに付与されたサービスロールの名称です。入力後、「Run」をクリックします。

sql
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」を選択します。

Missing alt text value

「Grant」

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

Missing alt text value

サービスロールを指定

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

Missing alt text value

LF-Tags or catalog resources を設定

Named Data Catalog resources」を選択します。以下の項目を設定します。

  • Catalogs : Default catalog
  • Databases : sitewise
  • Tables : All tables
Missing alt text value

Table permissions を設定

以下にチェックを入れます。

  • Table permissions : Select、Describe
  • Grantable permissions : Select、Describe

Grant」をクリックします。

Missing alt text value

5-5-3. サービスロールへの権限付与

サービスロールに IAM 権限を付与します。


マネジメントコンソールの「Bedrock」の管理画面を開き、作成した Bedrock ナレッジベースを選択します。

サービスロールの名称をクリックします。

Missing alt text value

インラインポリシーを作成

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

Missing alt text value

アクセス許可を指定

JSON」をクリックし、画面表示を JSON に切り替えます。

Missing alt text value

ポリシーエディタ

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": [
                    ""
                ]
            }
        ]
    }
     

「次へ」

次へ」をクリックします。

Missing alt text value

ポリシー名を入力

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

Missing alt text value

5-6. Amazon Bedrock ナレッジベースで検索実行

設定が一通り完了したので、ナレッジ検索を実行してみましょう。
検索の前に、データの同期を行います。

Query engine セクションにある「同期」をクリックします。

Missing alt text value

モデルを選択

Status が「COMPLETE」に変わったら同期が完了です。

右側のチャット欄でナレッジ検索を行いましょう。「モデルを選択」をクリックします。

Missing alt text value

Amazon Nova Pro を選択

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

Missing alt text value

質問を入力

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

Missing alt text value

チャット入力 :

json
ManufacturingEquipment1 アセットの Pressure プロパティの直近 100 件の最大値を教えて

回答 :

json
ManufacturingEquipment1 アセットの Pressure プロパティの直近 100 件の最大値は 102.99625506089558 です。[1]

傾向分析を依頼

うまくデータを取得することができました ! 取得した値に対して、簡単な傾向分析を依頼してみましょう。

Missing alt text value

チャット入力 :

json
ManufacturingEquipment1 アセットの Vibration プロパティの直近 100 件を取得して。 その後、値の変動の傾向を日本語で教えて下さい。

回答 :

json
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クリエイティブ刊)

Missing alt text value