Howto

Armadillo-IoT A6E: Node-RED™でAWSへ接続するシステムを構築する

この Howto では以下のことを実現するフローの例を提供します:

  • Armadillo-IoTゲートウェイ A6E (以下、Armadillo と記載します) を AWS IoT Core に登録します。
  • EdgeLock SE050 を使用して AWS IoT Core へ接続する。
  • AWS IoT Device Shadow を利用して、Armadillo のシャドウの作成・更新を行います。
  • ダッシュボードの操作によって AWS IoT Core へデータを送信します。
  • AWS IoT Core から受信したデータをダッシュボードに反映します。

システム構成

※Node-RED™ は、 OpenJS Foundation の米国およびその他の国における登録商標または商標です。 image

準備するもの

  • Armadillo-IoTゲートウェイ A6E
  • デモの SWU イメージ (本Howto はバージョン 1.0.0 を使用します)
  • AWS IAM ユーザー (AWS IoT リソース にアクセスする許可を持つ)

利用する AWS サービス

  • AWS IoT Core

    AWS IoT Core は IoT に特化した AWS のクラウドサービスです。 AWS サービスへのデバイス接続時の相互認証や、デバイス管理の役割を持ちます。 このサービスによって、エンドユーザーが数多くのデバイスを簡単・安全に接続、管理することができます。

  • AWS IoT Device Shadow

    AWS IoT Device Shadow (以下、Device Shadow と記載します)は AWS IoT Core のモノに対してシャドウを付けるサービスです。 MQTT および予約された MQTT トピック、Device Shadow REST API を利用することでシャドウの作成、更新、削除が可能です。 Device Shadow ではデバイスの状態を AWS クラウド上に保存するため、他のアプリケーションやクラウドサービスがデバイスの状態を取得することができます。 本 Howto では Device Shadow REST API を使用して、Armadillo のシャドウの取得・更新を行います。 送信するデータのフォーマットについては、Device Shadow サービスドキュメントを参照してください

手順

AWS IAM ユーザーのアクセスキーの準備

IAM ユーザーが AWS サービスに接続するためにはアクセスキーが必要です。 そのため、以下を参考にアクセスキーを発行してください。 IAM ユーザーのアクセスキーの管理についてはこちらを参照してください。

本 Howto では AWS IoT Core に登録する X.509 証明書と、デバイス認証に利用するリファレンスキーを EdgeLock SE050 から取得します。 デバイス証明書をAWSに登録するために AWS IAMのアクセスキーを使用します。 本 Howto ではアクセスキーをデバイス内に保持するため、一時的なセキュリティ認証情報の使用を推奨します。

補足: AWSセキュリティ認証情報に関してのベストプラクティスは、こちら を参照してください。

  • メインのアクセスキーを利用する場合

    アクセスキーはユーザーの長期的な認証情報であるため、デモの設定が終わった後にそのキーを削除してください。 アクセスキーを削除する方法は Armadillo のデバイスから削除する方法と、IAM ユーザーのアクセス管理でそのキーを削除する方法の2つがあります。

  • 一時的な認証を利用する場合

    AWS IAM では一時的な認証情報を発行して、新しいアクセスキーとセッショントークンを代わりに利用することができます。 こちらについては AWS STS を参照してください。 一時的な認証の利用は時間的な制限などが付いているため、アクセスキーをArmadillo に残していてもセキュリティの問題にならない使い方ができます。

Armadillo のセットアップ

  • Node-RED™ デモ用 SWU イメージのインストール

本 Howto ではフローがあらかじめ設定された Node-RED™ コンテナイメージを使用します。 そのため、コンテナイメージの SWU を提供します。 こちらのリンクからダウンロードして、Armadillo にインストールしてください。 SWU イメージをインストールする方法については、製品マニュアルの「3.2.3.5. SWU イメージのインストール」を参照してください。

