LoginSignup
5

More than 1 year has passed since last update.

posted at

updated at

Organization

UbuntuにAWS IoT Greengrassをインストールする

はじめに

会社の業務で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を作成します。

  1. 右上のメニューで東京リージョンを選択します。
    gg0.png

  2. 左上の「サービス」メニューを開いて検索窓に「iot greengrass」と入力し、「IoT Greengrass」をクリックします。
    gg1.png

  3. 左側のナビゲーションペインから「Greengrass」→「イントロダクション」と進み、グループの作成をクリックします。
    gg2.png

  4. 「デフォルト作成を使用」をクリックします。

  5. グループに名前を付けて「次へ」をクリックします。今回は「eRT3Group」とします。

  6. Greengrass Coreの名前を指定します。デフォルトのまま「次へ」をクリックします。

  7. 確認画面が表示されます。確認して「グループとCoreの作成」をクリックします。

8.「これらのリソースはtar.gzとしてダウンロードしてください」をクリックして、デバイスをクラウドに接続するためのセキュリティリソースをダウンロードします。
このファイルは後からダウンロードすることができないので、必ずここでダウンロードしておきましょう。
ダウンロードできたら「完了」をクリックして設定を終了します。

Greengrass Coreのデバイスへのインストール

デバイスにGreengrass Coreソフトウェアをインストールして起動します。
Greengrass Coreソフトウェアのインストール方法は複数ありますが、ここではAPTリポジトリからインストールします4

Note
APTリポジトリからのインストールではOTA更新がサポートされていません。OTA更新を利用したい方は他の方法でインストールしてください。

セキュリティリソースとルートCA証明書のセットアップ

デバイスをクラウドに接続するために必要なセキュリティリソースとルートCA証明書をセットアップします。

セキュリティリソースのインストール

  1. WinSCPを起動してデバイスと接続し、ユーザーのホームディレクトリにGreengrass Groupの作成の手順8でダウンロードしたセキュリティリソース(tar.gzファイル)を置きます。
    gg8-2.png

  2. 以下のコマンドを実行してセキュリティリソースをインストールします。
    <hash>の部分はセキュリティリソースのファイル名に合わせて置き換えてください。

    sudo mkdir -p /greengrass
    sudo tar -xzvf ~/<hash>-setup.tar.gz -C /greengrass
    

ルートCA証明書のダウンロード

  1. /greengrass/certsへ移動します。

    cd /greengrass/certs/
    
  2. 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ソフトウェアのインストール

  1. Greengrassのシステムアカウントを作成します。

    sudo adduser --system ggc_user
    sudo addgroup --system ggc_group
    
  2. 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
    
  3. パッケージのリストを更新し、Greengrass Coreソフトウェアをインストールします。

    sudo apt update
    sudo apt install aws-iot-greengrass-core
    
  4. 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
    

    デバイス起動時に自動的に起動するには以下のコマンドを実行してください。

    sudo systemctl enable greengrass.service
    

Note
デバイスがproxy環境下にある場合は追加でproxy設定が必要になります。

動作確認

空のデプロイを行ってデバイスがクラウドと接続できるか確認します。

  1. 左側のメニューから「グループ」へ進み、作成したグループをクリックします。
    gg11-a.png

  2. 「アクション」メニューから「デプロイ」をクリックし、デプロイを開始します。
    gg9.png

  3. 「自動検出」をクリックします。
    gg28.png

  4. デプロイが完了するまで数分間待ちます。デプロイが正常に完了すれば成功です。
    gg10.png

まとめ

クラウド上でのGreengrass Groupの作成と、デバイスへのGreengrass Coreのインストールを行いました。
次回はLambdaの作成とデプロイを行う予定ですのでお楽しみに!

次回:GreengrassのLambdaを作成してエッジデバイスにデプロイする

補足

proxy設定

デバイスがproxy環境下にある場合はproxy設定が必要になります。
環境により設定は異なりますが、参考までに今回私が行った設定を紹介します。

環境変数の設定

こちらの記事をご覧ください。

Greengrass Coreの設定

AWSの公式ドキュメント5に従ってGreengrass Coreの設定を行います。

  1. Greengrassが起動中の場合は停止します。

    sudo systemctl stop greengrass.service
    
  2. /greengrass/config/config.jsonに書き込み権限を追加して開きます。

    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を再度起動します。

    sudo chmod -w /greengrass/config/config.json
    sudo systemctl start greengrass.service
    

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5