AWS IoT Greengrass V2 のトラブルシューティング - AWS IoT Greengrass

AWS IoT Greengrass V2 のトラブルシューティング

このセクションのトラブルシューティング情報と解決策を使用して、AWS IoT Greengrass Version 2 の問題を解決してください。

AWS IoT Greengrass Core ソフトウェアとコンポーネントのログを表示する

AWS IoT Greengrass Core ソフトウェアは、コアデバイスに関するリアルタイム情報を表示するために使用できるローカルファイルシステムにログを書き込みます。CloudWatch Logs にログを書き込むようにコアデバイスを設定することもできるため、コアデバイスのトラブルシューティングをリモートで行うことができます。これらのログは、コンポーネント、デプロイ、およびコアデバイスの問題を特定するのに役立ちます。詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。

AWS IoT Greengrass Core ソフトウェアの問題

AWS IoT Greengrass Core ソフトウェアの問題のトラブルシューティングを行います。

トピック

コアデバイスをセットアップできない

AWS IoT Greengrass Core ソフトウェアインストーラが失敗し、コアデバイスをセットアップできない場合は、ソフトウェアをアンインストールして再試行する必要がある場合があります。詳細については、「AWS IoT Greengrass Core ソフトウェアをアンインストールする」を参照してください。

AWS IoT Greengrass Core ソフトウェアをシステムサービスとして起動できない

AWS IoT Greengrass Core ソフトウェアが起動しない場合、システムサービスログを確認して問題を特定します。よくある問題の 1 つは、Java が PATH 環境変数 (Linux) または PATH システム変数 (Windows) で使用できない場合です。

nucleus をシステムサービスとしてセットアップできない

AWS IoT Greengrass Core ソフトウェアインストーラが AWS IoT Greengrass をシステムサービスとしてセットアップできない場合、このエラーが表示されることがあります。Linux デバイスでは、このエラーは通常、コアデバイスにsystemdinit システムがない場合に発生します。システムサービスのセットアップに失敗した場合でも、インストーラが AWS IoT Greengrass Core ソフトウェアを正常にセットアップできます。

次のいずれかを行います。

  • AWS IoT Greengrass Core ソフトウェアをシステムサービスとして設定して実行します。AWS IoT Greengrass のすべての機能を使用するには、ソフトウェアをシステムサービスとして設定する必要があります。systemd をインストール、または別の init システムを使用できます。詳細については、「Greengrass nucleus をシステムサービスとして設定する」を参照してください。

  • システムサービスを使用せずに AWS IoT Greengrass Core ソフトウェアを実行します。インストーラが Greengrass ルートフォルダでセットアップしたローダースクリプトを使用して、ソフトウェアを実行できます。詳細については、「システムサービスを使用せずに AWS IoT Greengrass Core ソフトウェアを実行します。」を参照してください。

AWS IoT Core に接続できない

例えば、AWS IoT Greengrass Core ソフトウェアが AWS IoT Core に接続してデプロイジョブを取得できない場合に、このエラーが表示されることがあります。以下の操作を実行します。

  • コアデバイスが、インターネットと AWS IoT Core に接続できることを確認します。デバイスが接続する AWS IoT Core エンドポイントの詳細については、「AWS IoT Greengrass Core ソフトウェアを設定する」を参照してください。

  • コアデバイスの AWS IoT のモノが、iot:Connectiot:Publishiot:Receiveiot:Subscribe のアクセス許可を付与する証明書を使用していることを確認してください。

  • コアデバイスが [network proxy] (ネットワークプロキシ)を使用している場合、コアデバイスに [device role] (デバイスロール)があり、そのロールで iot:Connectiot:Publishiot:Receiveiot:Subscribe のアクセス許可が付与されていることを確認してください。

メモリ不足エラー

このエラーは通常、デバイスに Java ヒープにオブジェクトを割り当てるだけの十分なメモリがない場合に発生します。メモリが制限されたデバイスでは、メモリ割り当てを制御するために最大ヒープサイズを指定する必要がある場合があります。詳細については、「JVM オプションでメモリ割り当てを制御する」を参照してください。

Greengrass CLI をインストールできない

AWS IoT Greengrass Core のインストールコマンドで --deploy-dev-tools 引数を使用すると、次のコンソールメッセージが表示される場合があります。

Thing group exists, it could have existing deployment and devices, hence NOT creating deployment for Greengrass first party dev tools, please manually create a deployment if you wish to

これは、コアデバイスが既存のデプロイを持つモノのグループのメンバーであるため、Greengrass CLI コンポーネントがインストールされていない場合に発生します。このメッセージが表示された場合は、Greengrass CLI コンポーネント (aws.greengrass.Cli) をデバイスに手動でデプロイして、Greengrass CLI をインストールできます。詳細については、「Greengrass CLI のインストール」を参照してください。

User root is not allowed to execute

このエラーは、AWS IoT Greengrass Core ソフトウェアを実行するユーザー (通常は root) が、任意のユーザーと任意のグループで sudo を実行する権限を持っていない場合に表示されることがあります。デフォルトの ggc_user システムユーザーの場合、このエラーは次のようになります。

Sorry, user root is not allowed to execute <command> as ggc_user:ggc_group.

/etc/sudoers ファイルで、他のグループとして sudo を実行する権限がユーザーに与えられていることを確認してください。/etc/sudoers のユーザーの権限は、次の例のようになります。

root ALL=(ALL:ALL) ALL

com.aws.greengrass.lifecyclemanager.GenericExternalService: Could not determine user/group to run with

このエラーは、コアデバイスがコンポーネントを実行しようとしたときに、Greengrass nucleus でコンポーネントの実行に使用するデフォルトのシステムユーザーが指定されていない場合に表示されることがあります。

この問題を解決するには、コンポーネントを実行するデフォルトのシステムユーザーを指定するように Greengrass nucleus を設定します。詳細については、コンポーネントを実行するユーザーを設定するおよびデフォルトのコンポーネントユーザーを設定するを参照してください。

Failed to map segment from shared object: operation not permitted

このエラーは、/tmp フォルダが noexec アクセス許可でマウントされているために、AWS IoT Greengrass Core ソフトウェアの起動に失敗した場合に表示されることがあります。AWS Common Runtime (CRT) ライブラリでは、デフォルトで /tmp フォルダを使用します。

次のいずれかを行います。

  • 次のコマンドを実行して、exec アクセス許可で /tmp フォルダを再マウントし、再試行します。

    sudo mount -o remount,exec /tmp
  • Greengrass nucleus v2.5.0 以降を実行している場合、JVM オプションを設定して、AWS CRT ライブラリが使用するフォルダを変更できます。デプロイ時または AWS IoT Greengrass Core ソフトウェアのインストール時に、Greengrass nucleus コンポーネント設定に jvmOptions パラメータを指定できます。/path/to/use を、AWS CRT ライブラリが使用できるフォルダへのパスに置き換えます。

    { "jvmOptions": "-Daws.crt.lib.dir=\"/path/to/use\"" }

