Node-REDからAWS IoT Coreを使用する(前編)

すでに8月にやったことなのですが、9月頭から結構怒涛のスケジュールだったこともあり、なかなか書くことができませんでしたがようやく時間ができたので…

JAWS-UGへの参加

8月末に行われたJAWS-UG Nagoya。自分はJAWS-UG関連の勉強会などは参加していますが、基本的には雰囲気でEC2S3を使用しているレベルなので、聞いていても「ふむふむよくわからん」ということが多々あり、まだまだ初学者のレベル。

そんなときに以下のようなイベントがあったので、せっかくだし(JAWS-UGでは)LT未経験なのでやってみようと思いました。

jawsug-nagoya.doorkeeper.jp

speakerdeck.com

今回はこのLTでやってみたことの詳細を記載していこうと思います。調べてからすでに一ヶ月が立っているのでWEBのUIがすでに変わっているかもしれませんが、あしからず。

このネタを選んだのはそろそろAWS系のIoTネタも知りたくなったから。今回はRaspberryPi上のNode-REDからAWS IoT CoreMQTTの送受信を行うというものです。うまくいくでしょうか。

ちなみに、この内容はやっている間に以下の記事を見つけたので、それに近い感じになっているのですが、一部UIの設定項目などが変化があります。そのあたりを見てもらえればいいのかもしれません。

dev.classmethod.jp

今回の作業の手順

今回の作業の手順は以下のようになります。

  1. AWS IoT Coreの準備
  2. RaspberryPiへ必要なファイル(証明書情報など)をコピー
  3. RaspberryPiNode-REDの準備
  4. AWS IoT Coreを使用するためのNode-REDの拡張ノードの導入
  5. 拡張ノードからAWS IoT Coreを動作させる(送信・受信)

今回は作業が結構多くなりますが、 1. の手順がほぼほとんどです。そのため前編では 1.と 2. を取り扱い、続く後編で 3. 以降を取り扱うことにします。

AWS IoT Coreを使用する準備

AWS IoT Coreを使用する準備は以下の手順で行っていきます。

  1. ポリシーを作成
  2. モノを作成
  3. 証明書を作成
  4. エンドポイントを取得

ポリシーを作成

では、今回使用するAWS IoT Coreの準備をしていきます。まずはAWSのマネージメントコンソール上にログインをします。リージョンは東京で大丈夫です。IoT Coreを選択して、設定を開始します。

IoT Coreの初期画面は以下のようになっています。

まずはポリシーを作成していきます。画面左のペインから【管理】→【セキュリティ】→【ポリシー】を選択します。

クリックすると【AWS IoTポリシー】設定画面になるので、その中にある【ポリシー作成】ボタンをクリックします。(ちなみに下にある【作成】ボタンでもポリシーの作成はできます)

つづいて作成するポリシーの名前を入力を行います。

【ポリシー名】の入力ボックスに、今回はRaspberryPi_NodeREDと入力することにします。このポリシー名に使用できる文字種は限られているので注意です。

今度は設定画面を下にスクロールさせて、【ポリシーステートメント】タブをクリックしてポリシーを設定していきます。参考にした記事の設定ではすべてのアクションを設定することができたのですが、現在のUIでは1つ1つのアクションに対してポリシー効果を設定していくしかないようです。今回はテスト用なので全てのポリシーアクション(計7つ)の【ポリシー効果】を許可に設定していきます。

ここまで設定ができたら、更に下にある【作成】ボタンをクリックします。

すると、【AWS IoT ポリシー】画面に先程作成したポリシー(RaspberryPi_NodeRED)が表示されます。

ここでポリシーの作成は終了です。

モノを作成

続いてはモノの作成となります。ここでいうモノとは物理的なモノではなく接続するデバイスの設定を作ることになります。

左のペインから【管理】→【すべてのデバイス】→【モノ】をクリックします。すると、モノの設定になります。この中から【モノを作成】ボタンをクリックします。

今度はモノを作成する画面に遷移し、まず作成する【モノの数】の設定を行います。今回は1つのみなので、【1つのモノを作成】のラジオボタンを選択して、【次へ】ボタンをクリックします。

続いてはステップ1の【モノのプロパティを指定】画面になります。今回は作成するモノの名前をRaspberryPiとしておきます。入力ボックスに入力しておきます。

画面をスクロールさせて、【次へ】ボタンをクリックします。

証明書を作成

続いてステップ2の【デバイスの証明書を設定】画面となります。今回はこのモノに新しい証明書を作成して設定するので、【新しい証明書を自動生成(推奨)】にラジオボタンを設定して、【次へ】ボタンをクリックします。

ステップ3では、【証明書にポリシーをアタッチ】画面となります。先ほど作成したポリシーを設定することになります。画面にはすでに作成したポリシーが表示されていると思うので、今回は先程作成したRaspberryPi_NodeREDのポリシーにチェックをいれて、【モノを作成】ボタンをクリックします。

すると、このモノに関係される証明書関連のファイルをダウンロードするダイアログが表示されるので、全て【ダウンロード】ボタンをクリックして保存しておきます。保存が完了したら【完了】ボタンをクリックします。

そして、今作成されたRaspberryPiというモノがリストに表示されたことを確認しておきます。

これでモノの作成と証明書の作成の2つが完了しました。

エンドポイントを取得

最後にAWS IoT Coreへのエンドポイントを取得します。 左のペインの下の方にある【設定】をクリックして、

【設定】の画面から【デバイスデータエンドポイント】欄に表示されたエンドポイントをクリックしてコピーを行います。ここではファイルに保存されるものではないので、テキストファイルなどに、データを格納して保存しておきます。自分はendpoint.txtに書き込んで、証明書などとともに保管しておきました。

これでエンドポイント取得が完了です。

設定完了後の確認

ここまでの手順で証明書、エンドポイントが手元に揃っているかと思います。ファイルとしては以下の様になっていると思います。今回はこの中から青く色を変えたファイルを使用していくことになります。

あとは、このファイルをRaspberryPiにコピーしていきます。SDカードでWindows側からも操作ができる/boot/certsというディレクトリを作成して、必要なファイルをコピーすればOKです。sftpなどで転送しても大丈夫です。

ここまでの作業でAWS IoT Coreの準備が完了しました。

おわりに

前半となるAWS IoT Coreの設定が完了まできました。参考にしたサイトの情報からUIの見え方が結構変わっていたので、やることはわかるんですがかなり苦労した印象です。一番大きな違いだったのは、ポリシーステートメントの設定を大枠の設定ではなく、ひとつひとつ設定が必要だった点だったかなと思います。色々種類はありますが、UIは刻一刻と変化していくのでそれに対応するのも大変ですよね~と思っちゃうのでした。参考になる資料を見つけたらすぐにやってみるのがおすすめですよね。

/* -----codeの行番号----- */