🌱

Node-Redで作成したデータをAWSに送信してみた(接続テスト)

2023/05/16に公開

いきなり話は飛躍しますが、現在以下のような機能のあるWebアプリを開発できないか試行錯誤中です。

筆者はReact、AWSを本格的に使用した経験ありません。
(※Reactはローカルでプロジェクト立ち上げて少し触った程度)

ラズパイからNode-Redを経由してAWSへデータを送信する前段階として、今回は接続を確認するために任意のデータを作成して、Node-RedからAWSへデータを送信してみました。実施した内容を備忘録として書き留めておきます。

事前準備・対象者・前提など

以下の内容は割愛します。

  • AWSのアカウント作成
     (IAMユーザーでログイン)
  • Node-Redやラズパイの初歩的な操作
     (高度な経験なくても、「使ったことある!」程度で大丈夫)

参考にした資料

https://tech-note-meeting.com/2020/12/31/raspberry-piラズパイ-を-node-red-でaws-iotに接続するための設定方法/

https://recipe.kc-cloud.jp/archives/9612/

それでは早速本題に入ります。

Node-Redとラズパイ側の準備

ここの説明は簡素にします。

ラズパイを起動させ、Node-Redを立ち上げます。ローカルサーバー(http://raspberrypi.local:1880/)にアクセスしてNode-Redの画面が確認できれば準備完了です。

AWS側の設定

※以降のAWSやNode-Redの設定に関して、実施する内容の根本的な変更はございませんが、特にAWSについてはメニュー項目の見た目が大幅に変わる恐れがあります。予めご了承ください。

モノの作成(証明書の作成)

順を追って説明していきます。
サービスの検索窓から「iot」と入力すると出てくる「Iot Core」を選択します。
iotと入力してIoT Coreを選択する

左サイドバーから、管理 > すべてのデバイス > モノ へアクセスし、「モノを作成」をクリックします。
モノを作成

「1つのモノを作成」を選び、適当な名前(※ここでは「RaspberryPi」としました。)を入力して次へ進みます。名前以外の項目は特に変更しなくて大丈夫です。
1つのモノを作成
モノの名前を入力する

現段階では証明書がないので、新しい証明書を自動生成します。
新しい証明書を自動生成

「モノを作成」ボタン押下のあと、モーダルウィンドウが開くので必要なデータをダウンロードします。 具体的には以下の4つのファイルが必要になります。ダウンロード後は大切に保管しましょう。 (※取り急ぎ使用するのは、後で説明する3ファイルです。)

  • デバイス証明書
  • パブリックキーファイル
  • プライベートキーファイル
  • ルートCA証明書(※CA1だけで良いです。)

「モノを作成」ボタン押下
必要なファイルをダウンロードする

完了をクリックすると、モノが新しく作成されたのが確認できると思います。
モノが作成されたのを確認

ポリシーの作成とアタッチ

左サイドバーから、管理 < セキュリティー < ポリシー の順にアクセスし、ポリシーを作成します。
ポリシーを作成する

ここでは、動作確認用にポリシー名に「mqtt_test」を入力、ポリシーアクションに「すべてのAWS IoTアクション 」を選択、ポリシーリソースに「」を入力して作成ボタンを押下します。
ポリシーの設定

ポリシーが正常に作成されたのが確認できたと思います。
ポリシーが正常に作成されたのを確認

次に先ほど作成した証明書を開き、「ポリシーをアタッチ」を選択します。
ポリシーをアタッチをクリック

先ほど作成したポリシーを選択肢から選んでアタッチすれば完了です。
アタッチ
アタッチされたことを確認

MQTTの送信先の確認

左サイドバーの設定メニューからエンドポイントが確認できます。
エンドポイントの確認
後々、必要になってくるので、「設定からエンドポイントが確認できるんだな」と覚えておきましょう。これでAWSで行うほとんどの作業は完了です。次にNode-Redの設定に入っていきます。

MQTTとは?

ちょっと脇道に逸れますが…。
筆者は今回の作業を始めるまで聞いたことのないワードでした。

MQTT は、マシン間の通信に使用される標準ベースのメッセージングプロトコル、または一連のルール

のようです。

https://aws.amazon.com/jp/what-is/mqtt/#:~:text=できますか%3F-,MQTT とは何ですか%3F,送受信する必要があります。

まあ、現段階では「IoTでよく使われるプロトコル」という認識程度で良いんじゃないでしょうか。

Node-Red側の設定

AWSにテストデータを送信するための簡素な機構を作っていきます。
使うノードは3つです。

Inject(タイムスタンプ)

共通タグの中にあるinjectノード
ペーロードでは日時を選択します。お馴染みの、ボタンをクリックすることで処理を進めるノードですね。
injectノードの設定

Function(create payload)

機能タグの中にあるFunctionノード

AWSに送信されるデータを作成していきます。
名前は「create payload」にします。データの中身は何でもいいのですが、参考資料をもとに以下のコードを書きます。コードをコピペしましょう。

msg.payload = {
	"color":"red",
	"temperature":100
}

return msg;

functionノードの設定

mqtt out(myMQTT)

ネットワークのタグにあるmqtt outノード

AWS IoT にデータ送信を行うノードです。
サーバー、名前に「myMQTT」、トピックに「myTopic/mqtt」を入力します。
mqtt outノードの設定1

次に、「myMQTT」と入力した右隣にある鉛筆マークをクリックしてサーバーの設定に進みます。

mqtt outノードの設定2

サーバの欄には先ほど確認したMQTTの宛先を設定してください。
(※AWSの設定で確認したエンドポイントです。)

その他は特に変更の必要はなく、TLSの設定を進めていきます。ここでやっと序盤に取得した証明書の出番がでてきました。具体的には、証明書、秘密鍵、CA証明書にそれぞれファイルをアップロードします。

それぞれどのファイルなのかは、拡張子で判断できます。最後のドット以下が、「crt」なら証明書、「key」なら秘密鍵、「pem」ならCA証明書になります。
mqtt outノードの設定3

これで設定は完了です。一度デプロイをしてみましょう。接続済と表示されれば、うまく設定できています。接続がうまくいかなければ設定を見直しましょう。
接続の確認

データが送信されるか確認する

AWSのページからデータが送信できるか確認することができます。
まずは、Node-Redの画面のタイムスタンプのボタンを一度クリックしてデータを送信しましょう。

次にAWSのページから、テスト > MQTTテストクライアント の順にアクセスしましょう。
Node-Redの設定で入力したトピックの内容を「トピックのフィルター」に入力します。

これまでの設定がすべて問題なくできていれば、サブスクライブのボタンをクリックすると作成したデータがすぐ下に表示されるはずです。
データ送信の確認

まとめ

以上、Node-RedのデータをAWSに送信するまでの流れでした。
初め、参考資料の1つ目の記事だけを参考にしてモノを作成するステップを飛ばしていたので、接続が上手くいかず四苦八苦しました。少しでも同じような目的の方の参考になれば幸いです。

Discussion