見出し画像

[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

参考https://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/configure-greengrass-core-v2.html#configure-system-service-linux 


ポリシーの編集

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": [
        "*"
      ]
    }
  ]
}

困ったら他にも公式ドキュメントを見る。


結論: 大抵はポリシーのせい。




この記事が気に入ったらサポートをしてみませんか?