M5StackでAmazon FreeRTOSを使用する７（Greengrass編）

# はじめに

M5StackでAmazon FreeRTOSを動かすと、効率的にアプリケーション開発、デバイス管理ができることがわかってきました。とはいえ、多数のM5Stackデバイスが直接クラウドに接続しないとうまく管理できない状況は非効率です。そこでAWS IoT Greengrassを利用してみましょう。
AWS IoT Greengrassを使うと、IoTデバイスの通信をローカルネットワークで行うことができ、サーバーレスで使い慣れたLambdaを使って処理を行ったり、データを格納したりすることができるようになります。

![greengrass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/9a753cac-3153-cb37-a001-cb86fb5b12b7.png)

AWS IoT Greengrassの要件はこちら [サポートされているプラットフォームと要件](https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/what-is-gg.html#gg-platforms) にありますが、CPUはARMまたはx86、メモリ128Mバイト以上など、ということで、今回は、仕事で関わっている[Record Meeting](https://www.recordmeeting.jp/)という自動議事メモ作成サービスで利用しているスピーカーでAWS IoT Greengrassを動かしてみます。このスピーカーは残念ながら一般に市販されていないのですが、この投稿では以降Raspberry Piと読み替えて頂ければ問題ないと思います。

![COET Record Meeting](https://www.tis.co.jp/images/jp/news/2019/tis_news/0725_1/20190725_1_01.png)


# インストール

AWSのドキュメント [AWS IoT Greengrass の使用開始](https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/gg-gs.html) に沿ってAWS IoT Greengrassを設定します。

また、こちら [Raspberry PiでAWS GreenGrassをセットアップし、AWS Lambda 関数を設定するまで](https://qiita.com/ikeponsu/items/62a3bc788b5ab2669629) のページでも詳しく説明して頂いているので、非常に助かりました。

チュートリアルに記載されていますが、IoT Greengrass 依存関係チェッカーを使用するとAWS IoT Greengrassの動作環境をチェックしてくれます。（以下サンプル）

```
==========================Checking script dependencies==============================
The device has all commands required for the script to run.

========================Dependency check report for GGC v1.10.x=========================
System configuration:
Kernel architecture: armv7l
Init process: /lib/systemd/systemd

（省略）

------------------------------------Results-----------------------------------------
Note:
1. It looks like the kernel uses 'systemd' as the init process. Be sure to set the
'useSystemd' field in the file 'config.json' to 'yes' when configuring Greengrass core.

Missing optional dependencies:
1. Could not find the binary 'python3.7'.

If Python 3.7 is installed on the device, name the binary 'python3.7' and add its parent
directory to the PATH environment variable. Python 3.7 is required to execute Python 3.7
lambdas on Greengrass core.

2. Could not find the binary 'nodejs8.10'.

If NodeJS 8.10 or later is installed on the device, name the binary 'nodejs8.10' and
add its parent directory to the PATH environment variable. NodeJS 8.10 or later is
required to execute NodeJS lambdas on Greengrass core.

3. Could not find the binary 'java8'.

If Java 8 or later is installed on the device name the binary 'java8' and add its
parent directory to the PATH environment variable. Java 8 or later is required to
execute Java lambdas as well as stream management features on Greengrass core.

(Optional) Greengrass container dependencies
Missing required dependencies:
1. The 'memory' cgroup is not enabled on the device.
Greengrass will fail to set the memory limit of user lambdas.

Supported lambda isolation modes:
No Container: Supported
Greengrass Container: Not supported

----------------------------------Exit status---------------------------------------
You can now proceed to installing the Greengrass core 1.10.x software on the device.
Please reach out to the AWS Greengrass support if issues arise.


```

Greengrassグループを作成する際、チュートリアルでは「簡易なグループの作成」で行いますが、この場合ストリームマネージャーが有効になります。ストリームマネージャーがJava8を使用するため、Java8のインストールがおすすめされます。今回の環境では、ストレージの残りが少なかったため、Python3.7、Java8をインストールしませんでした。

Python2.7はサポートが [終了予定](https://aws.amazon.com/jp/blogs/compute/continued-support-for-python-2-7-on-aws-lambda/) のため、利用は推奨されていませんが、まだ利用できるようです。

手順通りに、/boot/cmdline.txt に次の行を追加を追加してますが、'memory' cgroup が有効でないと言われています。今回はコンテナーを使用しないのでそのままにしました。

```
cgroup_enable=memory cgroup_memory=1
```


インストール後に、ロール設定とストリームマネージャーを無効にします。

![greengrass2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/1fe5de17-f632-72da-3f46-5692d68c42f9.png)

![greengrass3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/793ef1f3-1ad9-ede9-2e18-6b745e72d4dc.png)


# おわり

Greengrassのインストールは完了です。

![greengrass4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/c83666e1-7b5a-9c90-a070-8a760dc596ec.png)

# メモ

[第１回 Amazon FreeRTOSインストール](https://qiita.com/fukuebiz/items/54f765d12c084ceea392)
[第２回 Lチカ](https://qiita.com/fukuebiz/items/3b803912bf51b1f46d79)
[第３回 TFT](https://qiita.com/fukuebiz/items/732296b84e68a1a08d41)
[第４回 SDカード](https://qiita.com/fukuebiz/items/e7010b1d84131e93a0a3)
[第５回 AWS Shadows](https://qiita.com/fukuebiz/items/7b3d9d8185d183f2bd5b)
[第６回 OTA](https://qiita.com/fukuebiz/items/69bfb16592490bae4bf2)