Amazon Web Services ブログ

AWS IoT Greengrass によるカスタム AWS IoT SiteWise MQTT コネクタの作成とデプロイメント

この記事は Srikanth Kodali によって投稿された Creating and deploying a custom AWS IoT SiteWise MQTT connector with AWS IoT Greengrass を翻訳したものです。

効率性、稼働率、そしてコストの最小化は、産業オペレーションを成功させるための最も重要な 3 つの柱です。機器の稼働状況、機器の全体的な効率、生産ライン全体の効率を把握し、さらにこれらが複数の拠点にまたがるコストや収益にどのように影響するかを理解するには、運用データの完全な可視化が必要です。

AWS IoT SiteWise は、産業機器のデータをエッジからクラウドまで収集・整理・分析する機能を提供するマネージドサービスです。AWS SiteWise Edge は、産業用プロトコルからのデータ読み込み、クラウド上の AWS IoT SiteWise へのパブリッシュ、およびクラウドから切断された場合のデータの保存と転送を行うエッジコンポーネントです。AWS IoT SiteWise Edge はオプションのデータ処理パックを使用して、データ変換やメトリックの計算をエッジで行います。

AWS IoT Greengrass は、AWS IoT SiteWise Edge 対応デバイスの基盤層として使用されるマネージドオープンソースエッジランタイムおよびクラウドサービスです。MQTT(MQ Telemetry Transport)は、pub-sub パターンを用いて通信を行う、産業用通信に広く使用されているプロトコルです。Paho python クライアントAWS IoT MQTT クライアントなどの MQTT クライアントは、メッセージを送信したり、トピックをサブスクライブして MQTT サーバー(ブローカーとも呼ばれます)からメッセージを受信したりします。これらのサーバーは、コネクション、データの中継、および異なるクライアントからのサブスクリプションを管理します。

MQTT クライアントと AWS IoT SiteWise サービスとの間のデータフローは AWS IoT Greengrass のコネクターを使って行われます。コネクターを利用して、産業用の接続ミドルウエアとセンサーを AWS IoT SiteWise エッジと統合し、ローカルで処理したあとにクラウドにルーティングすることが可能です。

この投稿では、エッジの機器からクラウドへのデータフローと処理を可能にするために、どのように Greengrass v2 エッジランタイムサービス上で、カスタマイズされた AWS IoT SiteWise の MQTT コネクタを設定し、使用するかの概要を説明します。

ソリューションの概要

この記事のソリューションのデプロイでは、以下のステップを行います。Figure 1 はデプロイされるソリューションを図示したものです。

Figure 1

前提条件と留意事項

この記事での手順を実行するためには以下が必要です。

  • AWS サービスにアクセスするための AWS アカウント。
  • AWS IoT SiteWise のアセットモデルおよびアセットをセットアップするために使用する AWS CDK ツールキット (cdk コマンド) をローカル PC にセットアップする。セットアップ方法についての詳細はこちらをクリック。
  • 提供されるテンプレートとソースコードは US East-1 (N. Virginia) のリージョンでのみで動作する想定です。

Step1: AWSアカウントにサンプルの AWS IoT SiteWise のアセットモデルとアセットを作成する

このステップでは、AWS IoT SiteWise のアセットモデルおよびアセットをセットアップします。そのために、AWS CDK のスクリプトを使って AWS IoT SiteWise のコンソール上にアセットモデルとアセットを作成します。

このスクリプトをダウンロードしてアセットとアセットモデルをセットアップすることができます。対象のレポジトリをローカル PC/Mac にダウンロードし、以下のコマンドを実行してください。

注意:コマンドを実行する前に、ご自身の Python 環境に aws_cdk がインストールされていることを確認してください。aws_cdk がインストールされていない場合には、「No module named ‘aws_cdk’」というエラーが表示されます。

git clone git@github.com:aws-samples/sitewise-mqtt-custom-connector.git
cd <Downloaded location>
cd sitewise-mqtt-custom-connector/sitewise-assets-creation/
cdk bootstrap aws://<YOUR_AWS_ACCOUNT_NUMBER>/<AWS_REGION> --profile <AWS_CLI_PROFILE_NAME>
cdk deploy sitewise-assets-creation --profile <AWS_CLI_PROFILE_NAME>

