APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

AWS IoT Greengrassを使ってみる(その1)

はじめに

どうも、システム基盤開発室という部署に所属してる社員番号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側にデプロイさせエッジで処理出来るようです。これは面白い。

AWS IoT Greengrass の利用開始

まずはAWS側の設定です。 基本的にはこのチュートリアルに沿って設定するとよいです。
https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/gg-gs.html

ラズパイ側の初期設定は既に済んでいると思いますので追加でsysctlにカーネルパラメータを設定・変更します。
sysctl.d/98-rpi.conffs.protected_hardlinksfs.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
こちらを参考にして作成していきます。

さっそく始めてみます。 f:id:yuki-kodama:20190605123336p:plain [グループの作成]ボタンを押して作成開始です。


f:id:yuki-kodama:20190605123339p:plain [簡単な作成の使用]で進めます。


f:id:yuki-kodama:20190605123343p:plain Greengrassグループの名前を決めます。
今回はraspiGroup としました。

f:id:yuki-kodama:20190605123346p:plain Core機能の名前を決めます。
今回はraspiGroup_Core としました。


f:id:yuki-kodama:20190605123349p:plain [グループとCoreの作成]ボタンを押すと自動生成が始まります。 f:id:yuki-kodama:20190605123351p:plain

f:id:yuki-kodama:20190605130205p:plain 証明書やキーファイル等(66xxxxxxxx-setup.tar.gz の様なファイル名)のダウンロードを促されるのでダウンロードしてください


f:id:yuki-kodama:20190605123358p:plain
以上で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 手順が一部もれていました