Windows サービスのセットアップに失敗しました

Microsoft Windows 2016 デバイスに AWS IoT Greengrass Core ソフトウェアをインストールすると、このエラーが表示されることがあります。AWS IoT Greengrass Core ソフトウェアは Windows 2016 ではサポートされていません。サポートされるオペレーティングシステムのリストについては、「サポートされているプラットフォーム」を参照してください。

Windows 2016 を使用する必要がある場合は、次の操作を実行します。

  1. ダウンロードした AWS IoT Greengrass Core インストールアーカイブを解凍します。

  2. Greengrass ディレクトリで、bin/greengrass.xml.template ファイルを開きます。

  3. </service> タグの直前に、ファイルの末尾に <autoRefresh> タグを追加します。

    </log> <autoRefresh>false</autoRefresh> </service>

com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager

ルート認証機関 (CA) ファイルのない AWS IoT Greengrass Core ソフトウェアをインストールした場合に、このエラーが表示されることがあります。

2022-06-05T10:00:39.556Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: service-loaded. {serviceName=DeploymentService} 2022-06-05T10:00:39.943Z [WARN] (main) com.aws.greengrass.componentmanager.ClientConfigurationUtils: configure-greengrass-mutual-auth. Error during configure greengrass client mutual auth. {} com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager

rootCaPath パラメータがある有効なルート CA ファイルを、インストーラに与える設定ファイルに指定したことを確認します。詳細については、「AWS IoT Greengrass Core ソフトウェアをインストールします。」を参照してください。

com.aws.greengrass.deployment.IotJobsHelper: No connection available during subscribing to Iot Jobs descriptions topic. Will retry in sometime

この警告メッセージは、コアデバイスが AWS IoT Core に接続してデプロイジョブの通知をサブスクライブできない場合に表示されることがあります。以下の操作を実行します。

software.amazon.awssdk.services.iam.model.IamException: The security token included in the request is invalid

自動プロビジョニングを使用して AWS IoT Greengrass Core ソフトウェアをインストールし、インストーラが無効な AWS セッショントークンを使用すると、このエラーが表示される場合があります。以下の操作を実行します。

  • 一時的なセキュリティ認証情報を使用する場合は、セッショントークンが正しいこと、および完全なセッショントークンをコピーして貼り付けていることを確認します。

  • 長期的なセキュリティ認証情報を使用する場合は、以前に一時的な認証情報を使用した時点のセッショントークンがデバイスにないことを確認します。以下の操作を実行します。

    1. 次のコマンドを実行して、セッショントークンの環境変数の設定を解除します。

      Linux or Unix
      unset AWS_SESSION_TOKEN
      Windows Command Prompt (CMD)
      set AWS_SESSION_TOKEN=
      PowerShell
      Remove-Item Env:\AWS_SESSION_TOKEN
    2. AWS 認証情報ファイル ~/.aws/credentials に、セッショントークン aws_session_token が含まれているかどうかを確認します。もしそうなら、ファイルからその行を削除します。

      aws_session_token = AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4Olgk

AWS 認証情報を提供せずに AWS IoT Greengrass Core ソフトウェアをインストールすることもできます。詳細については、「手動リソースプロビジョニングで AWS IoT Greengrass Core ソフトウェアをインストール」または「AWS IoT Greengrass フリートプロビジョニングで AWS IoT Core ソフトウェアをインストールする」を参照してください。

software.amazon.awssdk.services.iot.model.IotException: User: <user> is not authorized to perform: iot:GetPolicy

自動プロビジョニング機能を備えた AWS IoT Greengrass Core ソフトウェアをインストールした場合や、必要なアクセス許可がない AWS 認証情報をインストーラで使用した場合にこのエラーが表示されることがあります。必要なアクセス許可の詳細については、インストーラがリソースをプロビジョニングするための最小限の IAM ポリシー を参照してください。

認証情報の IAM アイデンティティに対するアクセス許可を確認し、不足していれば必要なアクセス許可を IAM アイデンティティに付与します。

Error: com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request

シャドウマネージャーコンポーネントAWS IoT Core と同期するデバイスシャドウに使用した場合に、このエラーが表示されることがあります。HTTP 403 ステータスコードは、このエラーが発生したのは、コアデバイスの AWS IoT ポリシーで GetThingShadow を呼び出すアクセス許可が付与されていないためであることを示しています。

com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request. {thing name=MyGreengrassCore, shadow name=MyShadow} 2021-07-14T21:09:02.456Z [ERROR] (pool-2-thread-109) com.aws.greengrass.shadowmanager.sync.SyncHandler: sync. Skipping sync request. {thing name=MyGreengrassCore, shadow name=MyShadow} com.aws.greengrass.shadowmanager.exception.SkipSyncRequestException: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: f6e713ba-1b01-414c-7b78-5beb3f3ad8f6, Extended Request ID: null)

ローカルシャドウを AWS IoT Core と同期させるには、コアデバイスの AWS IoT ポリシーで次のアクセス許可を付与する必要があります。

  • iot:GetThingShadow

  • iot:UpdateThingShadow

  • iot:DeleteThingShadow

コアデバイスの AWS IoT ポリシーを確認して、不足していれば必要なアクセス許可を追加します。詳細については、次を参照してください:

Operation aws.greengrass#<operation> is not supported by Greengrass

カスタム Greengrass コンポーネントでプロセス間通信 (IPC) 操作を使用し、必要な AWS が提供するコンポーネントがコアデバイスにインストールされていない場合に、このエラーが表示されることがあります。

この問題を解決するには、必要なコンポーネントをコンポーネント recipe の依存関係として追加して、コンポーネントをデプロイするときに必要なコンポーネントが AWS IoT Greengrass Core ソフトウェアにインストールされるようにします。

java.io.FileNotFoundException: <stream-manager-store-root-dir>/stream_manager_metadata_store (Permission denied)

存在しない、または適切なアクセス許可を持たないルートフォルダを使用するようにストリームマネージャーを設定した場合に、ストリームマネージャーログファイル (aws.greengrass.StreamManager.log) にこのエラーが表示されることがあります。このフォルダの設定方法の詳細については、「ストリームマネージャー設定」を参照してください。

com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: Private key or certificate with label <label> does not exist

