メニュー
AWS Greengrass
開発者ガイド

AWS Greengrass アプリケーションのトラブルシューティング

一般的な問題

症状 ソリューション

デプロイに関する 403 Forbidden エラーがログに表示される。

クラウドの AWS Greengrass コア のポリシーに、許可されたアクションとして「greengrass:*」が含まれていることを確認します。

デバイスのシャドウがクラウドと同期していない。

AWS Greengrass コア に「iot:UpdateThingShadow」アクションと「iot:GetThingShadow」アクションのアクセス許可があることを確認します。

また、「シャドウ同期タイムアウト問題のトラブルシューティング」も参照してください。

ユーザーの名前空間が有効になっていないために AWS Greengrass コア ソフトウェアが Raspberry Pi で実行されない。

rpi-update を実行して更新します。Raspbian からリリースされた新しいカーネル 4.9 では、ユーザーの名前空間が有効になっています。

create-deployment の初回実行時に ConcurrentDeployment エラーが発生する。

デプロイが進行中である可能性があります。get-deployment-history を実行してデプロイが作成済みかどうかを確認できます。作成済みでない場合は、デプロイを作成し直します。

AWS Greengrass コア ソフトウェアが正常に起動しない。

  • アーキテクチャに適したバイナリを使用していることを確認します。

  • AWS Greengrass コア デバイスにローカルストレージがあることを確認します。

    詳細については、「ログでのトラブルシューティング」を参照してください。

greengrassd スクリプトに「unable to accept TCP connection. accept tcp [::]:8000: accept4: too many open files」と表示される。

AWS Greengrass コア ソフトウェアのファイル記述子の制限がしきい値に達しているため、制限を引き上げる必要があります。

次のコマンドを使用します。

ulimit -n 2048

次に AWS Greengrass コア ソフトウェアを再起動します。

注記

この例では、制限を 2048 に引き上げています。ユースケースに適した値を選択してください。

デプロイに失敗し、次のエラーメッセージが表示されます。Greengrass is not authorized to assume the Service Role associated with this account. AWS CLI を使用して、適切なサービスロールが AssociateServiceRoleToAccount によりアカウントに関連付けられ、そのアカウントに少なくとも AWSGreengrassResourceAccessRolePolicy アクセス権限があることを確認します。

ログでのトラブルシューティング

GGC v1.3.0GGC v1.1.0GGC v1.0.0
GGC v1.3.0

ログの保存先としてローカルファイルシステムを設定している場合は、次の場所を探します。

GREENGRASS_ROOT/ggc/var/log/crash.log

AWS Greengrass コア のクラッシュ時に生成されたメッセージを示します。

GREENGRASS_ROOT/ggc/var/log/system/runtime.log

失敗したコンポーネントに関するメッセージを示します。

GREENGRASS_ROOT/ggc/var/log/system/

このフォルダには、AWS Greengrass システムの Lambda 関数からのすべてのログが入ります。ggc/var/log/system/ggc/var/log/system/runtime.log のメッセージを使用して、AWS Greengrass システムの Lambda 関数で発生したエラーを確認できます。

注記

デフォルトでは、GREENGRASS_ROOT/greengrass ディレクトリです。

ログの保存先としてクラウドを設定している場合は、CloudWatch Logs を使用してログメッセージを確認します。クラッシュログは、まだ AWS Greengrass コア デバイスにあります。

システムの Lambda 関数から AWS IoT に接続しようとして、接続エラーが発生する場合は、CloudWatch の AWS IoT ログで詳細を確認します。

注記

AWS IoT のログの書き込み先として CloudWatch を設定する必要があります。

GGC v1.1.0

ログの保存先としてローカルファイルシステムを設定している場合は、次の場所を探します。

GREENGRASS_ROOT/ggc/var/log/crash.log

AWS Greengrass コア のクラッシュ時に生成されたメッセージを示します。

GREENGRASS_ROOT/ggc/var/log/system/runtime.log

失敗したコンポーネントに関するメッセージを示します。

GREENGRASS_ROOT/ggc/var/log/system/

このフォルダには、AWS Greengrass システムの Lambda 関数からのすべてのログが入ります。ggc/var/log/system/ggc/var/log/system/runtime.log のメッセージを使用して、AWS Greengrass システムの Lambda 関数で発生したエラーを確認できます。

注記

デフォルトでは、GREENGRASS_ROOT/greengrass ディレクトリです。

ログの保存先としてクラウドを設定している場合は、CloudWatch Logs を使用してログメッセージを確認します。クラッシュログは、まだ AWS Greengrass コア デバイスにあります。

システムの Lambda 関数から AWS IoT に接続しようとして、接続エラーが発生する場合は、CloudWatch の AWS IoT ログで詳細を確認します。

注記

AWS IoT のログの書き込み先として CloudWatch を設定する必要があります。

GGC v1.0.0

ログの保存先としてローカルファイルシステムを設定している場合は、次の場所を探します。

GREENGRASS_ROOT/crash.log

AWS Greengrass コア のクラッシュ時に生成されたメッセージを示します。

GREENGRASS_ROOT/var/log/system/runtime.log

失敗したコンポーネントに関するメッセージを示します。