上記の CDK スクリプトの実行が終了すると、1) generator-model, 2) hvac-model の 2 つの AWS IoT SiteWise のアセットモデルが作成されます。AWS IoT SiteWise のコンソールにログインしてこれらのモデルを確認することができます。

このスクリプトは各モデルについて 100 のアセットを作成します。これらのアセットについても AWS IoT SiteWise のコンソールにログインしてアセットのセクションで確認することができます。

Step2: AWS IoT SiteWise ゲートウェイのセットアップ

AWS IoT SiteWise ゲートウェイは Paho Python クライアントのなどのクライアントと AWS IoT SiteWise の間の仲介者として動作します。AWS IoT SiteWise ゲートウェイは AWS IoT Greengrass V2 上で動作し、データの収集とオンプレミスでの処理をサポートします。ゲートウェイのソフトウエアをインストールするためには、この AWS ドキュメント上に示されているデバイス要件を満たすことが必要です。AWS IoT SiteWise ゲートウェイの作成と設定は2つのステップで可能です。はじめのステップは AWS IoT SiteWise のコンソール上でゲートウェイの設定を行い、2つ目のステップで実際のゲートウェイデバイス上でインストールスクリプトを実行します。

a) ゲートウェイの作成と設定:

ゲートウェイの設定を行うために、AWS IoT SiteWise コンソールに移動します。ナビゲーションページでゲートウェイを選択し、ゲートウェイを作成ボタンをクリックします。ゲートウェイ名を入力するか、もしくは自動作成されたゲートウェイ名を選択し、Greengrass コアデバイスとしてデフォルトセットアップを選択します。コアデバイス名には自動生成されたデバイス名を選択するか、コアデバイス名を入力するかのどちらかを行います。値を入力後、次へボタンをクリックします。


エッジ機能を設定のページでゲートウェイデバイスがエッジでデータを処理できるようにデータ処理パックをチェックします。データ収集パックはデフォルトで有効になっています。Edge LDAP 設定は選択せずに次へボタンをクリックします。

パブリッシャーを設定データソースを追加のページで次へボタンをクリックします。
インストーラを確認して生成のページで、ゲートウェイデバイス OS の箇所で Ubuntu を選択します。生成ボタンをクリックし、承認ボタンをクリックします。
インストールスクリプトをローカル Mac もしくは Windows に保存するようにプロンプトが表示されるので、スクリプトファイルを適切なフォルダに保存します。次のステップでインストールスクリプトをゲートウェイデバイスにコピーする必要があります。

b) AWS IoT SiteWise ゲートウェイデバイスでのインストールスクリプトの実行:

デモンストレーションの目的で、ここでは AWS IoT SiteWise ゲートウェイデバイスとして Amazon EC2 インスタンスを使用します。AWS Web コンソール上で、Amazon EC2 のページに移動し、Amazon EC2 インスタンスを作成します。このデモでは、m5.xlarge のインスタンスタイプを選択し、OSとして Ubuntu 18.04 を選択しました。AWS IoT SiteWise ゲートウェイデバイスとして推奨されるディスクスペースは 256 GB 以上です。

  1. Python3.7 と pip がローカルマシンにインストールされていることを確認します。
    > sudo apt update && sudo apt install software-properties-common && sudo add-apt-repository ppa:deadsnakes/ppa
    > sudo apt install python3.7
    > sudo update-alternatives --install /usr/bin/python python3 /usr/bin/python3.7 1
    > sudo update-alternatives --install /usr/bin/python python3 /usr/bin/python3.6 2
    > sudo update-alternatives --config python3
    Choose the selection number that uses python 3.7.
    > sudo rm /usr/bin/python3 && sudo ln -s /usr/bin/python3.7 /usr/bin/python3
    > sudo apt-get install python3-pip

    Amazon EC2 インスタンス (デバイスゲートウェイ) に、SiteWise ゲートウェイによって生成されたインストールスクリプトをコピーします。スクリプトのコピーが完了したら、実行権限を付与し、インストーラーを実行します。

    > chmod +x path-to-installer.sh
    > sudo ./path-to-installer.sh

    依存するパッケージが足りない場合には、プロンプトが表示されるので、“yes” を選択してインストールしてください。このスクリプトは必要な依存関係をインストールし、Greengrass のソフトウェアをセットアップし、AWS IoT SiteWise ゲートウェイを設定します。

