はじめに
会社の業務でAWS IoT Greengrassについて勉強したので、今回から数回に分けてUbuntu搭載デバイスとAWS IoTを利用したアプリケーションを紹介していきたいと思います。
初回はクラウド上でのGreengrass Groupの作成と、エッジデバイスへのGreengrass Coreのインストール方法を紹介します。
Azure IoT Edgeを使った記事もあるので興味のある方は是非ご覧ください。
また、新バージョンGreengrassV2のインストールについてはこちらの記事をご覧ください。
環境
動作確認済デバイス(OS)
-
e-RT3 Plus F3RP70-2L1(Ubuntu 18.04 32bit)
横河電機のエッジコントローラです。AWS IoT Greengrassの認定デバイス2に登録されています(e-RT3のページはこちら)。 -
Raspberry Pi 4 Model B (Ubuntu Server 20.04 32bit)
これらのデバイスでは armhf アーキテクチャのパッケージが動作します。
また、Windows 10 搭載のPCでデバイスを操作しています。
AWS IoT Greengrassとは
AWS IoT GreengrassとはAWSが提供しているエッジコンピューティングのためのソフトウェアです。
Greengrassをエッジデバイスにインストールすることにより、クラウドとの接続やクラウドからのアプリケーションのデプロイなどを容易に行うことができます。
また、クラウドの一部の機能をエッジデバイスに拡張することにより、データソースに近い場所でのデータ収集や分析、ローカルイベントに対するアクション、ローカルデバイス同士の通信などを行うことができます。
詳しくはAWS IoT Greengrassの公式サイトをご覧ください。
準備
AWSアカウントの作成
AWSのアカウントを所持していない場合は作成します。
https://aws.amazon.com/jp/
制限付きの無料利用枠もあります。
今回使用するAWS IoTの無料利用枠はここで確認できます。
WinSCPのインストール
PCからデバイスにファイルを転送するために、PCにWinSCPをインストールします。
インストール方法や使い方については公式サイトをご覧ください。
https://winscp.net/eng/index.php
Python3.8のインストール
この設定はe-RT3を使用している場合のみ必要です。
Note
e-RT3の場合、一般ユーザーでsudoコマンドを実行するにはsudoers設定が必要です。
GreengrassのLambdaで使用するPython3.8をインストールします。
sudo apt update
sudo apt install python3.8
インストールの成功を確認します。
username@ubuntu:~$ python3.8 --version
Python 3.8.0
Java8のインストール
Greengrassのストリームマネージャーで使用するJava8をインストールします。
sudo apt update
sudo apt install openjdk-8-jdk
インストールしたJavaにリンクを張ります。
sudo ln /etc/alternatives/java /usr/bin/java8
インストールの成功を確認します。
username@ubuntu:~$ java8 -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~18.04-b01)
OpenJDK Client VM (build 25.275-b01, mixed mode)
cgroupの有効化
この設定はRaspberry Piを使用している場合のみ必要です。
コンテナでLambdaを実行するためにcgroupを有効にします。
/boot/firmware/cmdline.txt
を開きます。
sudo vi /boot/firmware/cmdline.txt
__既存の行の末尾に__以下の値を追加します。
cgroup_enable=memory cgroup_memory=1
デバイスを再起動します。
sudo reboot
Greengrass Groupの作成
AWSの公式ガイドの手順3に従って、AWSマネジメントコンソールでGreengrass Groupを作成します。
- グループに名前を付けて「次へ」をクリックします。今回は「eRT3Group」とします。
- Greengrass Coreの名前を指定します。デフォルトのまま「次へ」をクリックします。
- 確認画面が表示されます。確認して「グループとCoreの作成」をクリックします。
8.「これらのリソースはtar.gzとしてダウンロードしてください」をクリックして、デバイスをクラウドに接続するためのセキュリティリソースをダウンロードします。
このファイルは後からダウンロードすることができないので、必ずここでダウンロードしておきましょう。
ダウンロードできたら「完了」をクリックして設定を終了します。
Greengrass Coreのデバイスへのインストール
デバイスにGreengrass Coreソフトウェアをインストールして起動します。
Greengrass Coreソフトウェアのインストール方法は複数ありますが、ここではAPTリポジトリからインストールします4。
Note
APTリポジトリからのインストールではOTA更新がサポートされていません。OTA更新を利用したい方は他の方法でインストールしてください。
セキュリティリソースとルートCA証明書のセットアップ
デバイスをクラウドに接続するために必要なセキュリティリソースとルートCA証明書をセットアップします。
セキュリティリソースのインストール
-
WinSCPを起動してデバイスと接続し、ユーザーのホームディレクトリにGreengrass Groupの作成の手順8でダウンロードしたセキュリティリソース(tar.gzファイル)を置きます。
-
以下のコマンドを実行してセキュリティリソースをインストールします。
<hash>
の部分はセキュリティリソースのファイル名に合わせて置き換えてください。sudo mkdir -p /greengrass sudo tar -xzvf ~/<hash>-setup.tar.gz -C /greengrass
ルートCA証明書のダウンロード
-
/greengrass/certs
へ移動します。cd /greengrass/certs/
-
root.ca.pem
という名前でAmazon Root CA 1証明書をダウンロードします。sudo wget -O root.ca.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
ダウンロードした
root.ca.pem
が空でない(正しくダウンロードされた)ことを確認します。ファイルが空の場合はもう一度ダウンロードを試してみてください。cat root.ca.pem
Greengrass Coreソフトウェアのインストール
-
Greengrassのシステムアカウントを作成します。
sudo adduser --system ggc_user sudo addgroup --system ggc_group
-
AWS IoT Greengrass キーリングパッケージをインストールして、リポジトリを追加します。
cd ~ sudo 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
username@ubuntu:~$ echo "deb https://dnw9lb6lzp2d8.cloudfront.net stable main" | sudo tee /etc/apt/sources.list.d/greengrass.list deb https://dnw9lb6lzp2d8.cloudfront.net stable main
-
パッケージのリストを更新し、Greengrass Coreソフトウェアをインストールします。
sudo apt update sudo apt install aws-iot-greengrass-core
-
Greengrassデーモンを開始します。
sudo systemctl start greengrass.service
以下のコマンドを実行し、表示された
Active
の状態がactive(running)
であればデーモンは正常に動作しています。
username@ubuntu:~$ systemctl status greengrass.service
- greengrass.service - Greengrass Daemon
Loaded: loaded (/lib/systemd/system/greengrass.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2020-11-06 06:31:07 UTC; 14min ago
Process: 2159 ExecStart=/greengrass/ggc/core/greengrassd start (code=exited, status=0/SUCCESS)
Main PID: 2163 (5)
Tasks: 10 (limit: 2366)
CGroup: /system.slice/greengrass.serviceデバイス起動時に自動的に起動するには以下のコマンドを実行してください。 ```bash sudo systemctl enable greengrass.service
Note
デバイスがproxy環境下にある場合は追加でproxy設定が必要になります。
動作確認
空のデプロイを行ってデバイスがクラウドと接続できるか確認します。
まとめ
クラウド上でのGreengrass Groupの作成と、デバイスへのGreengrass Coreのインストールを行いました。
次回はLambdaの作成とデプロイを行う予定ですのでお楽しみに!
次回:GreengrassのLambdaを作成してエッジデバイスにデプロイする
補足
proxy設定
デバイスがproxy環境下にある場合はproxy設定が必要になります。
環境により設定は異なりますが、参考までに今回私が行った設定を紹介します。
環境変数の設定
こちらの記事をご覧ください。
Greengrass Coreの設定
AWSの公式ドキュメント5に従ってGreengrass Coreの設定を行います。
-
Greengrassが起動中の場合は停止します。
sudo systemctl stop greengrass.service
```
2. /greengrass/config/config.json
に書き込み権限を追加して開きます。
```bash
sudo chmod +w /greengrass/config/config.json
sudo vi /greengrass/config/config.json
```
coreThingオブジェクト内にiotMqttPortオブジェクトとnetworkProxyオブジェクトを追加します。
追加した後のファイルは以下のようになります。
```/greengrass/config/config.json
{
"coreThing" : {
"caPath" : "root.ca.pem",
"certPath" : "3283c6f04d.cert.pem",
"keyPath" : "3283c6f04d.private.key",
"thingArn" : "arn:aws:iot:ap-northeast-1:xxxxxxxxxxxx:thing/eRT3Group_Core",
"iotHost" : "xxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com",
"iotMqttPort" : 443,
"ggHost" : "greengrass-ats.iot.ap-northeast-1.amazonaws.com",
"keepAlive" : 600,
"networkProxy":{
"proxy":{
"url" : "http://username:password@example.com:port/"
}
}
},
...
```
3. ファイルから書き込み権限を削除し、Greengrassを再度起動します。
```bash
sudo chmod -w /greengrass/config/config.json
sudo systemctl start greengrass.service
```