Amazon Web Services ブログ

AWS IoT Greengrass を使用してエッジでリモート ジョブ監視アプリケーションを開発する (パート 1)

このブログは、Julia HuMartin LehoferJoyson Neville LewisTanya Lobo ParmarRajeev Pulleti によって書かれた Developing a Remote Job Monitoring Application at the edge using AWS IoT Greengrass (part 1) を翻訳したものです。

イントロダクションhttps://aws.amazon.com/jp/blogs/iot/developing-a-remote-job-monitoring-application-at-the-edge-using-aws-iot-greengrass-part-1/)

現代の多くの産業オペレーションでは、効率と安全性の理由から、広範な監視とリアルタイムの意思決定が必要です。予期しないネットワークの中断と IoT データ処理の遅延を減らすために、エッジコンピューティングは、リアルタイムの IoT データ処理と監視のための望ましいオプションになります。エッジコンピューティングは、ローカルでデータを効率的に処理するためにネットワークのエッジに設置されるマイクロコンピューティング/ストレージ デバイスのシステムです。リモート発電所、石油リグ、工場フロアなどの産業用サイトでは、ユーザーインターフェイス (UI) コンポーネントを備えたエッジアプリケーションは、現地での操作を自動化し、従業員のエクスペリエンスを向上させる大きな利点を提供します。

ただし、エッジの従来の IoT アプリケーションでは、一元化されたライフサイクル管理の欠如や長い開発サイクルなど、いくつかの課題が発生する可能性があります。AWS の最新のオープンソースエッジランタイムである AWS IoT Greengrass V2 は、上記の課題に対処するための道筋を提供します。AWS IoT Greengrass を使用すると、事前に構築されたソフトウェアコンポーネントにアクセスして、アプリケーションのモジュール性を向上させ、開発作業を加速できます。AWS IoT Greengrass は、エッジコンポーネントのデプロイを容易にするために、組み込みのログマネージャーを通じて一元化されたセキュリティ対策も提供します。さらに、AWS IoT Greengrass と AWS IoT Device Management の統合により、デバイスフリートを大規模に監視および管理できます。

AWS IoT Greengrass V2 が提供開始されて以来、AWS は AWS パートナーである TensorIoT がこのサービスを使用してエッジでさまざまな機能アプリケーションを開発するのを積極的に支援しています。このようなアプリケーションは、産業用システムや IoT デバイスへの接続、運用上のインサイトを引き出すための低レイテンシのデータ処理と分析、エッジでの人工知能 (AI)/機械学習 (ML) アプリケーションなどのユースケースをカバーしています。このブログでは、TensorIoTAWS プロフェッショナルサービスが共同開発したソリューションである AWS IoT Greengrass V2 を使用したエッジでの UI アプリケーションを紹介します。このエッジの UI アプリケーションには、複数のカスタム AWS IoT Greengrass コンポーネントが含まれており、エッジでの柔軟なデータ取り込み、および IoT データ分析と視覚化を実現します。複数のエッジデバイスでのアプリケーションのデプロイと更新は、AWS IoT Greengrass ランタイムを介して効率的に実装できます。

このブログでは、この UI をエッジで使用して、次のリモート産業ジョブ監視のユースケースに対処する方法を紹介します。

ユースケース 1 (ブログのパート 1)

工場現場のオペレーターは、事前定義された IoT データモデルを介してクラウドに取り込むことができないレポートまたは IoT ジョブメタデータを持っている可能性があります。この UI は、フロントエンド AWS IoT Greengrass V2 コンポーネントを使用して JSON ファイルを取り込み、ファイルデータをバックエンドコンポーネントに送信するファイルアップロードページを提供します。次に、バックエンドコンポーネントはデータを AWS IoT Greengrass V2 の事前構築済みコンポーネントであるストリームマネージャーに送信します。ストリームマネージャーコンポーネントは、大量の IoT データをエッジからクラウドに転送することをより簡単かつ確実にします。事前構築されたコンポーネントとして、Amazon Simple Storage Service (Amazon S3)Amazon KinesisAWS IoT SiteWiseAWS IoT Analytics など、クラウドで柔軟なターゲットの宛先を提供します。接続が断続的または制限された環境で動作するように設計されています。エッジデバイスの接続時または切断時に、複数のデータエクスポート構成を定義できます。また、インターネット接続が再開したときに重要なデータを最初にエクスポートできるように、帯域幅の使用、タイムアウト動作を定義し、優先順位を設定することもできます。