インストーラーの実行が正しく終了した場合、AWS IoT コンソールにログインし、コアデバイスに移動します。Greengrass コアデバイスが正常な状態にあることが確認できます。

Step3: エッジ向けのアセットモデルの設定

以下のステップでエッジ向けのアセットモデルの設定を行います。Step1 での手順で、a) generator-model, b) hvac-model の 2 つのアセットモデルをすでに作成済みです。

  • AWS IoT SiteWise コンソールに移動します
  • ビルドセクションの中からモデルを選択します。“generator-model” と “hvac-model” があることが確認できます。これら2つのモデル双方についてアセットモデルを有効にしていきます。
  • はじめに、“generator-model” を選択し、エッジの設定ボタンをクリックします。
  • このアセットモデルのエッジ設定を選択しますの箇所でエッジ設定なしのオプションを選択します。今回のアセットモデルではメトリクスや変換は定義されていないので、エッジでの計算処理はありません。エッジでのメトリクスや変換処理が必要な場合には、すべてのプロパティをエッジで計算する、もしくはカスタムエッジ設定を選択します。
  • このアセットモデルではメトリクスの設定や変換の設定は行わないので「メトリクスの設定」、や「変換の設定」のセクションには何も表示されません。
  • 「測定を設定」のセクションも、今回の設定では何も表示されません。
  • 保存ボタンをクリックします。“hvac-modelについても上記のステップを繰り返します

Step4: AWS IoT Greengrass MQTT ブローカーへメッセージをパブリッシュするパブリッシャーデバイスの作成

先程のアーキテクチャー図で示したように、ここでは、外部デバイス(パブリッシャー)が AWS IoT Greengrass コアデバイスのMQTT ブローカーに MQTT メッセージを発行することを想定しています。外部デバイスはクラウドディスカバリーを使用して AWS IoT Greengrass コアを見つける必要があり、パブリッシャーの MQTT クライアントが AWS IoT Greengrass コアと通信するように設定する必要があります。

