はじめに
どうも、システム基盤開発室という部署に所属してる社員番号666です。
前回はラズパイで遊んでみる、
techblog.ap-com.co.jp
ということでセンサーを取り付け、node.jsなコードを配備して実行してみましたが今回はAWS IoT Greengrassを利用しクラウド側からコードをデプロイし実行してみます。
今回やろうとしていること
AWS IoT Greengrassとラズパイをセットアップして、AWS経由でラズパイにコードをデプロイし、ライズパイに搭載しているセンサの値をMQTTでクラウド側に送る というお話です。。。
用意するもの
- AWS契約
AWS IoT Greengrass をサポートしているリージョンで作業しましょう。
AWS IoT Greengrass って何?
AWS IoT Greengrass の概要はこちらで紹介されています。 docs.aws.amazon.com IoTデバイスで動作するプログラムをAWS Lambdaで書けるってのいうが非常に魅力的です。 また、クラウド側で育てた機械学習モデルをIoT側にデプロイさせエッジで処理出来るようです。これは面白い。
- ラズベリーパイ
前回に引き続きRaspberry Pi 3 Model B+ を利用します。
AWS IoT Greengrass の利用開始
まずはAWS側の設定です。
基本的にはこのチュートリアルに沿って設定するとよいです。
https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/gg-gs.html
ラズパイ側の初期設定は既に済んでいると思いますので追加でsysctlにカーネルパラメータを設定・変更します。
sysctl.d/98-rpi.confにfs.protected_hardlinksとfs.protected_symlinks を追記しましょう。
$ sudo vim /etc/sysctl.d/98-rpi.conf $ cat /etc/sysctl.d/98-rpi.conf ... (省略).. fs.protected_hardlinks = 1 fs.protected_symlinks = 1
さらに/boot/cmdline.txt にも行末に値を設定します。行の追加ではなく、既存の設定値の後ろに追加するようにします。
$ sudo vim /boot/cmdline.txt $ cat /boot/cmdline.txt dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles quiet cgroup_enable=memory cgroup_memory=1
Greengrass用のユーザとグループが必要なので追加しておきます。*1
$ sudo adduser --system ggc_user $ sudo addgroup --system ggc_group
一旦、ラズパイ側の設定はここまで。rebootしておきます。
$ sudo reboot
次はAWS IoT Greengrassの作成です。
https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/module2.html
こちらを参考にして作成していきます。
さっそく始めてみます。
[グループの作成]ボタンを押して作成開始です。
[簡単な作成の使用]で進めます。
Greengrassグループの名前を決めます。
今回はraspiGroup としました。
Core機能の名前を決めます。
今回はraspiGroup_Core としました。
[グループとCoreの作成]ボタンを押すと自動生成が始まります。
証明書やキーファイル等(66xxxxxxxx-setup.tar.gz の様なファイル名)のダウンロードを促されるのでダウンロードしてください。
以上でGreengrassグループの初期準備ができました。
次はラズパイ側にGreengrassのソフトウェアをインストール動作させます。
Greeengrass ソフトウェアの準備
AWS IoT Greengrass ソフトウェアを入手します。 https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/what-is-gg.html#gg-core-download-tab
ラズパイのアーキテクチャはARMv7l、2019年6月時点の最新versionは1.9.1となります。 wgetでサクッと入手しましょう。
$ wget https://d1onfpft10uf5o.cloudfront.net/greengrass-core/downloads/1.9.1/greengrass-linux-armv7l-1.9.1.tar.gz
展開します。
$ sudo tar -xzvf greengrass-OS-architecture-1.9.1.tar.gz -C /
さらに、先ほどダウンロードしておいたtar.gz もラズパイに転送して展開します。
$ 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
Greeengrass 起動
これでGreengrassを起動させる準備が整いました。
早速起動してみます。
$ sudo /greengrass/ggc/core/greengrassd start Setting up greengrass daemon Validating hardlink/softlink protection Waiting for up to 1m10s for Daemon to start Greengrass successfully started with PID: 2276
ログは
/greengrass/ggc/var/log/system/runtime.log に出力されます。
以上でAWS IoT Greengrassの初期設定とラズパイ側の設定は終了です。
長くなってしまったので続きは次回にしましょう。
次回はLambdaコードを書いてIoTデバイス(今回はラズパイ)にデプロイし、センサで取得した値をクラウド側で確認してみます。
*1:20190613 手順が一部もれていました