このエラーは、[hardware security module (HSM)] (ハードウェアセキュリティモジュール (HSM)) を使用するように AWS IoT Greengrass Core ソフトウェアを設定時に指定した秘密キーまたは証明書を、[PKCS#11 provider component] (PKCS#11 プロバイダコンポーネント) が検出またはロードできない場合に発生します。以下の操作を実行します。

  • 使用する AWS IoT Greengrass Core ソフトウェアを設定するスロット、ユーザ PIN、およびオブジェクトラベルを使用して、プライベートキーと証明書が HSM に保存されていることを確認します。

  • プライベートキーと証明書が HSM で同じオブジェクトラベルを使用していることを確認します。

  • HSM がオブジェクト ID をサポートしている場合は、プライベートキーと証明書が HSM で同じオブジェクト ID を使用していることを確認してください。

HSM のセキュリティトークンの詳細を照会する方法については、「HSM のマニュアル」を参照してください。セキュリティトークンのスロット、オブジェクトラベル、またはオブジェクト ID を変更する必要がある場合は、「HSM のマニュアル」を参照して、その方法を確認してください。

software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: User: <user> is not authorized to perform: secretsmanager:GetSecretValue on resource: <arn>

このエラーは、[secret manager component] (シークレットマネージャーコンポーネント) を使用して AWS Secrets Manager シークレットをデプロイするときに発生する可能性があります。コアデバイスの [token exchange IAM role] (トークン交換 IAM ロール) がシークレットを取得するアクセス許可を付与しない場合、デプロイは失敗し、Greengrass のログにこのエラーが含まれます。

コアデバイスにシークレットのダウンロードを許可するには
  1. コアデバイスのトークン交換ロールに secretsmanager:GetSecretValue アクセス許可を追加します。次に示すポリシーステートメントの例では、シークレットの値を取得するための権限を付与しています。

    { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyGreengrassSecret-abcdef" ] }

    詳細については、「コアデバイスが AWS サービスとやり取りできるように承認する」を参照してください。

  2. コアデバイスにデプロイを再適用します。次のいずれかを行います。

    • 変更なしでデプロイを修正します。コアデバイスは、修正されたデプロイを受信すると、シークレットのダウンロードを再試行します。詳細については、「展開の改訂」を参照してください。

    • AWS IoT Greengrass Core ソフトウェアを再起動し、デプロイを再試行します。詳細については、「AWS IoT Greengrass Core ソフトウェアを実行する」を参照してください

    シークレットマネージャーがシークレットを正常にダウンロードすると、デプロイは成功します。

software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: Access to KMS is not allowed

このエラーは、シークレットマネージャーコンポーネントを使用して AWS Key Management Service キーで暗号化された AWS Secrets Manager シークレットをデプロイするときに発生する可能性があります。コアデバイスのトークン交換 IAM ロールでシークレットを暗号化するアクセス許可が付与されない場合、デプロイは失敗し、Greengrass のログにこのエラーが含まれます。

この問題を解決するには、コアデバイスのトークン交換ロールに kms:Decrypt アクセス許可を追加します。詳細については、次を参照してください:

java.lang.NoClassDefFoundError: com/aws/greengrass/security/CryptoKeySpi

ハードウェアセキュリティを備えた AWS IoT Greengrass Core ソフトウェアをインストールしようとした場合に、ハードウェアセキュリティ統合をサポートしていない以前のバージョンの Greengrass nucleus を使用していると、このエラーが表示されることがあります。ハードウェアセキュリティ統合を使用するには、v2.5.3 以降の Greengrass nucleus を使用する必要があります。

com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: CKR_OPERATION_NOT_INITIALIZED

AWS IoT Greengrass Core をシステムサービスとして実行しているときに TPM2 ライブラリを使用すると、このエラーが表示されることがあります。

このエラーは、AWS IoT Greengrass Core systemd サービスファイル内の PKCS#11 ストアの場所を提供する環境変数を追加する必要があることを示しています。

詳細については、PKCS#11 プロバイダ コンポーネントドキュメントの「要件」セクションを参照してください。

Greengrass core device stuck on nucleus v2.12.3

Greengrass コアデバイスが nucleus バージョン 2.12.3 からデプロイを変更しない場合は、Greengrass.jar ファイルをダウンロードして Greengrass nucleus バージョン 2.12.2 に置き換える必要があります。以下の操作を実行します。

  1. Greengrass コアデバイスで、次のコマンドを実行して Greengrass Core ソフトウェアを停止します。

    Linux or Unix
    sudo systemctl stop greengrass
    Windows Command Prompt (CMD)
    sc stop "greengrass"
    PowerShell
    Stop-Service -Name "greengrass"
  2. コアデバイス上で、AWS IoT Greengrass ソフトウェアを greengrass-2.12.2.zip という名前のファイルにダウンロードします。

    Linux or Unix
    curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-2.12.2.zip > greengrass-2.12.2.zip
    Windows Command Prompt (CMD)
    curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-2.12.2.zip > greengrass-2.12.2.zip
    PowerShell
    iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-2.12.2.zip -OutFile greengrass-2.12.2.zip
  3. AWS IoT Greengrass Core ソフトウェアをデバイス上のフォルダに解凍します。GreengrassInstaller を使用するフォルダに置き換えます。

    Linux or Unix
    unzip greengrass-2.12.2.zip -d GreengrassInstaller && rm greengrass-2.12.2.zip
    Windows Command Prompt (CMD)
    mkdir GreengrassInstaller && tar -xf greengrass-2.12.2.zip -C GreengrassInstaller && del greengrass-2.12.2.zip
    PowerShell
    Expand-Archive -Path greengrass-2.12.2.zip -DestinationPath .\\GreengrassInstaller rm greengrass-2.12.2.zip
  4. 次のコマンドを実行して、nucleus バージョン 2.12.3 Greengrass JAR ファイルを nucleus バージョン 2.12.2 Greengrass JAR ファイルで上書きします。

    Linux or Unix
    sudo cp ./GreengrassInstaller/lib/Greengrass.jar /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.3/aws.greengrass.nucleus/lib
    Windows Command Prompt (CMD)
    robocopy ./GreengrassInstaller/lib/Greengrass.jar /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.3/aws.greengrass.nucleus/lib /E
    PowerShell
    cp -Path ./GreengrassInstaller/lib/Greengrass.jar -Destination /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.3/aws.greengrass.nucleus/lib
  5. 次のコマンドを使用して Greengrass Core ソフトウェアを起動します。

    Linux or Unix
    sudo systemctl start greengrass
    Windows Command Prompt (CMD)
    sc start "greengrass"
    PowerShell
    Start-Service -Name "greengrass"

AWS IoT Greengrass クラウドの問題

次の情報を使用して、AWS IoT Greengrass コンソールと API の問題をトラブルシューティングします。各エントリは、アクションを実行したときに表示されるエラーメッセージに対応します。

An error occurred (AccessDeniedException) when calling the CreateComponentVersion operation: User: arn:aws:iam::123456789012:user/<username> is not authorized to perform: null

AWS IoT Greengrass コンソールから、または CreateComponentVersion オペレーションを使用してコンポーネントバージョンを作成すると、このエラーが表示される場合があります。

このエラーは、recipe が有効な JSON または YAML でないことを示しています。recipe の構文を確認し、構文の問題を修正して、もう一度試してください。オンライン JSON または YAML 構文チェッカーを使用して、recipe の構文の問題を特定できます。

Invalid Input: Encountered following errors in Artifacts: {<s3ArtifactUri> = Specified artifact resource cannot be accessed}

AWS IoT Greengrass コンソールから、または CreateComponentVersion オペレーションを使用してコンポーネントバージョンを作成すると、このエラーが表示される場合があります。このエラーは、コンポーネント recipe の S3 アーティファクトが有効でないことを示しています。

以下の操作を実行します。

  • S3 バケットがコンポーネントを作成するのと同じ AWS リージョン にあることを確認します。AWS IoT Greengrass は、コンポーネントアーティファクトのクロスリージョンリクエストをサポートしていません。

  • アーティファクト URI が有効な S3 オブジェクト URL であることを確認し、その S3 オブジェクト URL にアーティファクトが存在することを確認します。

  • AWS アカウント に、S3 オブジェクト URL でアーティファクトにアクセスするアクセス許可があることを確認します。

INACTIVE deployment status

必要な依存 AWS IoT ポリシーなしで ListDeployments API を呼び出すと、INACTIVE デプロイステータスが表示される場合があります。正確なデプロイステータスを取得するには、必要なアクセス許可が必要です。依存アクションを見つけるには、AWS IoT Greengrass V2 で定義されているアクションを確認し、ListDeployments に必要なアクセス許可に従います。必要な依存 AWS IoT アクセス許可がない場合でも、デプロイステータスは表示されますが、INACTIVE のデプロイステータスが不正確である可能性があります。

コアデバイスデプロイの問題

Greengrass コアデバイスでのデプロイの問題のトラブルシューティングを行います。各エントリは、コアデバイスに表示される可能性のあるログメッセージに対応します。

トピック

Error: com.aws.greengrass.componentmanager.exceptions.PackageDownloadException: Failed to download artifact

このエラーは、コアデバイスがデプロイを適用するときに、AWS IoT Greengrass Core ソフトウェアがコンポーネントアーティファクトのダウンロードに失敗した場合に表示されることがあります。このエラーの結果、デプロイは失敗します。

このエラーが発生した場合、ログにはスタックトレースも含まれ、特定の問題を識別するために使用できます。次の各エントリは、Failed to download artifact エラーメッセージのスタックトレースに表示される可能性のあるメッセージに対応しています。

software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 403, Request ID: null, ...)

[PackageDownloadException error] (パッケージダウンロード例外エラー) は、次の場合にこのスタックトレースを含めることができます。

  • コンポーネントのアーティファクトは、コンポーネントの recipe で指定した S3 オブジェクト URL では利用できません。アーティファクトを S3 バケットにアップロードしたこと、アーティファクトの URI がバケット内のアーティファクトの S3 オブジェクト URL と一致していることを確認します。

  • コアデバイスのトークン交換ロールでは、AWS IoT GreengrassCore ソフトウェアがコンポーネントの recipe で指定した S3 オブジェクト URL からコンポーネントアーティファクトをダウンロードすることが許可されていません。トークン交換ロールで、アーティファクトが利用可能な S3 オブジェクト URL の s3:GetObject が許可されていることを確認します。

software.amazon.awssdk.services.s3.model.S3Exception: Access Denied (Service: S3, Status Code: 403, Request ID: <requestID>

コアデバイスに s3:GetBucketLocation を呼び出すアクセス許可がない場合に、PackageDownloadException エラーにこのスタックトレースが含まれることがあります。このエラーメッセージには、次のメッセージも含まれています。

reason: Failed to determine S3 bucket location

コアデバイスのトークン交換ロールで、アーティファクトが利用可能な S3 バケットの s3:GetBucketLocation が許可されていることを確認します。

Error: com.aws.greengrass.componentmanager.exceptions.ArtifactChecksumMismatchException: Integrity check for downloaded artifact failed. Probably due to file corruption.

このエラーは、コアデバイスがデプロイを適用するときに、AWS IoT Greengrass Core ソフトウェアがコンポーネントアーティファクトのダウンロードに失敗した場合に表示されることがあります。ダウンロードしたアーティファクトファイルのチェックサムが、コンポーネントの作成時に AWS IoT Greengrass が計算したチェックサムと一致しないため、デプロイは失敗します。

以下の操作を実行します。

  • アーティファクトファイルが、それをホストする S3 バケット内で変更されたかどうかを確認します。コンポーネントの作成後にファイルが変更されている場合は、コアデバイスが想定している以前のバージョンに復元します。ファイルを以前のバージョンに復元できない場合、または新しいバージョンのファイルを使用する場合は、アーティファクトファイルを使用して新しいバージョンのコンポーネントを作成します。

  • コアデバイスのインターネット接続を確認します。このエラーは、アーティファクトファイルがダウンロード中に破損した場合に発生する可能性があります。新しいデプロイを作成して、もう一度試してください。

Error: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: Failed to negotiate component <name> version with cloud and no local applicable version satisfying requirement <requirements>

このエラーは、コアデバイスで、そのコアデバイスのデプロイの要件を満たすコンポーネントバージョンが見つからない場合に表示されることがあります。コアデバイスは、AWS IoT Greengrass サービス内およびローカルデバイスでコンポーネントをチェックします。エラーメッセージには、各デプロイのターゲットと、そのコンポーネントのデプロイのバージョン要件が含まれます。デプロイターゲットはモノ、モノグループ、または LOCAL_DEPLOYMENT にすることができます。これは、コアデバイスのローカルデプロイを表します。

この問題は、次の状況に発生する可能性があります:

  • コアデバイスは、競合するコンポーネントのバージョン要件を持つ複数のデプロイのターゲットです。例えば、コアデバイスは、com.example.HelloWorld コンポーネントを含む複数のデプロイのターゲットになる場合があり、一方のデプロイにはバージョン 1.0.0 が必要で、もう一方にはバージョン 1.0.1 が必要です。両方の要件を満たすコンポーネントを持つことは不可能であるため、デプロイは失敗します。

  • コンポーネントバージョンは、AWS IoT Greengrass サービスまたはローカルデバイスに存在しません。例えば、コンポーネントが削除された可能性があります。

  • バージョン要件を満たすコンポーネントバージョンが存在しますが、コアデバイスのプラットフォームと互換性はありません。

  • コアデバイスの AWS IoT ポリシーは、greengrass:ResolveComponentCandidates アクセス許可を付与しません。エラーログで Status Code: 403 を検索して、この問題を特定します。この問題を解決するには、コアデバイスの AWS IoT ポリシーに greengrass:ResolveComponentCandidates アクセス許可を追加します。詳細については、「AWS IoT Greengrass V2 コアデバイス向けの最低限の AWS IoT ポリシー」を参照してください。

この問題を解決するには、デプロイを修正して互換性のあるバージョンのコンポーネントを含めるか、互換性のないコンポーネントを削除します。クラウドデプロイを変更する方法の詳細については、「展開の改訂」を参照してください。ローカルデプロイを変更する方法の詳細については、AWS IoT Greengrass CLI デプロイ作成コマンドを参照してください。

software.amazon.awssdk.services.greengrassv2data.model.ResourceNotFoundException: The latest version of Component <componentName> doesn't claim platform <coreDevicePlatform> compatibility

このエラーは、コンポーネントをコアデバイスにデプロイした場合に、コアデバイスのプラットフォームと互換性のあるプラットフォームがコンポーネントにリストされていないと表示されることがあります。次のいずれかを行います。

  • コンポーネントがカスタム Greengrass コンポーネントの場合、コンポーネントを更新してコアデバイスと互換性を持たせることができます。コアデバイスのプラットフォームに一致する新しいマニフェストを追加するか、コアデバイスのプラットフォームに合わせて既存のマニフェストを更新します。詳細については、「AWS IoT Greengrass コンポーネントレシピのリファレンス」を参照してください。

  • コンポーネントを AWS が提供している場合、コンポーネントの別のバージョンがコアデバイスと互換性があるかどうかを確認します。互換性のあるバージョンがない場合は、AWS IoT Greengrass タグを使用して AWS re:Post でお問い合わせいただくか、AWS Support にお問い合わせください。

com.aws.greengrass.componentmanager.exceptions.PackagingException: The deployment attempts to update the nucleus from aws.greengrass.Nucleus-<version> to aws.greengrass.Nucleus-<version> but no component of type nucleus was included as target component

Greengrass nucleus に依存するコンポーネントをデプロイした場合に、コアデバイスが利用可能な最新のマイナーバージョンよりも前のバージョンの Greengrass nucleus を実行していると、このエラーが表示されることがあります。このエラーは、AWS IoT Greengrass Core コアソフトウェアがコンポーネントを最新の互換性のあるバージョンに自動的に更新しようとするために発生します。ただし、AWS IoT Greengrass Core ソフトウェアは、Greengrass nucleus が新しいマイナーバージョンに更新されないようにします。AWS が提供するコンポーネントの一部は、Greengrass nucleus の特定マイナーバージョンに依存するからです。詳細については、「Greengrass nucleus の更新動作」を参照してください。

デプロイを改訂して、使用する Greengrass nucleus バージョンを指定する必要があります。次のいずれかを行います。

  • デプロイを改訂して、コアデバイスが現在実行している Greengrass nucleus バージョンを指定します。

  • デプロイを改訂して、Greengrass nucleus の新しいマイナーバージョンを指定します。このオプションを選択した場合は、Greengrass nucleus の特定のマイナーバージョンに依存するすべての AWS が提供するコンポーネントのバージョンも更新する必要があります。詳細については、「AWS が提供したコンポーネント」を参照してください。

Error: com.aws.greengrass.deployment.exceptions.DeploymentException: Unable to process deployment. Greengrass launch directory is not set up or Greengrass is not set up as a system service

Greengrass のデバイスをあるグループから別のグループに移動し、Greengrass の再起動が必要なデプロイで元のグループに戻したときに、このエラーが表示されることがあります。

この問題を解決するには、デバイスの起動ディレクトリを再作成してください。また、Greengrass nucleus のバージョン 2.9.6 以降へのアップグレードを強く推奨します。

以下は、起動ディレクトリを再作成するための Linux スクリプトです。fix_directory.sh という名前のファイルにスクリプトを保存します。

#!/bin/bash set -e GG_ROOT=$1 GG_VERSION=$2 CURRENT="$GG_ROOT/alts/current" if [ ! -L "$CURRENT" ]; then mkdir -p $GG_ROOT/alts/directory_fix echo "Relinking $GG_ROOT/alts/directory_fix to $CURRENT" ln -sf $GG_ROOT/alts/directory_fix $CURRENT fi TARGET=$(readlink $CURRENT) if [[ ! -d "$TARGET" ]]; then echo "Creating directory: $TARGET" mkdir -p "$TARGET" fi DISTRO_LINK="$TARGET/distro" DISTRO="$GG_ROOT/packages/artifacts-unarchived/aws.greengrass.Nucleus/$GG_VERSION/aws.greengrass.nucleus/" echo "Relinking Nucleus artifacts to $DISTRO_LINK" ln -sf $DISTRO $DISTRO_LINK

スクリプトを実行するには、次のコマンドを実行します。

[root@ip-172-31-27-165 ~]# ./fix_directory.sh /greengrass/v2 2.9.5 Relinking /greengrass/v2/alts/directory_fix to /greengrass/v2/alts/current Relinking Nucleus artifacts to /greengrass/v2/alts/directory_fix/distro

Info: com.aws.greengrass.deployment.exceptions.RetryableDeploymentDocumentDownloadException: Greengrass Cloud Service returned an error when getting full deployment configuration

このエラーは、コア デバイスが 7 KB (モノを対象とするデプロイの場合) または 31 KB (モノのグループを対象とするデプロイの場合) を超えるデプロイドキュメントである大規模なデプロイドキュメントを受信した場合に表示されることがあります。大規模なデプロイドキュメントを取得するには、コアデバイスの AWS IoT ポリシーで greengrass:GetDeploymentConfiguration アクセス許可が付与されている必要があります。このエラーは、コアデバイスにこの権限がない場合に発生する可能性があります。このエラーが発生すると、デプロイは無期限に再試行され、そのステータスは [In progress] (進行中) (IN_PROGRESS) です。

この問題を解決するには、コアデバイスの AWS IoT ポリシーに greengrass:GetDeploymentConfiguration アクセス許可を追加します。詳細については、「コアデバイスの AWS IoT ポリシーを更新する」を参照してください。

Warn: com.aws.greengrass.deployment.DeploymentService: Failed to get thing group hierarchy

コアデバイスがデプロイを受信し、コアデバイスの AWS IoT ポリシーが greengrass:ListThingGroupsForCoreDevice 許可を付与していない場合に、この警告が表示されることがあります。デプロイを作成するとき、コアデバイスはこの権限を使用して、そのモノグループを識別し、コアデバイスを削除したすべてのモノグループのコンポーネントを削除します。コアデバイスが Greengrass nucleus v2.5.0 を実行している場合、デプロイは失敗します。コアデバイスが Greengrass nucleus v2.5.1 以降を実行している場合、デプロイは続行されますが、コンポーネントは削除されません。モノグループの削除動作の詳細については、「デバイスに AWS IoT Greengrass コンポーネントのデプロイ」を参照してください。

コアデバイスの動作を更新して、コアデバイスを削除するモノグループのコンポーネントを削除するには、コアデバイスの AWS IoT ポリシーに greengrass:ListThingGroupsForCoreDevice アクセス許可を追加します。詳細については、「コアデバイスの AWS IoT ポリシーを更新する」を参照してください。

Info: com.aws.greengrass.deployment.DeploymentDocumentDownloader: Calling Greengrass cloud to get full deployment configuration

コアデバイスは DEBUG ログレベルでエラーをログに記録するため、この情報メッセージがエラーなしで複数回出力される場合があります。この問題は、コアデバイスが大規模なデプロイドキュメントを受信した場合に、発生する可能性があります。この問題が発生すると、デプロイは無期限に再試行され、そのステータスは [In progress] (進行中) (IN_PROGRESS) です。この問題を解決する方法の詳細については、「こちらのトラブルシューティングエントリ」を参照してください。

Caused by: software.amazon.awssdk.services.greengrassv2data.model.GreengrassV2DataException: null (Service: GreengrassV2Data, Status Code: 403, Request ID: <some_request_id>, Extended Request ID: null)

データプレーン API に iot:Connect アクセス許可がない場合、このエラーが表示されることがあります。正しいポリシーがない場合は、GreengrassV2DataException: 403 を受け取ります。アクセス許可ポリシーを作成するには、次の手順に従ってください。 AWS IoT ポリシーを作成する

コアデバイスコンポーネントの問題

コアデバイスで Greengrass コンポーネントの問題のトラブルシューティングを行います。

Warn: '<command>' is not recognized as an internal or external command

AWS IoT Greengrass Core ソフトウェアがコンポーネントのライフサイクルスクリプトでコマンドを実行できなかった場合、Greengrass コンポーネントのログにこのエラーが表示されることがあります。このエラーの結果、コンポーネントの状態は BROKEN になります。このエラーは、ggc_user などのコンポーネントを実行するシステムユーザーが PATH 内のフォルダでコマンドの実行可能ファイルを見つけられない場合に発生する可能性があります。

Windows デバイスでは、実行可能ファイルを含むフォルダが、コンポーネントを実行するシステムユーザーの PATH にあることを確認します。PATH から欠落している場合は、次のいずれかを実行します。

  • 実行可能ファイルのフォルダを、すべてのユーザーを利用できる PATH システム変数に追加します。次に、コンポーネントを再起動します。

    Greengrass Nuclear 2.5.0を実行している場合、PATH システム変数を更新した後、更新された PATH でコンポーネントを実行するには、AWS IoT Greengrass Core ソフトウェアを再起動する必要があります。ソフトウェアを再起動した後、AWS IoT Greengrass Core ソフトウェアが更新された PATH を使用しない場合は、デバイスを再起動して再試行してください。詳細については、「AWS IoT Greengrass Core ソフトウェアを実行する」を参照してください。

  • コンポーネントを実行するシステムユーザーの PATH ユーザー変数に実行可能ファイルのフォルダを追加します。

Python スクリプトはメッセージをログに記録しません

Greengrass コアデバイスは、コンポーネントの問題を特定するために使用できるログを収集します。Python スクリプトの stdoutstderr のメッセージがコンポーネントログに表示されない場合、Python でこれらの標準出力ストリームのバッファをフラッシュするか、バッファリングを無効にする必要がある場合があります。次のいずれかを実行します。

  • -u 引数を指定してPythonを実行し、stdoutstderr のバッファリングを無効にします。

    Linux or Unix
    python3 -u hello_world.py
    Windows
    py -3 -u hello_world.py
  • コンポーネントの recipe で Setenv を使用して、PYTHONUNBUFFERED 環境変数を空でない文字列に設定します。この環境変数は stdoutstderr のバッファリングを無効にします。

  • stdout または stderr Streams のバッファをフラッシュします。次のいずれかを行います。

    • 印刷時にメッセージをフラッシュします。

      import sys print('Hello, error!', file=sys.stderr, flush=True)
    • 印刷後にメッセージをフラッシュします。ストリームをフラッシュする前に、複数のメッセージを送信できます。

      import sys print('Hello, error!', file=sys.stderr) sys.stderr.flush()

Python スクリプトがログメッセージを出力することを確認する方法の詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。

デフォルト設定を変更してもコンポーネント設定が更新されません

コンポーネントの recipe で DefaultConfiguration を変更した場合、デプロイ中に新しいデフォルト設定がコンポーネントの既存の設定を置き換えることはありません。新しいデフォルト設定を適用するには、コンポーネントの設定をデフォルト設定にリセットする必要があります。コンポーネントをデプロイする場合には、更新のリセットとして空の文字列を 1 つ指定します。

Console
パスのリセット
[""]
AWS CLI

次のコマンドは、コアデバイスにデプロイを作成します。

aws greengrassv2 create-deployment --cli-input-json file://reset-configuration-deployment.json

reset-configuration-deployment.json ファイルには、次の JSON ドキュメントが含まれています。

{ "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "deploymentName": "Deployment for MyGreengrassCore", "components": { "com.example.HelloWorld": { "componentVersion": "1.0.0", "configurationUpdate": {, "reset": [""] } } } }
Greengrass CLI

次の Greengrass CLI コマンドは、コアデバイスにローカルデプロイを作成します。

sudo greengrass-cli deployment create \ --recipeDir recipes \ --artifactDir artifacts \ --merge "com.example.HelloWorld=1.0.0" \ --update-config reset-configuration-deployment.json

reset-configuration-deployment.json ファイルには、次の JSON ドキュメントが含まれています。

{ "com.example.HelloWorld": { "RESET": [""] } }

awsiot.greengrasscoreipc.model.UnauthorizedError

コンポーネントにリソースに対する IPC オペレーションを実行するアクセス許可がない場合に、Greengrass コンポーネントのログにこのエラーが表示されることがあります。コンポーネントに IPC オペレーションを呼び出すアクセス許可を付与するには、コンポーネントの設定で IPC 承認ポリシーを定義します。詳細については、「コンポーネントに IPC オペレーションの実行を許可する」を参照してください。

ヒント

コンポーネントの recipe で DefaultConfiguration を変更した場合は、コンポーネントの設定を新しいデフォルト設定にリセットする必要があります。コンポーネントをデプロイする場合には、更新のリセットとして空の文字列を 1 つ指定します。詳細については、「デフォルト設定を変更してもコンポーネント設定が更新されません」を参照してください。

com.aws.greengrass.authorization.exceptions.AuthorizationException: Duplicate policy ID "<id>" for principal "<componentList>"

このエラーは、コアデバイスのすべてのコンポーネントを含め、複数の IPC 承認ポリシーが同じポリシー ID を使用している場合に表示されることがあります。

コンポーネントの IPC 承認ポリシーを確認し、重複があれば修正して、再試行します。一意のポリシー ID を作成するには、コンポーネント名、IPC サービス名、および順番号を組み合わせることをお勧めします。詳細については、「コンポーネントに IPC オペレーションの実行を許可する」を参照してください。

ヒント

コンポーネントの recipe で DefaultConfiguration を変更した場合は、コンポーネントの設定を新しいデフォルト設定にリセットする必要があります。コンポーネントをデプロイする場合には、更新のリセットとして空の文字列を 1 つ指定します。詳細については、「デフォルト設定を変更してもコンポーネント設定が更新されません」を参照してください。

com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 400)

コアデバイスがトークン交換サービスから AWS 認証情報を取得できない場合に、このエラーが表示されることがあります。HTTP 400 ステータスコードは、コアデバイスのトークン交換 IAM ロールが存在しないか、AWS IoT 認証情報プロバイダーが引き受けることを許可する信頼関係がないためにこのエラーが発生したことを示します。

以下の操作を実行します。

  1. コアデバイスが使用するトークン交換ロールを特定します。エラーメッセージには、コアデバイスの AWS IoT ロールエイリアスが含まれ、これがトークン交換ロールへのポインターになっています。開発用コンピュータで次のコマンドを実行し、MyGreengrassCoreTokenExchangeRoleAlias をエラーメッセージの AWS IoT ロールエイリアスの名前に置き換えます。

    aws iot describe-role-alias --role-alias MyGreengrassCoreTokenExchangeRoleAlias

    レスポンスには、トークン交換 IAM ロールの Amazon リソースネーム (ARN) が含まれます。

    { "roleAliasDescription": { "roleAlias": "MyGreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/MyGreengrassCoreTokenExchangeRoleAlias", "roleArn": "arn:aws:iam::123456789012:role/MyGreengrassV2TokenExchangeRole", "owner": "123456789012", "credentialDurationSeconds": 3600, "creationDate": "2021-02-05T16:46:18.042000-08:00", "lastModifiedDate": "2021-02-05T16:46:18.042000-08:00" } }
  2. ロールが存在することを確認します。次のコマンドを実行して、MyGreengrassV2TokenExchangeRole をトークン交換ロールの名前に置き換えます。

    aws iam get-role --role-name MyGreengrassV2TokenExchangeRole

    コマンドが NoSuchEntity エラーを返した場合、ロールは存在しないため、作成する必要があります。このロールを作成および設定する方法の詳細については、「コアデバイスが AWS サービスとやり取りできるように承認する」を参照してください。

  3. AWS IoT 認証情報プロバイダーが引き受けることを許可する信頼関係がロールにあることを確認します。前のステップのレスポンスには AssumeRolePolicyDocument が含まれ、これはロールの信頼関係を定義します。ロールは、credentials.iot.amazonaws.com が引き受けることを許可する信頼関係を定義する必要があります。このドキュメントは次の例のようになります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    ロールの信頼関係で credentials.iot.amazonaws.com が引き受けることが許可されていない場合、ロールにこの信頼関係を追加する必要があります。詳細については、「AWS Identity and Access Management ユーザーガイド」の「ロールの修正」を参照してください。

com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 403)

コアデバイスがトークン交換サービスから AWS 認証情報を取得できない場合に、このエラーが表示されることがあります。HTTP 403 ステータスコードは、コアデバイスの AWS IoT ポリシーでコアデバイスの AWS IoT ロールエイリアスに iot:AssumeRoleWithCertificate アクセス許可が付与されていないために、このエラーが発生したことを示しています。

コアデバイスの AWS IoT ポリシーを確認し、コアデバイスの AWS IoT ロールエイリアスに iot:AssumeRoleWithCertificate アクセス許可を追加します。エラーメッセージには、コアデバイスの現在の AWS IoT ロールエイリアスが含まれています。このアクセス許可と、コアデバイスの AWS IoT ポリシーを更新する方法の詳細については、「AWS IoT Greengrass V2 コアデバイス向けの最低限の AWS IoT ポリシー」と「コアデバイスの AWS IoT ポリシーを更新する」を参照してください。

com.aws.greengrass.tes.CredentialsProviderError: Could not load credentials from any providers

このエラーは、コンポーネントが AWS認証情報をリクエストしようとしたときにトークン交換サービスに接続できない場合に表示されることがあります。

以下の操作を実行します。

  • コンポーネントがトークン交換サービスコンポーネント aws.greengrass.TokenExchangeService への依存関係を宣言していることを確認します。宣言していない場合は、依存関係を追加して、コンポーネントを再デプロイします。

  • コンポーネントが Docker で実行される場合は、Docker コンテナコンポーネント (Linux) でAWS 認証情報の使用 に従って適切なネットワーク設定と環境変数を適用するようにしてください。

  • コンポーネントが NodeJS で記述されている場合は、dns.setDefaultResultOrderipv4first に設定します。

  • ::1 で始まり、localhost を含むエントリがないか /etc/hosts を調べます。エントリを削除して、そのエントリがコンポーネントが間違ったアドレスでトークン交換サービスに接続した原因であったかどうかを確認します。

Received error when attempting to retrieve ECS metadata: Could not connect to the endpoint URL: "<tokenExchangeServiceEndpoint>"

コンポーネントがトークン交換サービスを実行していない場合に、コンポーネントが AWS 認証情報をリクエストしようとすると、このエラーが表示されることがあります。

以下の操作を実行します。

  • コンポーネントがトークン交換サービスコンポーネント aws.greengrass.TokenExchangeService への依存関係を宣言していることを確認します。宣言していない場合は、依存関係を追加して、コンポーネントを再デプロイします。

  • コンポーネントが AWS 認証情報を install ライフサイクルで使用しているかどうかを確認します。AWS IoT Greengrass は、install ライフサイクル期間中にトークン交換サービスを使用できることを保証しません。コンポーネントを更新して、AWS 認証情報を使用するコードを startup または run ライフサイクルに移動してからコンポーネントを再デプロイします。

copyFrom: <configurationPath> is already a container, not a leaf

このエラーは、設定値をコンテナタイプ (リストまたはオブジェクト) から非コンテナタイプ (文字列、数値、またはブール値) に変更したときに表示されることがあります。以下の操作を実行します。

  1. コンポーネントの recipe をチェックして、デフォルト設定で、その設定値がリストまたはオブジェクトに設定されているかどうかを確認します。その場合は、その設定値を削除または変更します。

  2. その設定値をデフォルト値にリセットするデプロイを作成します。詳細については、デプロイの作成およびコンポーネント設定の更新を参照してください。

その後で、その設定値を文字列、数値、またはブール値に設定できます。

com.aws.greengrass.componentmanager.plugins.docker.exceptions.DockerLoginException: Error logging into the registry using credentials - 'The stub received bad data.'

[Docker application manager component] (Docker アプリケーションマネージャーコンポーネント) が Amazon Elastic Container Registry (Amazon ECR) のプライベートリポジトリから Docker イメージをダウンロードしようとすると、Greengrass nucleus ログにこのエラーが表示される場合があります。このエラーは、wincred Docker credential helper (Docker 認証情報ヘルパー)(docker-credential-wincred) を使用した場合に発生します。その結果、Amazon ECR はログイン認証情報を保存できません。

次のいずれかのアクションを実行します。

  • wincred Docker 認証情報ヘルパーを使用しない場合、コアデバイスから docker-credential-wincred プログラムを削除してください。

  • wincred Docker 認証情報ヘルパーを使用する場合、以下の操作を行います。

    1. コアデバイスの docker-credential-wincred プログラムの名前を変更します。wincred を Windows Docker 認証情報ヘルパーの新しい名前に置き換えます。例えば、名前を docker-credential-wincredreal に変更できます。

    2. Docker 設定 (.docker/config.json) の credsStore オプションを更新し、Windows Docker 認証情報ヘルパーの新しい名前を使用します。例えば、プログラムの名前を docker-credential-wincredreal に変更した場合は、credsStore オプションを wincredreal に更新します。

      { "credsStore": "wincredreal" }

java.io.IOException: Cannot run program "cmd" ...: [LogonUser] The password for this account has expired.

このエラーは、ggc_user など、コンポーネントのプロセスを実行するシステムユーザーのパスワードの有効期限が切れている場合に、Windows コアデバイスに表示されることがあります。結果として、AWS IoT Greengrass Core ソフトウェアは、そのシステムユーザーとしてコンポーネントプロセスを実行できません。

Greengrass システムユーザーのパスワードを更新するには
  1. 管理者として次のコマンドを実行して、ユーザーのパスワードを設定します。ggc_user をシステムユーザーに置き換え、password を設定するパスワードに置き換えます。

    net user ggc_user password
  2. PsExec ユーティリティを使用して、ユーザーの新しいパスワードを LocalSystem アカウントの認証情報マネージャーインスタンスに保存します。password を設定したユーザーのパスワードに置き換えます。

    psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
ヒント

Windows の構成によっては、ユーザーのパスワードの期限切れが、将来の日付に設定されている場合があります。Greengrass アプリケーションの動作を継続させるためには、パスワードの有効期限を追跡し、その期限が切れる前に更新します。ユーザーのパスワードには、期限切れを起こさないような設定も可能です。

  • ユーザーとパスワードの有効期限を確認するには、次のコマンドを実行します。

    net user ggc_user | findstr /C:expires
  • ユーザーのパスワードが期限切れにならないように設定するには、次のコマンドを実行します。

    wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
  • wmic コマンドが廃止されている Windows 10 以降を使用している場合は、次の PowerShell コマンドを実行します。

    Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}

