ゴールは
Ubuntu server 16.04 (x86_64) に AWS Greengrass Core 1.3.0 をセットアップする方法です
最短ゴールだと python 2.7 のみが稼働します。
インストールしたあと、ローカル Lambda の開発環境で必要なログについても記載しています
セットアップ手順
早ければ15分程度です
Ubuntu server のインストール
インストールはサクサクすすめていただいてOKです。インストールパッケージのオプションは下記二つを選びました
- standard system utilities
- openssh server
Ubuntu インストール後
$ sudo apt update ; sudo apt -y upgrade
$ sudo apt install -y sqlite3 python2.7
$ sudo adduser --system ggc_user
$ sudo groupadd --system ggc_group
$ cat << EOT | sudo tee -a /etc/sysctl.d/00-defaults.conf
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
EOT
$ sudo shutdown -r now
動作環境のチェック方法
※この手順はスキップしてもOKです
他のデバイスでの手順通りです
$ git clone https://github.com/aws-samples/aws-greengrass-samples.git
$ cd aws-greengrass-samples/greengrass-dependency-checker-GGCv1.3.0
$ sudo ./check_ggc_dependencies
AWS から Greengrass Core のダウンロード、展開、実行
AWS IoT での AWS Greengrass の設定から先に進んでください
ダウンロード
途中で Greengrass Core のアーカイブをダウンロードする場面にあたりますが、その際は x86_64_Ubuntu を選んでください。すると greengrass-ubuntu-x86-64-1.3.0.tar.gz
がダウンロードできます
tar.gz の展開
greengrass-ubuntu-x86-64-1.3.0.tar.gz
と ${GUID}-setup.tar.gz
を Ubuntu server に転送してから、下記を実行します
$ sudo tar -xzvf greengrass-ubuntu-x86-64-1.3.0.tar.gz -C /
$ sudo tar -xzvf ${GUID}-setup.tar.gz -C /greengrass
$ sudo wget -O /greengrass/certs/root.ca.pem http://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem
※config.json
は ${GUID}-setup.tar.gz
に含まれているので、自分で作る必要はありません
起動
$ cd /greengrass/ggc/packages/1.3.0
$ sudo ./greengrassd start
Greengrass の運用について
- OSを再起動しても
greengrassd
は自動起動しません。 systemd あたりの設定が必要です- Armadillo-X1, Armadillo-IoT G3/G3LにAWS Greengrass Coreをインストールする に Unit ファイルの書き方が書いてあります
- Greengrass グループのログ設定をしたほうがいいです
-
logging.warning()
なら設定なしでとりあえず出力されます
-
Greengrass グループのログ設定と出力先
- Greengrass グループ > 設定
- ローカルログ設定
- ユーザの Lambda ログ: トレースログ
- Greengrass システムログ: 情報ログ
- ローカルログ設定
ログの出力先は Ubuntu server 上の
/greengrass/ggc/var/log/user/{AWS-region}/{AWS-account-id}/{Lambda-name}.log
/greengrass/gcc/var/log/system/*.log
になります (root権限必要)
この設定はデプロイ時に適用されます
Lambda 関数 (Python 2.7) からは logging.info("log!!")
のようにすれば、上記ログファイルに書き込まれます。
※log levelが warning 以上なら、ローカルログ設定がされていなくてもログ出力されます
Greengrass 上で動いている「存続期間の長い Lambda 関数」をともかく止めたい
AWS Greengrass では、 Arduino の loop()
のように、 Greengrass Core の起動後から動きつづける Lambda 関数を作ることができるようになりました
これを止める方法は、下記のどちらかです (他にあるのかな?)
- Greengrass が動いている Ubuntu server を停止しちゃう
- これは物理アクセスができる、OSレベルでリモートアクセスできる場合
- AWS Greengrass の管理コンソールから デプロイのリセット をしましょう (強制フラグもつけると確実性が高まります)
Node.js 6.10 で動かす (WIP)
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ apt install -y nodejs
$ sudo update-alternatives --install /usr/bin/nodejs6.10 node /usr/bin/node 10
あとがき
ごきげんよう。
EoT