このストリームマネージャーコンポーネントは、次の 2 つの目標を達成します:

  • ローカルデータストレージ
  • ローカルエッジデバイスから AWS へのデータ送信

このユースケースでは、マッピングされていないデータが Amazon S3 に送られます。さまざまなデータ分析ツール (Amazon Glue および Amazon Athena) /BI ツールを使用して、このメタデータを他の IoT 時系列データと柔軟に分析できます。

ユースケース 2(ブログのパート 2)

オペレーターは、ストリーミング IoT データをほぼリアルタイムで判断する必要があります。データをインタラクティブな UI アプリケーションで低レイテンシーで表示できれば、オペレーターが正しい決定を下すのに役立ちます。このブログのパート 2 では、ストリーミング IoT ジョブデータを表示する UI アプリケーションをエッジで構築する方法を学習します。

以下の画像は、AWS プロフェッショナルサービスと TensorIoT によって開発された UI アプリケーションを表しています。このアプリを使用して、IoT ジョブの状態をほぼリアルタイムでリモートで監視できます。

図 1: ニアリアルタイムでリモート IoT ジョブを監視するために AWS プロフェッショナルサービスと TensorIoT によって開発されたエッジの UI アプリケーション

次の手順には、AWS IoT Greengrass V2 を使用してエッジでこの UI アプリケーションを開発するための詳細な手順が含まれています。このブログで共有されている手順に基づいて UI ソリューションを構築するために、専門的なデータ分析や IoT データ処理の経験は必要ありません。

記事を読むのにかかる時間 30 分
完了までの時間 120 分

完了までの費用

(概算)

~$2 (記事公開時点で)
学習レベル Advanced (300)
使用サービス

Amazon EC2 instance, AWS IoT Greengrass V2,

Amazon S3, Amazon CloudWatch

ソリューション概要

エッジでのこのワークフローのソリューションアーキテクチャを次に示します。この 2 部構成のブログでは、次の 4 つのユーザー定義コンポーネントが構築されます:

  • ReactJS で記述されたフロントエンド AWS IoT Greengrass UI コンポーネント。これには、両方のユースケースで使用されるすべての UI ページが含まれています (ブログのパート 1)。
  • Python で記述された JSON ファイルアップロードコンポーネント。フロントエンド UI からファイルデータを収集し、JSON 情報をストリームマネージャー経由で Amazon S3 に送信します (ブログのパート 1)。
  • ダミーのパブリッシャーは、風力タービンデータを 10 秒ごとに 1 メッセージの頻度でパブリッシュし、IPC プロトコルを介して WebSocket コンポーネントにメッセージを送信します (ブログのパート 2)。
  • WebSocket コンポーネントは、WebSocket サーバーを介してダミーのパブリッシャーコンポーネントから UI コンポーネントに IoT メッセージを提供します (パート 2 ブログ)。

これらのカスタムコンポーネントに加えて、このソリューションでデプロイされた 2 つのビルド済み AWS IoT Greengrass V2 コンポーネントがあります。

  • アプリケーション監視用のログマネージャ
  • エッジデバイスデータエクスポート用のストリームマネージャー

このブログでは、AWS IoT Greengrass v2 ランタイムを備えた Ubuntu 22.04 LTS EC2 インスタンスを使用して、AWS IoT でエッジデバイスをシミュレートします。

図 2: エッジでの UI アプリケーションの全体図

前提条件

このチュートリアルでは、次の前提条件が必要です。

  • AWS アカウント。 AWS アカウントをお持ちでない場合は、イベントエンジンの詳細が提供されていない限り、指示に従って作成してください。
  • 管理者アクセス権を持つユーザーロール (このロールに関連付けられたサービスアクセスは、ワークフローが本番環境に移行するときにさらに制限される可能性があります)。
  • 最新のモダンなブラウザ (Firefox または Chrome の最新バージョン)
  • このソリューションを構築するために特別な知識は必要ありませんが、基本的な Linux と Python の知識が役に立ちます。