このブログ記事では、もう一つの Amazon EC2 インスタンスをパブリッシャーデバイスとして使用することにします。このドキュメントに記載されている方法に従い、2つ目の Amazon EC2 インスタンスを起動します。インスタンスタイプは t3.large、OS は Ubuntu 18.04 を選択しました。

  1. パブリッシャーデバイスを登録し、AWS IoT Greengrass と通信ができるように証明書とキーを設定します
    • AWS IoT Core コンソールにて、管理セクションからモノをクリックします。
    • モノを作成ボタンをクリックします
    • 1つのモノを作成の選択肢を選択し、次へをクリックします
    • モノのプロパティを指定のページでモノの名前を入力します。ここでは Publisher_Device_SWGateway と入力します。
      意: このデバイス名「Publisher_Device_SWGateway」は以下のステップでも使用されるので、このデモでは同じ名前を使用することを推奨します。
    • Device Shadowのセクションではシャドウがありませんの選択肢を選択し、次へをクリックします
    • デバイス証明書を設定のページでは、新しい証明書を自動生成を選択します
    • 証明書にポリシーをアタッチのページで AWS IoT ポリシーを選択します。コアデバイスにアタッチしたポリシーと同じポリシーを使用することもできますし、以下のポリシードキュメントから新しいポリシーを作成することも可能です。
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "iot:Connect",
              "iot:Publish",
              "iot:Subscribe",
              "iot:Receive",
              "greengrass:*"
            ],
            "Resource": "*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "iot:GetThingShadow",
              "iot:UpdateThingShadow",
              "iot:DeleteThingShadow"
            ],
            "Resource": [
              "arn:aws:iot:region:account-id:thing/*"
            ]
          }
        ]
      }
      

      ここでは、Greengrass コアデバイスで使用されたものと同じ IoT ポリシーを選択し、モノを作成のボタンをクリックします。

    • 証明書とキーをダウンロードのページで、デバイス証明書、パブリックキーファイル、プライベートキーファイル、Amazon ルート CA 1 証明書のダウンロードボタンをクリックし、完了ボタンをクリックします。
    • ローカルマシンにこれらのファイルをダウンロード完了した後、これらのファイルをパブリッシャーデバイス (Step 4 のはじめに作成した Amazon EC2 インスタンス) にコピーします。
      > cd <Downloaded location>
      > scp -r -p -i <pem-file-location.pem> <hash>-certificate.pem.crt ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com:/tmp/
      > scp -r -p -i <pem-file-location.pem> <hash>-private.pem.key ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com:/tmp/
      > scp -r -p -i <pem-file-location.pem> <hash>-public.pem.key ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com:/tmp/
      > scp -r -p -i <pem-file-location.pem> AmazonRootCA1.pem ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com:/tmp/
    • Amazon EC2 インスタンスにて以下のディレクトリを作成し、証明書関連のファイルをコピーします
      > mkdir -p ~/iot-certs/
      > cd /tmp
      > cp -r -p /tmp/<hash>-* ~/iot-certs/
      > cp -r -p /tmp/AmazonRootCA1.pem ~/iot-certs/
  2. クライアントデバイスサポートを有効にするクライアント/パブリッシャーデバイスを AWS IoT Greengrass コアデバイスと通信できるようにするために、クライアントデバイスはコアデバイスの IP アドレスと証明書を取得する必要があります。クライアントデバイスのサポートを有効にするために、以下のステップを実行します。
    注意: ”aws.greengrass.clientdevices.Auth” コンポーネントには以下の “マージする設定” を使用してください。

    {
       "deviceGroups":{
          "formatVersion":"2021-03-05",
          "definitions":{
             "MyDeviceGroup":{
                "selectionRule":"thingName: Publisher_Device_SWGateway*",
                "policyName":"MyClientDevicePolicy"
             }
          },
          "policies":{
             "MyClientDevicePolicy":{
                "AllowConnect":{
                   "statementDescription":"Allow client devices to connect.",
                   "operations":[
                      "mqtt:connect"
                   ],
                   "resources":[
                      "*"
                   ]
                },
                "AllowPublish":{
                   "statementDescription":"Allow client devices to publish to all topics.",
                   "operations":[
                      "mqtt:publish"
                   ],
                   "resources":[
                      "*"
                   ]
                },
                "AllowSubscribe":{
                   "statementDescription":"Allow client devices to subscribe to all topics.",
                   "operations":[
                      "mqtt:subscribe"
                   ],
                   "resources":[
                      "*"
                   ]
                }
             }
          }
       }
    }

    正しいモノの名前が入力されているかどうかを確認してください。このブログではデバイスのモノの名前として「Publisher_Device_SWGateway」を使用します。モノの名前の後ろに「*」のワイルドカードパターンが追加されていることに注意してください。

    aws.greengrass.clientdevices.mqtt.Bridge”コンポーネントには以下の“マージする設定” を使用してください。トピック名が “clients/+/mqttiot/sitewise” となっていることに注意してください。

    {
       "mqttTopicMapping":{
          "SiteWiseMQTTIotCoreMapping":{
             "topic":"clients/+/mqttiot/sitewise",
             "source":"LocalMqtt",
             "target":"IotCore"
          },
          "localGGPubsubMapping":{
             "topic":"clients/+/mqttiot/sitewise",
             "source":"LocalMqtt",
             "target":"Pubsub"
          }
       }
    }
  3. パブリッシャーデバイス上に AWS IoT SDK v2 for Python をインストールし、basicDiscovery.py のサンプル関数を取得し、Greengrass Group CA を取得します
    • Python3.7 と pip3 がインストールされていることを確認してください
      > sudo apt update && sudo apt install software-properties-common && sudo add-apt-repository ppa:deadsnakes/ppa
      > sudo apt install python3.7
      > sudo update-alternatives --install /usr/bin/python python3 /usr/bin/python3.7 1
      > sudo update-alternatives --install /usr/bin/python python3 /usr/bin/python3.6 2
      > sudo update-alternatives --config python3
      Choose the selection number that uses python 3.7.
      > sudo rm /usr/bin/python3 && sudo ln -s /usr/bin/python3.7 /usr/bin/python3
      > sudo apt-get install python3-pip
    • コンピュータの適切な場所に AWS IoT SDK v2 for Python をダウンロードします
      > Login as root(sudo) user on the Publisher EC2 instance.
      > sudo su - 
      > cd ~
      > git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
      > python3 -m pip install ./aws-iot-device-sdk-python-v2

Step5: Greengrass コアの MQTT ブローカーからデータストリームを収集し AWS IoT SiteWise Edge に送信する AWS IoT Greengrass コンポーネントの作成

