警告メッセージ

Howtoは、Armadilloシリーズを有効に活用するための参考資料です。使用ソフトウェアのバージョンなど諸条件の差異によって、記載内容と実際の動作が異なる場合があります。また、すべての機能検証や長期の動作試験を行ったものではありませんので、必ずご使用目的に適合した検証・試験を行ってください。

Howto : Armadillo-X1, Armadillo-IoT G3/G3LにAWS Greengrass Coreをインストールする

対象製品: Armadillo-IoT G3Armadillo-IoT G3LArmadillo-X1

Armadillo-X1, Armadillo-IoT G3/G3LにAWS Greengrass Coreをインストールする手順を説明します。

AWS Greengrassとは

AWS Greengrassは、Amazon Web Servicesが提供している、クラウドおよび相互に接続されたデバイスでIoT ソリューションを構築するためのソフトウェアとサービスです。

AWS Greengrass

Greengrass CoreというソフトウェアをArmadilloにインストールすることで、Armadillo上でAWS Lambda関数を実行したり、相互に接続されたデバイスの状態を常に同期させ他のデバイスと安全に通信することができます。

Armadillo本体の設定

Linuxカーネルで必要なコンフィグの有効化

Greengrassを使用するために必要なコンフィグを有効にし、Linuxカーネルを再ビルドして、カーネルイメージを書き換えます。有効にするコンフィグは以下の通りです。

  • POSIX_MQUEUE
  • POSIX_MQUEUE_SYSCTL
  • CGROUP_FREEZER
  • CGROUP_DEVICE
  • RESOURCE_COUNTERS
  • MEMCG
  • MM_OWNER
  • SECCOMP_FILTER
  • SECCOMP
  • DEVPTS_MULTIPLE_INSTANCES

上記のコンフィグを menuconfig で手動で有効にするか、以下のように x1_defconfig に対するパッチをLinuxカーネルソースに適用してください。

[ATDE ~/linux-3.14-x1-at18]$ wget http://download.atmark-techno.com/misc/x1_config_greengrass.patch
[ATDE ~/linux-3.14-x1-at18]$ patch -p1 < x1_config_greengrass.patch
[ATDE ~/linux-3.14-x1-at18]$ make ARCH=arm x1_defconfig
本パッチは、linux-3.14-x1-at18(本記事作成時点)に対応しています。

Linuxカーネルイメージのビルド手順書き換え手順については、製品マニュアルをご覧ください。

ユーザーとグループの追加

Greengrass Coreを実行するために必要なユーザーとグループを追加します。

[armadillo ~]# adduser --system ggc_user
[armadillo ~]# addgroup --system ggc_group

必要なdebianパッケージのインストール

Greengrass Coreを実行するために、sqlite3 をインストールする必要があります。

[armadillo ~]# apt-get update
[armadillo ~]# apt-get install sqlite3

また、デプロイして実行させるLambda関数に合ったランタイムをインストールする必要があります。 この記事では例として、Python2.7で記述したLambda関数を実行させるためパッケージをインストールします。

[armadillo ~]# apt-get install python2.7

ハードリンク/ソフトリンクの保護

Greengrass Coreでは、起動時にハードリンク/ソフトリンクの保護が有効かどうかを確認します。デバイスのセキュリティを向上させるために、この保護を有効にします。 /etc/sysctl.d/local.conf を作成し、以下のように記述します。

fs.protected_hardlinks = 1
fs.protected_symlinks = 1

その後、再起動してください。

[armadillo ~]# reboot

Greengrass Coreのインストール

Greengrass Coreパッケージの展開

AWS Greengrass 配布可能パッケージから、 Greengrass Coreパッケージをダウンロードしてください。使用するのは linux-armv7l 版です。

ダウンロードしたら、Armadilloのルートファイルシステムに展開します。

[armadillo ~]# tar xvzf greengrass-linux-armv7l-1.1.0.tar.gz -C /
本記事作成時点で、Greengrass Coreパッケージの最新バージョンは v1.1.0 です。また、Greengrass CoreパッケージはAWS IoTコンソールにログインしていないとダウンロードできません。

各証明書のコピー

/greengrass/certs ディレクトリに、各証明書をコピーします。

  • AWS IoT ルートCA 証明書
  • AWS Greengrass コア 証明書
  • AWS Greengrass コア プライベートキー

各証明書は、Greengrass グループ作成時にダウンロードすることができます。詳しくはAWS Greengrass チュートリアルをご覧ください。

Greengrass Coreの設定

/greengrass/config/config.json を編集し、Greengrass Coreの設定をします。

{
   "coreThing": {
       "caPath": "[ROOT_CA_PEM_HERE]",
       "certPath": "[CLOUD_PEM_CRT_HERE]",
       "keyPath": "[CLOUD_PEM_KEY_HERE]",
       "thingArn": "[THING_ARN_HERE]",
       "iotHost": "[HOST_PREFIX_HERE].iot.[AWS_REGION_HERE].amazonaws.com",
       "ggHost": "greengrass.iot.[AWS_REGION_HERE].amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes"
       }
   }
}
フィールド 説明
caPath AWS IoT ルートCA 証明書へのパス (/greengrass/certs ディレクトリを基準とした相対パス)。
certPath AWS Greengrass コア 証明書へのパス (/greengrass/certs ディレクトリを基準とした相対パス)。
keyPath AWS Greengrass コア プライベートキーへのパス (/greengrass/certs ディレクトリを基準とした相対パス)。
thingArn AWS Greengrass コア を表す識別子(ARN)。
iotHost AWS IoT エンドポイント。AWS IoT コンソールの [Settings] セクションを使用して取得できます。
ggHost AWS Greengrass エンドポイント。
keepAlive MQTT KeepAlive 期間 (秒単位)。デフォルト値は 600 秒 (10 分) 。
useSystemd systemd を使用して cgroup を管理します。Armadillo-X1, Armadillo-IoT G3/G3L は標準で systemd を使用しているので、yesに設定してください。

これで、Greengrass Coreのインストールが完了しました。

Greengrass Coreの起動

手動で起動する

以下のコマンドで、Greengrass Coreが起動します。

[armadillo ~]# /greengrass/ggc/core/greengrassd start
Setting up greengrass daemon
Validating execution environment
Found cgroup subsystem: memory
Found cgroup subsystem: devices
Found cgroup subsystem: freezer
Found cgroup subsystem: net_cls

Starting greengrass daemon
Greengrass successfully started with PID: 8614

systemdで自動起動する

Greengrass Coreをsystemdで自動起動したい場合は、/etc/systemd/system/greengrass.service のようなUnitファイルを作成し、以下のように記述してください。

[Unit]
Description = AWS Greengrass Core daemon

[Service]
ExecStart = /greengrass/ggc/core/greengrassd start
ExecStop = /greengrass/ggc/core/greengrassd stop
Restart = always
Type = forking

[Install]
WantedBy = multi-user.target

systemctlコマンドで、Unitの自動起動を有効にします。次回起動時から、Greengrass Coreが自動起動します。

[armadillo ~]# systemctl enable greengrass
Created symlink from /etc/systemd/system/multi-user.target.wants/greengrass.service to /etc/systemd/system/greengrass.service.

Greengrass グループの作成手順や各証明書の取得方法、Lambda関数のデプロイ方法など、AWS Greengrassの詳しい使い方についてはAWS Greengrass チュートリアルをご覧ください。