aws.greengrass.StreamManager: Instant exceeds minimum or maximum instant

ストリームマネージャ v2.0.7 を v2.0.8 と v2.0.11 の間のバージョンにアップグレードする場合、コンポーネントの起動に失敗すると、ストリームマネージャーコンポーネントのログに次のエラーが表示される場合があります。

2021-07-16T00:54:58.568Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: com.fasterxml.jackson.databind.JsonMappingException: Instant exceeds minimum or maximum instant (through reference chain: com.amazonaws.iot.greengrass.streammanager.export.PersistedSuccessExportStatesV1["lastExportTime"]). {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING} 2021-07-16T00:54:58.579Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: java.time.DateTimeException: Instant exceeds minimum or maximum instant. {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING}

ストリームマネージャー v2.0.7 をデプロイし、それ以降のバージョンにアップグレードする場合は、ストリームマネージャー v2.0.12 に直接アップグレードする必要があります。ストリームマネージャコンポーネントの詳細については、「ストリームマネージャー」を参照してください。

コアデバイスの Lambda 関数コンポーネントの問題

コアデバイスでの Lambda 関数コンポーネントの問題のトラブルシューティングを行います。

The following cgroup subsystems are not mounted: devices, memory

次の場合に、コンテナ化した Lambda 関数を実行すると、このエラーが表示されることがあります。

  • コアデバイスで、メモリまたはデバイス cgroup に対して cgroup v1 が有効になっていない。

  • コアデバイスで cgroup v2 が有効になっている。Greengrass Lambda 関数は cgroup v1 を必要とし、cgroup v1 と v2 は相互に排他的です。