産業機器センサーからのデータが MQTT クライアントを通じて AWS IoT Greengrass MQTT ブローカーに取り込まれると、カスタム AWS IoT Greengrass コンポーネントは AWS IoT Greengrass ストリームの SiteWise_Edge_Stream にデータを書き込みます。AWS IoT SiteWise エッジプロセッサは、継続的に SiteWise_Edge_Stream からデータを取り出し処理します。AWS IoT SiteWise エッジプロセッサは、設定に応じて、SiteWise_Stream という AWS IoT Greengrass ストリームにこのデータを書き込みます。AWS IoT SiteWise パブリッシャーコンポーネントは、継続的に SiteWise_Stream からデータを読み出し、クラウド上の AWS IoT SiteWise サービスにそのデータを送信します。

  1. AWS IoT Greengrass MQTT ブローカーからメッセージを取り出し、クラウド上の AWS IoT SiteWise に送信する AWS IoT Greengrass コンポーネントをセットアップします。コンポーネントのソースコードはこちら
    Git repo のコードをローカルの Mac もしくは Windows にダウンロードします。ターミナルやコマンドプロンプトから “aws” コマンドを実行することができるように、AWS CLI がセットアップされ、ご自身の AWS アカウントのクレデンシャル情報をもとに設定されていることを確認してください。 その上で、以下のステップをローカルの Mac/PC 上で実行してください。ddeploy-mqtt-connector.sh のスクリプトはアーティファクト圧縮ファイルを作成し、アーティファクトを保存するための Amazon S3 バケットを “ggv2-mqtt-to-sitewise-component-” のプレフィックスで作成し、デプロイ設定ファイルとレシピファイルを準備します。最後に、コンポーネントを AWS IoT Greengrass コアデバイスにデプロイします。このスクリプトは2つの引数を取ります。

    • 1つ目の引数は AWS IoT SiteWise ゲートウェイが実行されている IoT Coreの名前です
    • 2つ目の引数はあなたのAWSアカウント番号です
      > cd ~
      > git clone git@github.com:aws-samples/sitewise-mqtt-custom-connector.git
      > cd sitewise-mqtt-custom-connector/mqtt-to-sitewise-connector-component/
      Export AWS Credentials
      > export AWS_ACCESS_KEY_ID="XXXXXXXXXXXXXXXXXXX"
      > export AWS_SECRET_ACCESS_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
      
      Run “ddeploy-mqtt-connector.sh” script.
      > bash ./ddeploy-mqtt-connector.sh <IOT_CORE_NAME> <AWS_ACCOUNT_NUMBER>
  2. デプロイが正しく行われたら、AWS IoT Greengrass コアデバイスにログインし、コンポーネントログファイルをチェックします
    > sudo su – 
    > cd /greengrass/v2/logs
    > tail -f community.greengrass.MqttToSitewise.log

    ログファイルに以下のようなメッセージが表示されます。
    2021-08-25T20:28:50.793Z [INFO] (Copier) community.greengrass.MqttToSitewise: stdout.
    2021-08-25 20:28:50,793 - dev - INFO - Total processed messages were : 0.
    {scriptName=services.community.greengrass.MqttToSitewise.lifecycle.Run,
    serviceName=community.greengrass.MqttToSitewise, currentState=RUNNING}

Step6: ゲートウェイのクレデンシャルを設定

ゲートウェイからデータやダッシュボードにアクセスするには、AWS ドキュメントに記載されている方法でアクセスする必要があります。このブログ記事では Linux クレデンシャルを用いてゲートウェイにアクセスする方法を使います。

以下のコマンドを AWS IoT SiteWise ゲートウェイデバイス上で実行します。ここでは “sweops1” の名前で Linux ユーザーを作成しています。

> sudo groupadd --system SWE_ADMIN_GROUP
> sudo useradd sweops1
> sudo passwd sweops1
Supply the password

> sudo usermod -a -G SWE_ADMIN_GROUP sweops1

Step7: エッジでの AWS IoT SiteWise データのモニター

エッジで AWS IoT SiteWise モニターにアクセスするために、“OpsHub for AWS IoT Sitewise Application” をダウンロードし、Windowsベースの EC2 インスタンスにインストールします。AWS Web コンソールにて、EC2 に移動し、Amazon EC2 インスタンスを作成します。このデモでは、m5.xlarge インスタンスタイプの “Microsoft Windows Server 2019 Base” AMI を選択しました。

