Greengrass V1のトラブルシュートログです。ググっても情報全く出なかったので書いておきます。
事象
Greengrassの設定で以下のようにログをCloudWatch Logsに飛ばすように設定しているのですが、一部のデバイスからログが飛んでいないことに気付きました。
調査
以下のログに原因らしきものを見つけました。
sudo tail -f /greengrass/ggc/var/log/system/localwatch/localwatch.log
メッセージを読んでみるとIAMロールが上手くAssumeできてないようです。
[2022-05-25T15:00:42.882+01:00][WARN]-TES responded with status code: 403 and body: {
"Message" : "Not authorized to perform assume role"
}
[2022-05-25T15:00:42.882+01:00][WARN]-failed to send to AWS Cloudwatch {"errorString": "UnknownErrorOccurred: unable to deal with the exception, logGroupName: /aws/greengrass/Lambda/ap-northeast-1/123456789012/function, logStreamName:2022/05/25/xxxxxx, requestId: [437eb142-c933-4000-7847-980e043f24c5], error: TES responded with status code: 403 and body: {\n "Message" : "Not authorized to perform assume role"\n}, retry count: 0\ncaused by: TES responded with status code: 403 and body: {\n "Message" : "Not authorized to perform assume role"\n}"}
対応
サービスロール確認
そもそもGreengrassのサービスロールが作成されていることを以下を参考に確認します。通常サービスロールは Greengrass_ServiceRole
という名前です。
上記のエラーについてはサービスロールを確認するように公式にも書いてあります。
サービスロールは存在するがAssumeできてない
この場合は以下の対応で私の場合は上手くいきました。
- Greengrassグループのロール設定を削除してデプロイ
- Greengrass_ServiceRoleを再度設定してデプロイ
デプロイ後に上記の localwatch.log
ログを見ていると、CloudWatch Logグループを作成する処理が流れるのが確認できます。