cgroups v1 を有効にするには、次の Linux カーネルパラメータを使用してデバイスを起動します。

cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
ヒント

Raspberry Pi で、/boot/cmdline.txt ファイルを編集して、デバイスのカーネルパラメータを設定します。

ipc_client.py:64,HTTP Error 400:Bad Request, b'No subscription exists for the source <label-or-lambda-arn> and subject <label-or-lambda-arn>

このエラーは、V1 の Lambda 関数 (AWS IoT Greengrass Core SDK を使用) を V2 コアデバイスで、レガシーサブスクリプションルーターコンポーネントにサブスクリプションを指定せずに実行したときに表示されることがあります。この問題を解決するには、レガシーサブスクリプションルーターをデプロイして設定し、必要なサブスクリプションを指定します。詳細については、「V1 Lambda 関数をインポートする」を参照してください。

コンポーネントのバージョンが廃止された

コアデバイスのコンポーネントのバージョンが廃止されているとき、Personal Health Dashboard (PHD) に通知が表示される場合があります。そのコンポーネントのバージョンは、廃止されてから 60 分以内にこの通知を PHD に送信します。

どのデプロイを修正する必要があるかを確認するには、AWS Command Line Interface を使用して次の操作を行います。

  1. 次のコマンドを実行し、コアデバイスのリストを取得します。

    aws greengrassv2 list-core-devices
  2. 次のコマンドを実行し、手順 1 の各コアデバイス上のコンポーネントのステータスを取得します。coreDeviceName をクエリする各コアデバイスの名前に置き換えます。

    aws greengrassv2 list-installed-components --core-device-thing-name coreDeviceName
  3. 前の手順でインストールした、廃止されたコンポーネントのバージョンのコアデバイスを収集します。

  4. 次のコマンドを実行し、手順 3 の各コアデバイスに対するすべてのデプロイジョブのステータスを取得します。coreDeviceName をクエリするコアデバイスの名前に置き換えます。

    aws greengrassv2 list-effective-deployments --core-device-thing-name coreDeviceName

    レスポンスには、コアデバイスのデプロイジョブのリストが含まれます。デプロイを修正して別のコンポーネントのバージョンを選択できます。デプロイを修正する方法の詳細については、「デプロイの修正」を参照してください。