ウォークスルー

この 2 部構成の投稿には、次のウォークスルー手順が含まれており、このソリューションを開発するための詳細な手順が提供されます:
ランタイムのセットアップと JSON ファイルアップロードアプリケーションの構築に関するパート 1 (この投稿):

  • ステップ 1: Amazon S3 バケットをセットアップする
  • ステップ 2: AWS IoT Greengrass V2 と依存関係をセットアップする
  • ステップ 3: UI コンポーネントを起動する
  • ステップ 4: ファイルアップロードアプリケーションを起動する
  • ステップ 5: ファイルアップロードアプリケーションをテストする

IoT ジョブ監視アプリケーションを構築するためのパート 2:

  • ステップ 1: ダミーのパブリッシャーを起動する
  • ステップ 2: WebSocket コンポーネントを起動する
  • ステップ 3: ログマネージャーのデプロイを構成する
  • ステップ 4: IoT ジョブ監視 UI ページのテスト

この投稿では、簡潔にするために主要なソリューションのマイルストーンを取り上げていますが、読者は GitHub リポジトリにアクセスして、完全なウォークスルーとソースコードを確認できます。

ステップ 1: Amazon S3 バケットをセットアップする

まず、AWS マネジメントコンソールを使用して Amazon S3 にバケットを作成します。これらの手順を使用して Amazon S3 バケットを作成し、バケット名をメモしてください。このウォークスルーのステップ 4 で、この Amazon S3 パラメータを JSON ファイルアップロードコンポーネントに提供する必要があります。

次に、同様の手順を使用して、エッジコンポーネントのアーティファクトを保存するための Amazon S3 バケットを作成できます。コンポーネントのデプロイ手順で使用できるように、この Amazon S3 バケットを書き留めておいてください。

ステップ 2: Amazon Elastic Cloud Compute (Amazon EC2) インスタンスで AWS IoT Greengrass V2 をセットアップする

1. Amazon EC2 インスタンスに依存関係をインストールする

次のユーザーデータにより、AWS アカウント内の ubuntu 22.04 をベースイメージとして、インスタンスタイプが t2.medium の Amazon EC2 をセットアップします。

sudo su
apt-get update
apt-get install -y python3-pip zip jq
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
python3 -m pip install ./aws-iot-device-sdk-python-v2

Amazon EC2 インスタンスのステータスが実行中に変わったら、これらの手順を使用して、SSH なしでこの Amazon EC2 インスタンスにアクセスするための AWS セッションマネージャーのアクセスロールをセットアップします。次に、このブログの Connect with the Amazon EC2 instance via AWS Systems Manager Session Manager (SSM) セクションを使用して、SSM 経由で Amazon EC2 インスタンスにアクセスします。最後に、AWS Command Line Interface (CLI) V2 を Amazon EC2 インスタンスにインストールします。

wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
unzip awscli-exe-linux-x86_64.zip
sudo ./aws/install

2. Amazon EC2 インスタンス に AWS IoT Greengrass をインストールします

このブログの「Install Greengrass on Amazon EC2 instance」セクションを使用して、AWS IoT Greengrass をエッジデバイスにインストールできます。

次のカスタムコンポーネントを起動する前に、必要な Amazon S3 アクセスポリシー (PutObject や GetObject など) を AWS IoT Greengrass ロールエイリアスに追加して、この IoT デバイスがこれらの手順に従って Amazon S3 にアクセスできるようにしてください。

ステップ 3: UI コンポーネントを起動する

コンポーネントは、ローカルデータ処理、メッセージング、データ管理、機械学習推論などの複雑なワークフローを簡単に作成できるビルディングブロックです。AWS IoT Greengrass V2 の最新の IoT Thing Group 定義を使用すると、UI デザイナーによって行われたすべての更新を、AWS IoT Thing group でのコンポーネントのデプロイを修正することにより、すべての宛先ターゲットに対して効率的に配布できます。