Windows EC2 インスタンスが作成されたら、Remote Desktop Protocol (RDP) のプログラムを用いて Amazon Windows EC2 インスタンスに接続します。Amazon Windows EC2 インスタンスに OpsHub for AWS SiteWise アプリケーションをダウンロードしてインストールします。

注意: ポート 443 と 8443 が SiteWise EC2 インスタンス用にオープンになっていることを確認してください。

OpsHub for AWS SiteWise を開くと、以下のような画面が表示されます。これはローカルゲートウェイ上で動作するアプリケーションです。

  • ゲートウェイデバイス/ Greengrass コアデバイスの IP アドレスとホスト名を入力します。“hostname -i” コマンドを実行することで IP アドレスを取得可能です。
  • 認証の方法として Linux を選択します。
  • 上記で作成したユーザー名を入力します。ここでは “sewops1” のユーザーを作成しました。
  • ユーザーのパスワードを入力します。
  • Sign in ボタンをクリックします。

OpsHub への接続が完了すると、以下のようなダッシュボードが表示されます。

Step8: パブリッシャーホストから AWS IoT Greegrass V2 MQTT ブローカーにデータをプッシュするテストシミュレータープログラムを実行する

  1. Step1にて作成したアセットに対してランダムな値を生成するテストデータジェネレーターをダウンロードします。テストデータジェネレーターは Greengrass Version 2 にて作成された AWS IoT Greengrass ブローカーのトピック (clients/+/mqttiot/sitewise) にも生成された値を送信します。
    Step4 の初めに作成した 2 つ目の EC2インスタンス (パブリッシャー) にログインし、リポジトリをクローンし、以下のコマンドを実行します。

    > cd ~
    > git clone git@github.com:aws-samples/sitewise-mqtt-custom-connector.git
    > cd sitewise-mqtt-custom-connector/mqtt-client-test/
    > cd config/

    注意: conf.cfg の値は、~/iot-certs フォルダにコピーした証明書のファイルになるように置き換えてください。conf.cfg ファイルの以下の値を変更してください。

    番号 プロパティ 変更点
    1 CERTS_PATH この値は作成した証明書ファイルの場所を示します。このブログの手順に従って作成した場合、値は /home/ubuntu/iot-certs となります。
    2 host この値は Greengrass コアデバイスのホスト IP アドレスです。Step2 で作成した 1 つ目の EC2 インスタンスにログインすることで取得可能です。Greengrass コアデバイスの IP アドレスを取得するために以下のコマンドを実行してください: hostname -i
    3 root_ca_file この値はルート CA ファイルを示します。今回の場合には AmazonRootCA1.pem となります。この名前でルート CA ファイルが設定されていることを確認してください。もしくは必要に応じてこの値を変更してください。
    4 certificate_file この値はモノのデバイス証明書ファイルを示します。あなたの証明書のハッシュ値にて置き換えてください。この値は、~/iot-certs folder の hash-certificate.pem.crt にて確認することができます。
    5 privatekey_file この値はモノのデバイスのプライベートキーファイルを示します。あなたの証明書のハッシュ値にて置き換えてください。この値は、~/iot-certs folder の hash-private.pem.key にて確認することができます。
    6 thingName この値はパブリッシャーデバイスのモノの名前です。ここではモノの名前は Publisher_Device_SWGateway となります。
    7 topic この値は Step 4 のクライアントデバイスサポートを有効にするで設定したトピック名です。ここでは、“clients/+/mqttiot/sitewise と設定されていますので、”+” の部分を任意の値で置き換えることが可能です。ここでは、“clients/dev1/mqttiot/sitewise” を使用します。
    8 Region デフォルトではこのブログではすべてのアセットは us-east-1 のリージョンで作成されることを想定しているので、 “us-east-1” を指定します。
  2. テストデータジェネレータープログラムを実行し、データを生成し、Greengrass MQTT ブローカーにデータを送信します。上記のステップでコンフィグレーションの値をアップデートした後、以下のコマンドを実行してください。パブリッシャー/クライアントデバイスと AWS IoT Greengrass コアデバイスが同じネットワーク上に存在することを確認してください。パブリッシャー/クライアントデバイスは Greengrass コアデバイスとポート番号 8883 で通信を行います。クライアントと Greengrass コアデバイスが EC2 インスタンスの場合、セキュリティグループでポート番号 8883 の通信が許可されていることを確認してください。
    > cd ~/sitewise-mqtt/mqtt-client-test
    > chmod -R 755 TestDataGenerator.py
    > python3 TestDataGenerator.py

    実行を行うと、メッセージのパブリッシュを開始します。データの生成を止めたい場合には、“ctrl+c” でプログラムを停止してください。データが AWS IoT SiteWise Edge 経由で入力されると、AWS OpsHub for AWS IoT SiteWise for Windows を使ってデータを可視化する事ができます。

