AWS IoT Greengrass Coreがaptコマンドからインストール可能になりました

2020.02.27

大阪オフィスの小倉です。
最近AWS IoT Greengrassを始めました。

そのGreengrassですが、本日アップデートがあり、Greengrass Coreをaptコマンドからインストール・アップグレード可能になったとのことなので試してみました。
AWS IoT Greengrass now supports Advanced Package Tool (APT) package management

説明を見ると、

On supported Debian-based Linux distributions....

とのことなので、デバイスに見立てるEC2インスタンスはUbuntuを使用し、 GreengrassチュートリアルのHello World Lambda関数の実行までやってみます。

1. AWS IoT Greengrassの設定

マネジメントコンソールから、ドキュメントの説明に従い、 Greengrassグループの作成と、セキュリティリソースのダウンロードを行います。 このページの最後にある、インストールパッケージのダウンロードとインストールは今回aptコマンドで行うので実行しません。

2. デバイスへのGreengrass Coreの設定

EC2インスタンスの作成

デバイスに見立てるEC2インスタンスは以下で作成しました。

インスタンスID:ami-07f4cb4629342979c(Ubuntu Server 18.04 LTS x86)
インスタンスタイプ:t2.micro

セキュリティグループの設定で、22番と8883番のポートを開けておきます。

Greengrass Coreのインストール

こちらのドキュメントの説明に従い作業します。
今回参照するのは、Install the AWS IoT Greengrass Core Software from an APT Repositoryの項になります。

ユーザ、グループの作成
sudo adduser --system ggc_user
sudo addgroup --system ggc_group
証明書、設定ファイルのセットアップ

事前にダウンロードしたファイルをEC2に転送後、以下の要領で/greengrassディレクトリに展開します。

sudo mkdir -p /greengrass
sudo tar -xzvf *your-hash*-setup.tar.gz -C /greengrass

また、ルートCA証明書もダウンロードしておきます。

cd /greengrass/certs/
sudo wget -O root.ca.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
aptコマンドからのインストール

ようやく本番です。
最初にkeyringパッケージをインストールします。

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
echo "deb https://dnw9lb6lzp2d8.cloudfront.net stable main" | sudo tee /etc/apt/sources.list.d/greengrass.list

パッケージリストのアップデート

sudo apt update

aptコマンドからGreengrass Coreパッケージをインストールします

sudo apt install aws-iot-greengrass-core

これでGreengrass Coreがインストールできたはずです。以下のコマンドで起動&ステータス表示してみます。

systemctl start greengrass.service
systemctl status greengrass.service

● greengrass.service - Greengrass Daemon
   Loaded: loaded (/lib/systemd/system/greengrass.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-02-27 00:15:38 UTC; 9s ago
  Process: 14035 ExecStart=/greengrass/ggc/core/greengrassd start (code=exited, status=0/SUCCESS)
 Main PID: 14049 (5)
    Tasks: 7 (limit: 1152)
   CGroup: /system.slice/greengrass.service
           └─14049 /greengrass/ggc/packages/1.10.0/bin/daemon -core-dir /greengrass/ggc/packages/1.10.0 -greengrassdPi

Feb 27 00:15:36 ip-172-31-38-74 systemd[1]: Starting Greengrass Daemon...
Feb 27 00:15:37 ip-172-31-38-74 greengrassd[14035]: Waiting
Feb 27 00:15:37 ip-172-31-38-74 greengrassd[14035]: Stopped greengrass daemon, exiting with success
Feb 27 00:15:37 ip-172-31-38-74 greengrassd[14035]: Setting up greengrass daemon
Feb 27 00:15:37 ip-172-31-38-74 greengrassd[14035]: Validating hardlink/softlink protection
Feb 27 00:15:37 ip-172-31-38-74 greengrassd[14035]: Waiting for up to 1m10s for Daemon to start
Feb 27 00:15:38 ip-172-31-38-74 greengrassd[14035]: Greengrass successfully started with PID: 14049
Feb 27 00:15:38 ip-172-31-38-74 systemd[1]: Started Greengrass Daemon.

ちゃんと動いてそうですね!

動作確認もしてみましょう。
ドキュメントにあるチュートリアル用Lambda関数をデプロイしてみます。
※デプロイ実行前に、EC2にJavaランタイムとPythonをインストールしておいてください。

sudo apt install openjdk-8-jdk
sudo apt install python3.7-minimal

デプロイ後にhello/worldトピックをサブスクライブすると、デバイスから送られたメッセージが表示されますね。

まとめ

公式ドキュメントのチュートリアルを元に、aptコマンドからのインストールを試してみました。
地味なアップデートではありますが、Greengrassの導入、アップデートにおける選択肢が増えるのはありがたいですね。
この記事がどなたかのお役に立てば幸いです。

以上、大阪オフィスの小倉でした。