次の手順は、あらかじめパッケージ化された ReactJS UI コードをエッジコンポーネントとして AWS Greengrass V2 にデプロイする方法を示しています。
1. ディレクトリを、GIT リポジトリが Amazon EC2 インスタンスにクローンされたディレクトリ内の components/edgeui/aws-gg-deploy に変更します。

2. デプロイスクリプト deploy-edge.sh に対して、_setEnv() セクションで次のプレースホルダーをカスタマイズした値に置き換える変更をします。:

YOUR_AWS_ACCOUNT_NUMBER
YOUR_AWS_REGION
ROLE_ARN
S3_BUCKET for edge component artifacts

Ctrl-X を押してから Y を押して、変更した deploy-edge.sh ファイルを同じ名前で保存します。

3. 次のスクリプトを実行して、このコンポーネントをデプロイします。:

export AWS_ACCESS_KEY_ID=REPLACE-WITH-YOUR-AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY= REPLACE-WITH-YOUR-AWS_SECRET_ACCESS_KEY
export AWS_SESSION_TOKEN= REPLACE-WITH-YOUR-AWS_SESSION_TOKEN
chmod 744 deploy-edge.sh
 ./deploy-edge.sh

この bash スクリプトが完了するまでに約 90 秒かかります。存在したら、AWS IoT Greengrass V2 コンソールで次のコンポーネントが作成されていること、およびその最新のステータスが Runningとして表示されていることを確認してください。:

図 3: AWS IoT Greengrass コンソールに表示される UI コンポーネントのステータス

この UI コンポーネントには、この 2 部構成のブログの両方のユースケースで使用されるすべての UI ページが含まれていることに注意してください。

ステップ 4: JSON ファイル アップロードアプリケーションを起動する

次に、JSON ファイルアップロードコンポーネントを起動できます。このコンポーネントは、Flask アプリケーションを使用して、フロント UI コンポーネントから JSON ファイルデータを受け取ります。JSON ファイルを受信すると、ストリームマネージャーコンポーネントを使用して JSON ファイルを Amazon S3 に送信します。ストリームマネージャーコンポーネントは、次のようにレシピファイル内のコンポーネントの依存関係として定義することにより、ファイルアップロードコンポーネントと共に起動されます:

ComponentDependencies:
  aws.greengrass.StreamManager:
    VersionRequirement: '^2.0.0'
  aws.greengrass.TokenExchangeService:
    VersionRequirement: '^2.0.0'
    DependencyType: HARD

JSON ファイルアップロードコンポーネントを起動するには、ステップ 3 と同じステップを使用して、components/com.fileUploader/aws-gg-deploy フォルダにあるデプロイスクリプト deploy-edge.sh を変更します。

次に、Manifests セクションの Run コマンドのステップ 1 で設定した S3 バケット名の引数を次のように追加して、同じディレクトリにある recipe-file-template.yaml ファイルを変更します。:

Run: Script: python3 -u {artifacts:decompressedPath}/$artifacts_zip_file_name/$artifacts_entry_file -b="Replace with your Amazon S3 bucket name"

デフォルトの Amazon S3 バケット名を、ステップ 1 で作成した独自の Amazon S3 バケットに置き換えてください。このレシピテンプレートファイルを Ctrl-X で保存し、次に Y を押して、変更されたレシピファイルを同じ名前で保存します。

最後に、ステップ 3 と同じコマンドを実行して、deploy-edge.sh を実行します。

この bash スクリプトが完了するまでに約 30 秒かかります。存在したら、AWS IoT Greengrass V2 コンソールで次のコンポーネントが作成されていること、およびその最新のステータスが Running として表示されていることを確認してください:

図 4: AWS IoT Greengrass コンソールに表示される JSON ファイルアップロードコンポーネントのステータス。

ステップ 5: JSON ファイルアップロードアプリケーションをテストする

ラップトップで Web ブラウザーを開き、次のアドレスで UI にログインします:

http://localhost:8080/fileUpload

次のファイルアップロード UI ページが表示されます。

図 5: JSON ファイルのアップロード UI ページ。