補足: この Howto の作成時点で、アットマークテクノが提供しているコンテナイメージは1つしかインストールできません。 そのため、Armadillo にプリインストールされているコンテナを削除しないと、Node-RED™デモコンテナをインストールできません。 プリインストールされているコンテナを削除するため、Armadilloにroot でログインして、以下のコマンドを実行してください。 ただし、このコマンドを実行すると、Armadillo上のコンテナを全て消えます。 自分で作成したコンテナがあれば、データなどをバックアップしてから作業してください。

armadillo:~# podman stop -a
armadillo:~# abos-ctrl container-clear
  • Node-RED™へのアクセス

SWU イメージのインストールが終わると、Armadillo が自動的に再起動して Node-RED™ が起動します。 Node-RED™の画面は「 http://<ArmadilloのIPアドレス>:1880 」のURLでアクセスします。 IPアドレスの取得方法については 「3.6. ネットワークに接続する」 をご参照ください。

Node-RED™の設定

環境変数を設定

はじめに、Node-RED™の環境変数を設定する必要があります。 本 Howto では、Node-RED™の環境変数を設定しないと、フローが進まないようになっています。 以下のステップで、環境変数を設定します。

  1. Node-RED™画面の右上にある「☰」をクリックして、「設定」を選択します。

image

  1. 「環境変数」を選択します。

image

  1. Node-RED™ の環境変数を設定できるウィンドウが開きます。

image

以下の5つの環境変数を設定します。 それぞれの変数の説明は以下の通りです:

  • AWS_ACCESS_KEY_ID

    AWS IAM ユーザーのアクセスキーです。 初期設定を実行する場合、この変数を変えたかどうかを検知してからフローを進めます。 初期設定の内容については Node-RED™フローの動作概要の章で説明します。

  • AWS_SECRET_ACCESS_KEY

    AWS IAM ユーザーのシークレットアクセスキーです。 AWS IAM ユーザーのアクセスキーとのペアで使います。

  • THING_NAME

    AWS IoT Core に登録するモノの名前です。 本 Howto では一意な名前を実装するため、「<THING_NAME>-<Armadillo のシリアル番号>」 として登録します。 シリアル番号はフローから取得されます。

  • POLICY_NAME

    AWS IoT Core に登録するポリシー名です。

  • AWS_SESSION_TOKEN

    AWS STS で受け取る一時的な認証情報です。 セッショントークンに関しては AWS STS のドキュメンテーション を参照してください。 デバイス証明書を登録するフローはこちらの変数が空かどうかで判定します。 トークンを使わない場合は空にしてください。

上記の環境変数を設定して Node-RED™をデプロイした後、デバイス証明書の登録や Device Shadow の初期化が自動的に行います。

次は、Node-RED™フローの動作を説明します。

Node-RED™フローの動作概要

Node-RED™ フローで実装したシステムは、次の動作を行います:

  1. 起動する瞬間

    Armadilloが起動した後、Node-RED™の初期設定が既に実行したのかを検知します。 初期設定を実行済みの場合、デバイス証明書の登録をスキップして、Device Shadow の polling に進みます。 初期設定がまだ実行していない場合、環境変数の内容を利用して、初期設定を行います。

image

  1. 初期設定

    Node-RED™の初期設定では、まずAWS_ACCESS_KEY_ID をループで検知して、デフォルトではない場合だけに初期設定の実行を進めます。 そして、モノの名前やIoTエンドポイントを保存して、デバイス証明書をAWSに登録します。 デバイス証明書を登録するフローは2つあって、AWS_SESSION_TOKEN が空かどうかで選択されます。 登録が無事に終わったら、モノの名前とIoTエンドポイントをルートディレクトリに保存して、初期設定済みとして認識されます。

    注意: ルートディレクトリに保存したファイルが存在する場合に初期設定済みとして認識されます。なので、ファイルの内容が壊れていたらNode-RED™が正しく動作できません。これを防ぐため、初期設定を行っているときに電源を切らないように注意してください。