GREENGRASS_ROOT/var/log/system/

このフォルダには、AWS Greengrass システムの Lambda 関数からのすべてのログが入ります。var/log/system/var/log/system/runtime.log のメッセージを使用して、AWS Greengrass システムの Lambda 関数で発生したエラーを確認できます。

注記

デフォルトでは、GREENGRASS_ROOT/greengrass ディレクトリです。

ログの保存先としてクラウドを設定している場合は、CloudWatch Logs を使用してログメッセージを確認します。クラッシュログは、まだ AWS Greengrass コア デバイスにあります。

システムの Lambda 関数から AWS IoT に接続しようとして、接続エラーが発生する場合は、CloudWatch の AWS IoT ログで詳細を確認します。

注記

AWS IoT のログの書き込み先として CloudWatch を設定する必要があります。

ストレージ問題のトラブルシューティング

ローカルファイルストレージがいっぱいになると、一部のコンポーネントが正常に動作しなくなる場合があります。

  • ローカルシャドウが更新されなくなります。

  • 新しい AWS Greengrass コア MQTT サーバー証明書がローカルにダウンロードできなくなります。

  • デプロイが失敗します。

ローカルで使用可能な空き領域のサイズを常に把握しておく必要があります。サイズの計算は、デプロイした Lambda 関数のサイズ、ログ記録の設定 (ログでのトラブルシューティングを参照)、およびローカルに保存されているシャドウ数に基づいて行います。

メッセージのトラブルシューティング

AWS Greengrass 内で送信されるすべてのメッセージは、QoS 0 で送信されます。AWS Greengrass コア を再起動すると、未処理のメッセージは失われます。したがって、AWS Greengrass コア の再起動はサービスの中断が最も少ないときに行います。AWS Greengrass コア はデプロイ時にも再起動されます。

シャドウ同期タイムアウト問題のトラブルシューティング

GGC v1.3.0GGC v1.1.0GGC v1.0.0
GGC v1.3.0

Greengrass コアデバイスとクラウド間の通信に大幅な遅延がある場合には、シャドウ同期がタイムアウトにより失敗することがあります。ログファイルには次のように表示されることがあります。

[2017-07-20T10:01:58.006Z][ERROR]-cloud_shadow_client.go:57,Cloud shadow client error: unable to get cloud shadow what_the_thing_is_named for synchronization. Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers) [2017-07-20T10:01:58.006Z][WARN]-sync_manager.go:263,Failed to get cloud copy: Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers) [2017-07-20T10:01:58.006Z][ERROR]-sync_manager.go:375,Failed to execute sync operation {what_the_thing_is_named VersionDiscontinued []}"

解決方法としては、Greengrass コアデバイスがホストレスポンスを待機する時間数を設定します。GREENGRASS_ROOT/config/config.json ファイルを開き、system.shadowSyncTimeout フィールドを秒単位のタイムアウト値で追加します。(例:

{ "coreThing": { "caPath": "root-ca.pem", "certPath": "cloud.pem.crt", "keyPath": "cloud.pem.key", "thingArn": "arn:aws:iot:us-west-2:049039099382:thing/GGTestGroup42_Core", "iotHost": "your-AWS-IoT-endpoint", "ggHost": "greengrass.iot.us-west-2.amazonaws.com", "keepAlive": 600 }, "runtime": { "cgroup": { "useSystemd": "yes" } } "system": { "shadowSyncTimeout": 10 } }

shadowSyncTimeout 値が config.json ファイルで指定されていない場合、デフォルトでは 1 秒間となります。

GGC v1.1.0

Greengrass コアデバイスとクラウド間の通信に大幅な遅延がある場合には、シャドウ同期がタイムアウトにより失敗することがあります。ログファイルには次のように表示されることがあります。

[2017-07-20T10:01:58.006Z][ERROR]-cloud_shadow_client.go:57,Cloud shadow client error: unable to get cloud shadow what_the_thing_is_named for synchronization. Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers) [2017-07-20T10:01:58.006Z][WARN]-sync_manager.go:263,Failed to get cloud copy: Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers) [2017-07-20T10:01:58.006Z][ERROR]-sync_manager.go:375,Failed to execute sync operation {what_the_thing_is_named VersionDiscontinued []}"

解決方法としては、Greengrass コアデバイスがホストレスポンスを待機する時間数を設定します。GREENGRASS_ROOT/config/config.json ファイルを開き、system.shadowSyncTimeout フィールドを秒単位のタイムアウト値で追加します。(例:

{ "coreThing": { "caPath": "root-ca.pem", "certPath": "cloud.pem.crt", "keyPath": "cloud.pem.key", "thingArn": "arn:aws:iot:us-west-2:049039099382:thing/GGTestGroup42_Core", "iotHost": "your-AWS-IoT-endpoint", "ggHost": "greengrass.iot.us-west-2.amazonaws.com", "keepAlive": 600 }, "runtime": { "cgroup": { "useSystemd": "yes" } } "system": { "shadowSyncTimeout": 10 } }

shadowSyncTimeout 値が config.json ファイルで指定されていない場合、デフォルトでは 1 秒間となります。

GGC v1.0.0

サポート外。