Raspberry Pi 4 × Ubuntu 20.04 LTS にAWS IoT Greengrassを導入
はじめに
こんにちは、KSMNです。前回ラズパイ無線ルータを作成しましたが、今回はいよいよこの無線ルータにAWS IoT Greengrassを導入します。
0. そもそもAWS IoT Greengrassとは?
ドキュメントでは以下のように説明されています。
AWS IoT Greengrass は、クラウドの機能をローカルデバイスに拡張するソフトウェアです。これにより、デバイスは情報源に近いデータを収集および分析して、ローカルイベントに自律的に反応し、ローカルネットワークで互いに安全に通信することができます。
ざっくりしすぎていてわかりずらいかもしれませんが、、、AWS IoTやその他のAWSの機能をエッジデバイスで利用できるというのがAWS IoT Greengrassです。AWS IoT Greengrassを導入したデバイスを用意することで、AWS IoTで利用するMQTTを使ってのデバイス間のメッセージのやり取りをインターネット経由ではなくローカルなネットワークで実行できます。AWS IoT Greengrass上ではAWS LambdaやSageMakerで作成した機械学習のモデルも利用できます。MQTTでメッセージを受け取りLambdaが発火、モデルを使って推論の実行、なんてこともできるわけです。
またAWS IoT Greengrassにはコネクタという機能が用意されています。このコネクタという機能は、Greengrassからインターネット経由でAWSの機能やサードパーティのサービスと通信ができる機能です。ローカルだけで完結することなくクラウドとの連携も可能というわけですね。
ユースケース
AWS IoT Greengrass コア は、エッジ環境でハブまたはゲートウェイとして機能する AWS IoT のモノ (デバイス) です。
ではAWS IoT Greengrassはいったいどんなときに使うべきなのでしょうか?ローカルでクラウドの機能を使えるということから、インターネットへ接続していない環境もしくは繋がりにくい環境が想定されます。たとえば固定回線の引かれていないビニールハウスとか、でしょうか?また、インターネットを介するレイテンシーが許容できない場合もそうでしょう。工場の製造ラインのデバイスとかでしょうか?また、AWS IoT Greengrassを導入するデバイスは、そのような環境からインターネットへのゲートウェイとなるデバイスもしくはデバイス同士の通信のハブとなるようなデバイスがよいでしょう。
今回は自宅で固定回線も引いてあるので、AWS IoT Greengrassを使う必要は正直言ってないです!しかし、この構成を応用してSIMで通信するようなデバイスをベランダの置いて、ビオトープの監視もうっすら計画しているので、キャッチアップのためにAWS IoT Greengrassを利用します。
1. インストール前の設定
今回、デバイスはRaspberry Pi 4のため、だいたい上記ドキュメント手順でよいのですが、若干違う個所もあります。
Greengrass用ユーザーの作成。
$ sudo adduser --system ggc_user $ sudo addgroup --system ggc_group
セキュリティ向上のため、ハードリンクとソフトリンクの保護を有効。
$ sudo vim /etc/sysctl.d/99-sysctl.conf #下記2行を末尾に追加 fs.protected_hardlinks = 1 fs.protected_symlinks = 1
再起動。
$ sudo reboot
確認。
$ sudo sysctl -a 2> /dev/null | grep fs.protected #下記の2つが表示される #fs.protected_hardlinks = 1 #fs.protected_symlinks = 1
cgroupsを有効。
$ sudo vim /boot/firmware/cmdline.txt #下記記述を既存の行に追加 cgroup_enable=memory cgroup_memory=1
再起動。
$ sudo reboot
2. AWS IoTで証明書発行
AWS IoT GreengrassデバイスとAWSが通信するための証明書の発行を行います。ここはAWSマネージメントコンソールの作業なので、上記ドキュメント手順でOKなため割愛します。
3. AWS IoT Greemgrassのインストール
今回はUbuntuですのでaptでAWS IoT Greengrass Coreがインストール可能です。基本的にドキュメントの手順通りでokです
まずはSCPかなにかで手順2で発行した証明書のtar.gz今回はいったん作業するOSユーザのホームフォルダへ置きました。
解凍します。
#Greengrass用ディレクトリの作成 $ sudo mkdir -p /greengrass #証明書の解凍、ファイル名はハッシュ値となってるのでそれぞれの環境のものに読み替えてください。 $ sudo tar -xzvf hash-setup.tar.gz -C /greengrass
ルートCAのダウンロード
$ cd /greengrass/certs/ $ sudo wget -O root.ca.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
キーリングパッケージのインストール。
$ wget -O aws-iot-greengrass-keyring.deb https://d1onfpft10uf5o.cloudfront.net/greengrass-apt/downloads/aws-iot-greengrass-keyring.deb $ sudo dpkg -i aws-iot-greengrass-keyring.deb $ echo "deb https://dnw9lb6lzp2d8.cloudfront.net stable main" | sudo tee /etc/apt/sources.list.d/greengrass.list
AWS IoT Greengrassのインストール
$ sudo apt install aws-iot-greengrass-core
起動と確認。activeになってればokです。
$ sudo systemctl start greengrass.service $ sudo systemctl status greengrass.service
自動起動設定。
$ sudo systemctl enable greengrass.service
まとめ
いかがでしたでしょうか。aptでインストールできるのは大変ありがたいです。前はドキュメントのリンクからダウンロードしてくるとかだったような。。。さて、これでようやくラズパイ無線ルータでAWS ioT Greengrassが利用できるようになったわけですが、次回からはラズパイ無線ルータ上でのLambda関数実行やデバイス間でのメッセージのやり取りをやってみたいと思います。