見える化の先は"解かる化" ? 

チャットするだけで理解できる IoT プラットフォームの作り方 (後編)

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

Author : 森田 和明 (富士ソフト株式会社)

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


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」をクリックします。

クリックすると拡大します

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

クリックすると拡大します

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

クリックすると拡大します

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

クリックすると拡大します

Next」をクリックします。

クリックすると拡大します

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

Next」をクリックします。

クリックすると拡大します

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

クリックすると拡大します

新しいタブが開くので、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 データカタログに対するクエリを実行する「クエリエンジン」としてのみ使用します。

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 ナレッジベースの作成が完了です。

クリックすると拡大します

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 文を入力します。"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」の管理画面を開きます。
メニューの「Data permissions」を選択します。

クリックすると拡大します

Grant」をクリックします。

クリックすると拡大します

IAM users and roles は 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」をクリックし、画面表示を 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」を選択し、「適用」をクリックします。

クリックすると拡大します

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

チャット入力 :

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 やデータ分析の専門知識がなくても、自然な会話から得られるようになったのは大きな進歩です。

製造現場のデータ活用において、"見える" だけでなく "解かる" ようになることで、より多くの現場担当者がデータ分析の恩恵を受けられるようになります。データの民主化が進み、より迅速な意思決定や問題解決につながるでしょう。

ぜひ、本記事を参考に、皆さんの製造現場でも "見える化" の先にある "解かる化" の取り組みを進めていただければ幸いです。


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

森田和明
富士ソフト株式会社
エリア事業本部 西日本支社 第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 を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する