[AWS] Greengrass v2コアデバイスをセットアップしたけど表示されない時のトラブル解決
メモ用です。
https://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/getting-started.html
このガイドに従ってセットアップし、「コアデバイスを表示」を押しても、コンソールの「Greengrass コアデバイス」一覧でコアデバイスが表示されない問題が生じました。コアデバイスを表示させる為に試した方法をいくつか記録します。
コアデバイスにインストールするべきソフトが正常か確認
デバイスのシェルコマンドにコマンドを打ち込みます
AWS CLIのバージョン確認
aws --version
JAVAランタイム
java -version
AWS IoT Greengrass Core ソフトウェアのバージョン確認
java -jar ./GreengrassInstaller/lib/Greengrass.jar –version
Greengrassのソフトウェアを実行するコマンド(実行中は中断しないように専用の新しいコマンドプロンプト画面を開てから打ち込む)
sudo /greengrass/v2/alts/current/distro/bin/loader
Greengrass CLIデプロイステータス確認コマンド
aws greengrassv2 list-effective-deployments --core-device-thing-name コアデバイスの名前
Greengrass CLIインストール及び実行しているかの確認
/greengrass/v2/bin/greengrass-cli help
参考:
https://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/quick-installation.html 自動プロビジョニングのガイド。別タブの「手動プロビジョニング」も参考に成りました。
アクセスキーとシークレットキーを設定し直してみる
まず確認コマンドを入力
aws configure list
エラーメッセージ: The security token included in the request is invalid. が出力される場合がある、その時は
aws configure
でアクセスキーとシークレットキーとリージョン(例: us-east-2とかap-northeast-1みたいなやつ)とデフォルトタイプ(例: json)をを順に再設定する。
初めのマニュアルに沿ってセットアップしている時はセッショントークンを求められているが、所持していないのでセッショントークンを無視して、アクセスキーとシークレットキーだけを入力しました。
Greengrassソフトウェアをシステムサービスとして設定する
Greengrass Nucleusというコンポーネントを常にデバイスで起動させていなければなりません。それらの自動起動設定が失敗しているかもしれないので、後から手動で設定します。
sudo systemctl enable greengrass.service
sudo systemctl start greengrass.service
ポリシーの編集
CloudWatchによるログのインサイト(AWSlotLogsV2←デフォルトでは表示されないから別途ドキュメントを見てアクティブにしないといけない。追加料金かかるかも)を確認してみて、Authoration Faliureであったら、ポリシーに不備がある場合が多い。
検索クエリの例:
fields @timestamp,@message,@logStream,@log
| sort @timestamp desc
| filter clientId= " コアデバイスの名前 "
| limit 100
下記リンクのドキュメントを見ながらポシリーを作成し、モノ(コアデバイスにするべきモノ)にアタッチする。https://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/manual-installation.html#create-thing-certificate
或いは、Greengrass v1の最低限のポリシーでも良い。
https://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/provision-core.html
コアデバイスがセットアップ後表示されない問題を解消するために、後からポリシーを編集してアタッチする必要が出てきました。そのためにも最初のセットアップでは、AWS IoT Core→Greengrassタブ→コアデバイスを作成するで直接デバイスを新規作成するのではなく、先にすべてのデバイス→モノ(things)でデバイスを新規登録し、その後からコアデバイスセットアップで既存のモノをコアデバイスとしてセットアップした方が良いと思いました。
例として、このようにポリシーのjsonを編集したら上手く行きました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Subscribe",
"iot:Connect",
"iot:Receive"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"iot:GetThingShadow",
"iot:UpdateThingShadow",
"iot:DeleteThingShadow"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"greengrass:*"
],
"Resource": [
"*"
]
}
]
}
困ったら他にも公式ドキュメントを見る。
結論: 大抵はポリシーのせい。