Greengrass コマンドラインインターフェイスの問題

Greengrass CLI の問題のトラブルシューティング。

java.lang.RuntimeException: Unable to create ipc client

このエラーは、Greengrass CLI コマンドを実行する場合に、AWS IoT Greengrass Core ソフトウェアがインストールされているのとは異なるルートフォルダを指定すると、表示されることがあります。

次のいずれかを実行してルートパスを設定し、/greengrass/v2 を AWS IoT Greengrass Core ソフトウェアのインストールパスに置き換えます。

  • GGC_ROOT_PATH 環境変数を /greengrass/v2 に設定します。

  • 次の例のように、コマンドに --ggcRootPath /greengrass/v2 引数を追加します。

    greengrass-cli --ggcRootPath /greengrass/v2 <command> <subcommand> [arguments]

AWS Command Line Interface 問題点

AWS IoT Greengrass V2 の AWS CLI 問題のトラブルシューティングを行います。

Error: Invalid choice: 'greengrassv2'

AWS CLI (例えば、aws greengrassv2 list-core-devices)を使用して AWS IoT Greengrass V2 コマンドを実行すると、このエラーが表示される場合があります。

このエラーは、AWS IoT Greengrass V2 をサポートしていないバージョンの AWS CLI があることを示しています。AWS IoT Greengrass V2 を AWS CLI で使用するには、以下のいずれかのバージョン以降である必要があります。

  • 最小 AWS CLI V1 バージョン: v1.18.197

  • 最小 AWS CLI V2 バージョン: v2.1.11

ヒント

現在の AWS CLI のバージョンを確認するには、次のコマンドを実行します。

aws --version

この問題を解決するには、AWS CLI を AWS IoT Greengrass V2 をサポートする新しいバージョンに更新します。詳細については、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」を参照してください。