【小ネタ】[AWS IoT Greengrass] クイックスタートを使用して、コマンド3行でセットアップする(RaspberryPi)

2020.06.01

1 はじめに

CX事業本部の平内(SIN)です。

AWS IoT Greengrass(以下、Greengrass)では、グループ及び、デバイスの設定を簡単に行うことができるように、クイックスタートが用意されています。
クイックスタート: Greengrass デバイスのセットアップ

今回は、上記の内容そのままなのですが、本当に初めて利用する場合などに、最低限準備するべき事項(手順)などを纏めてみました。利用したデバイスは、RaspbrerryPi Mode4です。

2 準備

最低限、準備するべき事項は、以下のとおりです。

  • RespberryPiの準備
  • 認証情報の準備
  • リージョン決定
  • グループ名の決定

(1) RespberryPiの準備

サポートされているプラットフォームは、2020/06/01現在、Armv7lでは、Raspbian Buster、2019-07-10となっています。他のディストリビューションでも動作可能のようですが、正式にサポートされているディストリビューションの利用が推奨されています。
サポートされているプラットフォームと要件

OSをインストールし、ネットワーク環境をセットアップします。

$ cat /proc/cpuinfo  | grep Revision
Revision    : c03112

$ uname -a
Linux raspberrypi 4.19.57-v7l+ #1244 SMP Thu Jul 4 18:48:07 BST 2019 armv7l GNU/Linux

(2) 認証情報

アクセスキー及びシークレットアクセスキーを準備します。Greengrassの設定や、Lambdaの構築の権限が必要です。 一時的セキュリティ認証情報を利用する場合は、アクセスキー、シークレットアクセスキー、及びセッショントークンの3つになります。 なお、セッショントークンは、パラータ --aws-session-tokenで指定します。

(3) リージョン

Greengrassを構築するリージョンは、デフォルトでus-west-2となります。何処のリージョンで構築するかを決定します。

例)ap-northeast-1

(4) グループ名決定

グループ名を決定します。GreenGrassのグループ名は、設定するリージョンで一意である必要があります。指定しないと、デフォルト値のGreengrassDeviceSetup_Group_guidとなります。

例)My_GG_Group

3 3行セットアップ

セットアップは、以下の3ステップです。パラメータを以下のように設定すれば、特に設定を求められることもありません。

  • スクリプトをダウンロードして起動
  • 再起動
  • スクリプトの再起動
$ wget -q -O ./gg-device-setup-latest.sh https://d1onfpft10uf5o.cloudfront.net/greengrass-device-setup/downloads/gg-device-setup-latest.sh \
&& chmod +x ./gg-device-setup-latest.sh \
&& sudo -E ./gg-device-setup-latest.sh bootstrap-greengrass \
--aws-access-key-id XXXXX \
--aws-secret-access-key XXXXX \
--region ap-northeast-1 \
--group-name My_GG_Group \
--hello-world-lambda \
--verbose
$ sudo reboot
$ sudo -E ./gg-device-setup-latest.sh bootstrap-greengrass \
--aws-access-key-id XXXXX \
--aws-secret-access-key XXXXX

途中、新規インストールを開始するかのプロンプトには、yesを入力します。

最後に、以下のようなログが出力されます。

=======================================================================================

Your device is running the Greengrass core software.
Your Greengrass group and Hello World Lambda function were deployed to the core device.


Setup information:

Device info: Linux-4.19.57-v7l+-armv7l-with-debian-10.0
Greengrass core software location: /
Installed Greengrass core software version: 1.10.1
Greengrass core: arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:thing/GreengrassDeviceSetup_Core_bb905a24-c454-48a1-9031-faa0cb3a0892
Greengrass core IoT certificate: arn:aws:iot:ap-northeast-1:XXXXXXXXXXX:cert/3ed441ab697dd30c0064c625c3f4102ad7960a5f56608e755d9d56bf5716a6a3
Greengrass core IoT certificate location: /greengrass/certs/3ed441ab69.cert.pem
Greengrass core IoT key location: /greengrass/certs/3ed441ab69.private.key
Deployed Greengrass group name: My_GG_Group
Deployed Greengrass group ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Deployed Greengrass group version: arn:aws:greengrass:ap-northeast-1:XXXXXXXXXXX:/greengrass/groups/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/versions/a2c4277c-b18b-436a-a6d8-b6795d178978
Greengrass service role: arn:aws:iam::XXXXXXXXXXX:role/service-role/Greengrass_ServiceRole
GreengrassDeviceSetup log location: GreengrassDeviceSetup-20200531-221745.log
Deployed the HelloWorld Lambda function: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXX:function:Greengrass_HelloWorld_eCr8p:1
Hello-world subscriber topic: hello/world

You can now use the AWS IoT Console to subscribe
to the 'hello/world' topic to receive messages published from your
Greengrass core.
=======================================================================================

4 セットアップ内容

セットアップが成功すると、以下のような環境が構築されます。

  • Greengrassのグループ(My_GG_Group)が追加されています。

  • Lambdaがデプロイされ、グループに追加されています。

  • Lambdaは、存続期間の長い Lambda(OS起動時、Invokeされ、起動し続ける)として設定されています。

  • サプスクリプションは、デバイスから、IoT Core方向でトピックhello/worldが指定されます。

  • デプロイは、すでに完了した状態となります。

  • AWS IoTのテストで、トピックhello/worldをSubscribeすると、デバイス上のLambdaがPublishしているメッセージをモニターする事ができます。

5 自動起動

簡単ですが、greeengrassが、OS起動時に有効になるSystemdの設定要領です。

/etc/systemd/system/greengrass.serviceを作成します。

[Unit]
Description=Greengrass Daemon

[Service]
Type=forking
PIDFile=/var/run/greengrassd.pid
Restart=on-failure
ExecStart=/greengrass/ggc/core/greengrassd start
ExecReload=/greengrass/ggc/core/greengrassd restart
ExecStop=/greengrass/ggc/core/greengrassd stop

[Install]
WantedBy=multi-user.target

サービスの有効化

$ sudo systemctl enable greengrass.service

サービスの起動

$ sudo systemctl start greengrass.service

確認

$ ps aux | grep -E 'greengrass.*daemon'

6 最後に

クイックスタートを利用すると、本当に、簡単にセットアップが完了できます。

少し、冗長となって恐縮ですが、下記への注意があると、まず、詰まらないと思います。

  • グループ名は、リージョンで一意である必要がある
  • Lambdaの名前は、指定できない
  • 認証情報は、パラメータとして使用して保存しない
  • --hello-world-lambdaのパラメータを外せば、Lambdaは構築されない
  • デバイスのセットアップのログは、/tmp/greengrass-device-setup-bootstrap-epoch-timestamp.logを確認する
  • グループまたは、コアの問題は、~/GreengrassDeviceSetup-date-time.logを確認する


参考:AWS IoT Greengrass のトラブルシューティング