UI の中央のボックスから Upload run configuration file を選択し、選択した JSON ファイルをアップロードします。Github リポジトリ (フォルダー: jsonfile_sample) には、テスト目的でアップロードするための 1 つのサンプル JSON ファイルが用意されており、風力タービン検査ジョブのサンプルメタデータが含まれています。ファイルを選択したら、Start inspection を選択して、ファイルデータを com.fileUploader コンポーネントに送信します。ファイルデータは、Amazon S3 バケットの ggstreamdata フォルダ配下に以下のようにアップロードされます。

図 6: Filer Uploader アプリケーションを使用して S3 にアップロードされた JSON ファイル。

パート 1 のまとめ

このブログでは、AWS プロフェッショナルサービスと AWS パートナーである TensorIoT が共同で開発した、リモートの産業ジョブの監視と処理のためにエッジで UI アプリケーションを紹介しています。この 2 部構成のシリーズのパート 1 では、最新の AWS IoT Greengrass V2 ランタイムを使用して、マッピングされていない IoT メタデータを取り込むためのファイルアップロードアプリケーションを開発する方法を学びました。AWS IoT Greengrass V2 ランタイムとビルド済みコンポーネントを使用すると、エッジでの IoT アプリケーションの開発作業を加速できます。このアプリケーションで開発されたモジュール化されたコンポーネントは、複数の IoT デバイスに簡単に展開および更新できます。

パート 2 では、リアルタイムの IoT データを処理するためのカスタム Greengrass コンポーネントを使用してリモート IoT ジョブを監視するために、エッジで 2 つ目の IoT アプリケーションを開発する方法を学習します。次に、事前構築済みの Greengrass コンポーネントであるログマネージャーを使用して、Greengrass コンポーネントの正常性を監視する方法を学習します。最後に、IoT アプリケーションの機能をエッジでテストできます。

次のステップへ

このブログ投稿シリーズのパート 2 にアクセスして、ソリューション全体を完成させてください。

著者について

Julia Hu は、アマゾンウェブサービスのシニア AI/ML ソリューションアーキテクトです。彼女は IoT アーキテクチャと応用データサイエンスの分野で豊富な経験を持ち、機械学習と IoT 技術分野コミュニティの両方に参加しています。彼女は、新興企業から大企業まで、さまざまな顧客と協力して、エッジとクラウドで AWSome IoT 機械学習 (ML) ソリューションを開発しています。彼女は、最新の IoT およびビッグデータテクノロジを活用して、ML ソリューションをスケールアップし、待ち時間を短縮し、業界での採用を加速することを楽しんでいます。
Martin Lehofer は、Amazon Web Services の産業データのプラクティスマネージャーです。Martinは、幅広い業種とアプリケーションで、予知保全、データ分析、分散コンピューティングから人工知能まで幅広いインダストリアル IoT の経験を持っています。AWS プロフェッショナルサービスで、Martin はアーキテクトとエンジニアのチームを率いて、戦略的な産業顧客がデータ分析を使用してビジネス成果を達成できるように支援しています。
Joyson Neville Lewis は、AWS プロフェッショナルサービスの IoT データアーキテクトです。彼はソフトウェア/データ エンジニアとして働いた後、会話型 AI および産業用 IoT の分野に飛び込み、企業と協力して、音声アシスタント/チャットボットおよび IoT ソリューションを使用してビジネスと AI の間の点を結びつけました。
Tanya Lobo Parmar は、TensorIoT のディレクターであり、EMEA 地域での運用を監督しています。彼女は、AWS クラウドを使用して近代化および成長するために、ヨーロッパ市場でより多くの顧客を獲得することに重点を置いています。また、IoT、機械学習、マネージド AI の挑戦的なプロジェクトの管理も楽しんでいます。
Vidya Ramaswamy は AWS パートナーである TensorIoT のシニアソフトウェアエンジニアであり、ソフトウェア開発で 8 年以上の経験があります。彼女はさまざまな IoT ソリューションのコーディングと開発を楽しんでいます。
Rajeev Pulleti は TensorIoT のフロントエンドエンジニアであり、Swift、Objective-C、Javascript に精通しています。

このブログは、ソリューションアーキテクトの戸塚智哉が翻訳しました。