Step9: データが OpsHub ゲートウェイクライアントに表示されていることを検証する

OpsHub ツールにて 「アセット」タブをクリックし、「SiteWise アセット」を選択します。アセットの中から1つのアセットを選択し、「測定値」タブに移動すると、「最新の値」のカラムに値が表示されていることが確認できます。

Step10: データがクラウド上の AWS IoT SiteWise に送信されていることを検証する

データがクラウド上の AWS IoT SiteWise に送信されていることを検証します。AWS IoT SiteWise エッジにデータが送信されると、クラウド上の AWS IoT SiteWise にもデータが送信されます。

AWS IoT SiteWise のコンソール画面を開き、データが送信されているかどうかを確認します。アセットタブをクリックし、上記のテストデータジェネレーターにてデータが送信されたアセットの1つを選択します。測定値のタブの最新の値のカラムに最新の値が確認できます。

クリーンアップ

ソリューションのテストが完了したら、作成した AWS リソースを以下のようにクリーンアップします。

  • AWS IoT SiteWise ゲートウェイを削除する
    AWSコンソールにログインし、AWS IoT SiteWise のサービスのページに移動し、作成したゲートウェイを選択して削除ボタンをクリック
  • CDK で作成したAWS リソースを削除する
    > cd sitewise-mqtt-custom-connector/sitewise-assets-creation/
    > cdk destroy sitewise-assets-creation --profile <AWS_CLI_PROFILE_NAME>
  • AWS EC2 のコンソールページから上記のステップで作成した以下の EC2 インスタンスを削除する。
    • AWS IoT SiteWise ゲートウェイの EC2 インスタンス
    • テストメッセージのパブリッシュに使用したパブリッシャーの EC2 インスタンス
    • エッジでの AWS IoT SiteWise モニターに使用した Amazon EC2 インスタンス (Microsoft Windows AMI)
  • AWS IoT Greengrass コアデバイス: AWS IoT Core コンソールページから Greengrass を選択し、その中から作成したコアデバイスを選択し、削除ボタンをクリック

まとめ

この記事では、AWS IoT SiteWise Edge から AWS IoT Greengrass のストリームマネージャー経由で IoT デバイスメッセージペイロードを送信するカスタムコネクタの作成方法を説明しました。AWS IoT Greengrass に作成された MQTT ブローカーに MQTT メッセージをパブリッシュするパブリッシャーデバイスの作成方法を解説しました。また、MQTT ブローカーをサブスクライブし、後段のカスタムコンポーネントにメッセージを送信する MQTT ブリッジコンポーネントの使用方法を解説しました。ローカルの IoT デバイスとのインタラクションについてはこのドキュメントでさらに学習できます。

執筆者について

Srikanth Kodali

Srikanth Kodali は Amazon Web Services のプリンシパル IoT データ分析アーキテクトです。 彼はAWS のお客様に、IoT データと分析ソリューションの構築に関するガイダンスと技術支援を提供し、AWSを使用する際のソリューションの価値を向上させるご支援を行っています。

Kurt Mueller

Kurt Mueller は AWS IoT のシニアテクニカルプロダクトマネージャーで、産業分野のお客様に必要な製品を提供することにフォーカスしています。 彼は、機器とセンサーデータの収集し、それを活用して、お客様が産業の生産プロセスを最適化、増強、再発明するために必要な実行可能なインサイトにできるようにするご支援を行っています。

Lomash Kumar

Lomash Kumar は AWS IoT のプリンシパルエンジニアであり、産業分野のお客様が製造オペレーションの生産性を最大化できるようご支援しています。 彼は、お客様がAWSのクラウドとエッジオファリングの双方から恩恵を受けるハイブリッドソリューションを実現するご支援を行っています

この記事はプロフェッショナルサービス本部 IoT コンサルタントの小林が翻訳しました。