image

  1. AWS IoT Core から受信したデータをダッシュボードに反映する

    初期設定済みの場合、Armadilloが Device Shadow に 5秒ごと GET リクエストを送信します。 受け取ったデータは timestamp でフィルターされて、最新のデータだけをダッシュボードに送信します。 ダッシュボードに送信する場合、そのデータの timestamp を保存します。

image

  1. ダッシュボードの操作した内容を AWS IoT Core へ送信する

    Node-RED™ のダッシュボードからデータを受けると、Device Shadow へ POST リクエストでデータを送信します。 POSTする度に、送信したデータとその timestamp を最新のものとして保存します。

image

  1. ダッシュボードの更新

    新しいデータを受信するとダッシュボードに反映されます。 また、ダッシュボードの操作で値が変化する度に、POST リクエストを送信するフローにデータを渡します。

image

次はダッシュボードの操作へ進んでください。

ダッシュボードの操作

Dashboard 2.0

デモには Dashboard 2.0 を利用しています。 以下の手順でダッシュボードを開きます:

  1. Node-RED™ 画面の右上にあるドロップダウンをクリック

image

  1. 「ダッシュボード 2.0」をクリック

image

  1. 画面の右上にある「ダッシュボードを開く」ボタンをクリック

image

その後、新しいタブでダッシュボードが開きます。

image

ダッシュボードの内容

デモのダッシュボードは 3つの部分に分かれています。 それぞれの部分の説明は次の通りです:

  • ユーザ入力

    ユーザがスライダやスイッチを設定することができます。 設定された値はデバイスに設定され、AWSへ送信されます。

  • データ可視化の例

    データを可視化する場合の例です。 この例では、スライダーの値をゲージに反映され、ボタンの値は画像の選択を操作します。

  • AWSから受信したデータ

    AWSから受信したデータを表示します。 AWSのデータは5秒ごとに受信されるため、データが送信されてからこの値に反映されるまでに少し時間がかかります。

Armadillo のセットアップと設定が完了すると、システムは完成です。

Device Shadow の動作確認

AWS IoT Core のページからモノの Device Shadow ドキュメントを確認できます。 IoTゲートウェイが正しくセットアップしてAWSと通信できれば、Node-RED™ のダッシュボードに記入した値がこの Device Shadow ドキュメントに反映されるはずです。

Device Shadow のダッシュボードを開く手順は以下の通りです:

  1. AWS IoT Core のダッシュボードから、左にある 「管理」>「すべてのデバイス」>「モノ」を選択する

image

  1. モノのリストから、確認したいモノを選択する

image

  1. モノのページに、「Device Shadow」のタブを開いて、「Classic Shadow」にクリックする

image

Classic shadow のページに画像のような Device Shadow ドキュメントに表示されます。

image

(応用) 他のデバイスで Armadillo を管理

Device Shadow は REST API でアクセスできるため、シャドウのURLにHTTPSリクエストを送信できるデバイスであれば、どのデバイスも使用可能です。 IoTゲートウェイは定期的に Device Shadow からデータを取得するので、Device Shadow にアクセスすることだけで Armadillo を遠隔操作することができます。

ただし、デモで作成したシャドウにアクセスする権限が必要です。 アクセス権限を取るための手順は以下の通りです:

  1. AWS IoT のクライアント証明書を作成します。作成する方法はこちら を参照してください。

  2. 作成した証明書にデモで作成したモノとポリシーをアタッチします。

完成した後、作成した証明書を利用して HTTPS リクエストを送信すれば、Device Shadow にアクセスできます。 Curlコマンドで作成する簡単な HTTPS リクエストの例は、以下を参考にしてください。

curl --tlsv1.2 \
    --cacert /root/pem_files/AmazonRootCA1.pem \
    --key /root/pem_files/refkey.pem \
    --cert /root/pem_files/device_cert.pem \
    --request POST -v \
    -d "${SHADOW_DOCUMENT}" \
    "https://${IOT_ENDPOINT}:8443/things/${THING_NAME}/shadow"