AWS IoT Greengrass 2.0 を Raspberry Pi 4 Model B + Ubuntu 20.04 LTS に 導入する

記事タイトルとURLをコピーする

はじめに

Amazon SageMaker Edge Managerを検証しようと思いましてAWS IoT Greengrassも併用しようとしたんですが、re:invent 2020の時期にAWS IoT Greengrass 2.0というのが登場しました。2.0なのかv2なのか、どちらが正しいか不明です。

aws.amazon.com

Classicと何が違うかは、詳しくは上記の公式ブログをご覧ください。簡単に言うとオープンソースになって、かついろいろ機能が拡張されています。

今回はRaspberry Pi 4 Model B + Ubuntu 20.04 LTSで構築した無線ルータにAWS IoT Greengrass 2.0を導入したいと思います。このラズパイルータの作り方はここでは紹介しません。

ちなみに、なぜこんなことをしているかというと、ラズパイで作成したルータにIoTデバイスを接続して、前述のEdge Managerの検証含めていろいろ試したいからです。

AWS IoT Greengrass 2.0の導入

AWS IoT Greengrass 2.0の導入はマネコンの案内通りに実施すれば簡単です。

1. Greengrass コアデバイス登録・モノグループ追加

Greengrass コアデバイスを名前を入力します。マネコンに記載があるようにこれはAWS IoT モノ (Thing) と同じ扱いになります。モノのグループにも追加することができます。せっかくなので新規作成して追加します。これらは次の手順のインストーラ実行時に作成されます。

f:id:swx-mine:20210108113731p:plain

2. Greengrass コアソフトウェアのインストール

ラズパイにログインし、マネコンの手順に沿って、Greengrass コアソフトウェアをインストールします。

Javaのインストール

Javaと言ってますが正確にはAmazon Corretto 8です。

Corretto 8のインストールの前に java-common をインストールする必要があります。

$ sudo apt install -y java-common

Corretto 8をダウンロードしてインストールします。

$ wget https://corretto.aws/downloads/latest/amazon-corretto-8-aarch64-linux-jdk.deb
$ sudo dpkg -i amazon-corretto-8-aarch64-linux-jdk.deb

バージョン確認します。私の環境では以下のようになりました。

$ java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment Corretto-8.275.01.1 (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM Corretto-8.275.01.1 (build 25.275-b01, mixed mode)

AWS IoT Greengrass V2 インストーラをダウンロード

インストーラをダウンロードします。

$ curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
$ unzip greengrass-nucleus-latest.zip -d GreengrassCore && rm greengrass-nucleus-latest.zip

認証情報の登録

IAMの認証情報を環境変数へ設定する必要があります。この認証情報を使用してインストーラがAWS側の処理を実行するようです。必要な最小のIAMポリシーについては以下に記載があります。

https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html#provision-minimal-iam-policy

今回は上記のポリシーのついたIAMロールを作成して、一時認証情報を使用します。そして一時認証情報取得のためにCloudShellからCLIを実行しました。こういうときのためにCloudShellってあるのでしょう。

#CloudShellで実行
$ aws sts assume-role --role-arn arn:aws:iam::{アカウントID}:role/{ロール名} --role-session-name "RoleSession01"

上記で取得した AccessKeyId , SecretAccessKey , SessionToken をラズパイに環境変数として設定。

# ラズパイで実行。各環境の値に読み替えて実行してください。
$ export AWS_ACCESS_KEY_ID=AKIA***********
$ export AWS_SECRET_ACCESS_KEY=hogehoge******************
$ export AWS_SESSION_TOKEN=AQoD*******************

インストーラを実行。

インストーラを実行。以下のコマンドはマネコンで自動で生成されるので、各々の環境のものを使用してください。こちらのインストーラを実行するとOSユーザ・グループの作成や証明書のダウンロードなどを自動でやってくれます(たしかv1では手動だったはず...)。 --deploy-dev-tools true のオプションを指定していますが、このオプションでGreengrass CLIがインストールされます。これは、今回は検証用途のためです。本番環境では false としましょう。

$ sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE -jar ./GreengrassCore/lib/Greengrass.jar --aws-region us-east-1 --thing-name my-raspi-gg-core --thing-group-name my-raspi-gg-group --component-default-user ggc_user:ggc_group --provision true --setup-system-service true --deploy-dev-tools true

正常に完了すると以下のメッセージが表示されます。

Successfully configured Nucleus with provisioned resource details!
Creating a deployment for Greengrass first party components to the thing group
Configured Nucleus to deploy aws.greengrass.Cli component
Successfully set up Nucleus as a system service

3. 確認

インストーラの実行が完了するとマネコンに作成されたコアデバイスが表示されます。

f:id:swx-mine:20210108124419p:plain

ラズパイ側でGreengrass コアソフトウェアが動いているかも確認します。ついでに自動起動設定も。

$ sudo systemctl status greengrass
$ sudo systemctl enable greengrass

今回はGreengrass CLIをインストールしているので、以下を実行するとヘルプが表示され、正常にインストールされていることがわかります。

$ /greengrass/v2/bin/greengrass-cli help

まとめ

AWS IoT Greengrass 2.0?v2?になったことでセットアップも非常に簡単で手間なく実行できるようになりました。今回は導入までですが、次のブログでは実際に利用して検証していきたいと思います。

re:inventへ参加しよう

1月中もre:invent 2020は続きます!ぜひ参加してAWSの最新情報をキャッチアップしましょう!!!!!!!!

aws.amazon.com

Yusuke Mine(書いた記事を見る)

I get drunk but it's not enough 'Cause the morning comes and you're not my baby.