はじめに
Amazon SageMaker Edge Managerを検証しようと思いましてAWS IoT Greengrassも併用しようとしたんですが、re:invent 2020の時期にAWS IoT Greengrass 2.0というのが登場しました。2.0なのかv2なのか、どちらが正しいか不明です。
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) と同じ扱いになります。モノのグループにも追加することができます。せっかくなので新規作成して追加します。これらは次の手順のインストーラ実行時に作成されます。
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ポリシーについては以下に記載があります。
今回は上記のポリシーのついた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. 確認
インストーラの実行が完了するとマネコンに作成されたコアデバイスが表示されます。
ラズパイ側で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の最新情報をキャッチアップしましょう!!!!!!!!
Yusuke Mine(書いた記事を見る)
I get drunk but it's not enough 'Cause the morning comes and you're not my baby.