疑難排 AWS IoT Greengrass V2 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

疑難排 AWS IoT Greengrass V2

使用本節中的疑難排解資訊和解決方案來協助解決與的問題 AWS IoT Greengrass Version 2。

檢視 AWS IoT Greengrass 核心軟體和元件記錄

AWS IoT Greengrass Core 軟體會將記錄檔寫入本機檔案系統,您可以使用這些檔案系統來檢視核心裝置的即時資訊。您還可以將核心設備配置為將日誌寫入日 CloudWatch 誌,以便遠程對核心設備進行故障排除。這些記錄可協助您識別元件、部署和核心裝置的問題。如需詳細資訊,請參閱 監控AWS IoT Greengrass日誌

AWS IoT Greengrass 核心軟體問題

疑難排解 AWS IoT Greengrass 核心軟體問題。

主題

無法設定核心裝置

如果 AWS IoT Greengrass 核心軟體安裝程式失敗,而您無法設定核心裝置,您可能需要解除安裝軟體,然後再試一次。如需詳細資訊,請參閱 解除安裝AWS IoT Greengrass核心軟體

無法將 AWS IoT Greengrass 核心軟體作為系統服務啟動

如果 AWS IoT Greengrass Core 軟體無法啟動,請檢查系統服務記錄檔以識別問題。一個常見的問題是,在 PATH 環境變數 (Linux) 或 PATH 系統變數 (視窗) 上無法使用 Java。

無法將原子核設定為系統服務

當 AWS IoT Greengrass Core 軟體安裝程式無法設定 AWS IoT Greengrass 為系統服務時,您可能會看到此錯誤。在 Linux 裝置上,如果核心裝置沒有 systemd 初始化系統,通常會發生此錯誤。即使安裝程式無法設定系統服務,也可以成功設定 AWS IoT Greengrass Core 軟體。

執行以下任意一項:

無法連線到 AWS IoT Core

例如,當 AWS IoT Greengrass Core 軟體無法連線至擷取部署工作時,您可能會看 AWS IoT Core 到此錯誤。請執行下列操作:

  • 檢查您的核心設備是否可以連接到互聯網和 AWS IoT Core。如需裝置連線到的 AWS IoT Core 端點的詳細資訊,請參閱設定 AWS IoT Greengrass 核心軟體

  • 檢查核心裝置的 AWS IoT 物件是否使用允許iot:Connectiot:Publishiot:Receive、和iot:Subscribe權限的憑證。

  • 如果您的核心裝置使用網路 Proxy,請檢查您的核心裝置是否具有裝置角色,且其角色是否允許iot:Connectiot:Publishiot:Receive、、和iot: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 核心未指定用於執行元件的預設系統使用者時,您可能會看到此錯誤。

若要修正此問題,請設定 Greengrass 核心以指定執行元件的預設系統使用者。如需詳細資訊,請參閱 設定執行元件的使用者設定預設元件使用者

Failed to map segment from shared object: operation not permitted

當 AWS IoT Greengrass Core 軟體因為使用noexec權限掛載/tmp資料夾而無法啟動時,您可能會看到此錯誤。AWS 通用運行時(CRT)庫默認使用該/tmp文件夾。

執行以下任意一項:

  • 執行下列命令以使用exec權限重新掛載/tmp資料夾,然後再試一次。

    sudo mount -o remount,exec /tmp
  • 如果您執行 Greengrass 核 v2.5.0 或更新版本,您可以設定 JVM 選項來變更 CRT 程式庫使用的資料夾。 AWS 您可以在部署或安裝核心軟體時,在 Greengrass 核心元件組態中指定jvmOptions參數。 AWS IoT Greengrass 將 /path/to 替換為 AWS CRT 庫可以使用的文件夾的路徑。

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

無法設置視窗服務

如果您在 Microsoft 視窗 2016 設備上安裝 AWS IoT Greengrass 核心軟件,則可能會看到此錯誤。 AWS IoT Greengrass 核心軟體在 Windows 2016 上不受支援,如需支援的作業系統清單,請參閱支援平台

如果您必須使用視窗 2016,您可以執行下列動作:

  1. 解壓縮下載的 AWS IoT Greengrass 核心安裝歸檔

  2. 在目Greengrass錄中打開bin/greengrass.xml.template文件。

  3. 將標<autoRefresh>籤新增到標籤前面的檔案結</service>尾。

    </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 核心軟體

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

當核心裝置無法連線以訂閱部署工作通知時,您可能會看到此警告訊息。 AWS IoT Core 請執行下列操作:

  • 檢查核心裝置是否已連線至網際網路,並可連線到您設定的 AWS IoT 資料端點。如需核心裝置使用之端點的詳細資訊,請參閱允許裝置流量透過 Proxy 或防火牆

  • 檢查 Greengrass 日誌是否有其他顯示其他根本原因的錯誤。

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

當您使用自動佈建來安裝 AWS IoT Greengrass Core 軟體,且安裝程式使用無效的 AWS 工作階段 Token 時,可能會看到此錯誤。請執行下列操作:

  • 如果您使用臨時安全憑據,請檢查會話令牌是否正確,以及是否正在複製並粘貼完整的會話令牌。

  • 如果您使用長期安全憑據,請檢查設備是否沒有以前使用臨時憑據的會話令牌。請執行下列操作:

    1. 執行下列命令以取消設定工作階段 Token 環境變數。

      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 核心軟體透過 AWS IoT 叢集佈建安裝 AWS IoT Greengrass 核心軟體

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提供的元件時,您可能會看到這個錯誤。

若要修正此問題,請在元件方案中新增必要的元件做為相依性,以便 AWS IoT Greengrass 核心軟體在您部署元件時安裝必要的元件。

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

PKCS #11 提供者元件找不到或載入您在將 AWS IoT Greengrass Core 軟體設定為使用硬體安全性模組 (HSM) 時指定的私密金鑰或憑證,就會發生此錯誤。請執行下列操作:

  • 使用您設定要使用的 AWS IoT Greengrass Core 軟體的插槽、使用者 PIN 碼和物件標籤,檢查私密金鑰和憑證是否儲存在 HSM 中。

  • 檢查私密金鑰和憑證是否在 HSM 中使用相同的物件標籤。

  • 如果您的 HSM 支援物件 ID,請檢查私密金鑰和憑證是否在 HSM 中使用相同的物件識別碼。

請查看 HSM 的文件,以了解如何查詢有關 HSM 中安全性權杖的詳細資料。如果您需要變更安全性權杖的插槽、物件標籤或物件 ID,請查看 HSM 的文件以瞭解如何執行此動作。

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

當您使用秘密管理員元件部署密碼時,可能會發生這個 AWS Secrets Manager 錯誤。如果核心設備的令牌交換 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 核心軟體以重試部署。如需更多資訊,請參閱執行AWS IoT Greengrass核心軟體

    如果密碼管理員成功下載密碼,則部署成功。

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

當您使用 Secret Manager 元件部署由 AWS Key Management Service 金鑰加密的密碼時 AWS Secrets Manager ,可能會發生這個錯誤。如果核心設備的令牌交換 IAM 角色未授予解密權限,則部署失敗,並且 Greengrass 日誌包含此錯誤。

若要修正此問題,請將kms:Decrypt權限新增至核心裝置的 Token 交換角色。如需詳細資訊,請參閱下列內容:

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

當您嘗試安裝具有硬體安全性的 AWS IoT Greengrass Core 軟體,而您使用的舊版 Greengrass 核心版本不支援硬體安全性整合時,可能會看到這個錯誤。若要使用硬體安全性整合,您必須使用 Greengrass 核 v2.5.3 或更新版本。

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

當您執行 AWS IoT Greengrass Core 做為系統服務時,使用 TPM2 程式庫時,可能會看到這個錯誤。

此錯誤表示您需要新增環境變數,以提供 PKCS #11 儲存區在 AWS IoT Greengrass 核心 systemd 服務檔案中的位置。

如需詳細資訊,請參閱PKCS #11 供應商元件文件的「需求」一節。

Greengrass core device stuck on nucleus v2.12.3

如果您的 Greengrass 核心裝置無法從核心 2.12.3 版本修改您的部署,您可能需要下載檔案,並使用 Greengrass 核心 2.12.2 版來取代Greengrass.jar檔案。請執行下列操作:

  1. 在您的 Greengrass 核心裝置上,執行下列命令以停止 Greengrass 核心軟體。

    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. 運行以下命令,以覆蓋核 2.12.3 版本的 Greengrass JAR 文件與核 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 核心軟件。

    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誤。

此錯誤表示您的方案不是有效的 JSON 或 YAML。請檢查方案的語法,修正任何語法問題,然後再試一次。您可以使用線上 JSON 或 YAML 語法檢查程式來識別方案中的語法問題。

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

當您從 AWS IoT Greengrass 主控台或使用作業建立元件版本時,您可能會看到這個錯CreateComponentVersion誤。此錯誤表示元件方案中的 S3 成品無效。

請執行下列操作:

  • 檢查 S3 儲存貯體是否 AWS 區域 位於建立元件的位置。 AWS IoT Greengrass 不支援元件成品的跨區域要求。

  • 檢查成品 URI 是否為有效的 S3 物件 URL,並檢查該 S3 物件 URL 是否存在成品。

  • 檢查您是否 AWS 帳戶 有權在其 S3 物件 URL 存取成品。

INACTIVE deployment status

在沒有必要相依 AWS IoT 政策的情況下呼叫 ListDeploymentsAPI 時,您可能會取得INACTIVE部署狀態。您必須具備必要的權限,才能取得正確的部署狀態。您可以通過查看由定義的操作 AWS IoT Greengrass V2並遵循所需的權限來找到相依動作ListDeployments。如果沒有必要的相依 AWS IoT 權限,您仍會看到部署狀態,但可能會看到的不正確的部署狀態INACTIVE

核心裝置部署問題

疑難排解 Greengrass 核心裝置上的部署問題。每個項目都對應到您可能在核心設備上看到的日誌消息。

主題

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

當核心裝置套用部署時, AWS IoT Greengrass 核心軟體無法下載元件成品時,您可能會看到此錯誤。由於此錯誤,部署失敗。

當您收到此錯誤時,記錄檔也會包含可用來識別特定問題的堆疊追蹤。下列每個項目都會對應到您可能會在Failed to download artifact錯誤訊息的堆疊追蹤中看到的訊息。

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

在以下情況下,PackageDownloadException 錯誤可能包括此堆棧跟踪:

  • 元件成品無法在您在元件的方案中指定的 S3 物件 URL 中使用。檢查您已將成品上傳到 S3 儲存貯體,以及成品 URI 是否與儲存貯體中成品的 S3 物件 URL 相符。

  • 核心裝置的權杖交換角色不允許 AWS IoT Greengrass Core 軟體從您在元件方案中指定的 S3 物件 URL 下載元件成品。檢查令牌交換角色是否允許s3:GetObject存在成品可用的 S3 物件 URL。

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

當核心設備沒有調用權限時,PackageDownloadException 錯誤可能包括此堆棧跟踪s3:GetBucketLocation。錯誤訊息也包含下列訊息。

reason: Failed to determine S3 bucket location

檢查核心裝置的權杖交換角色是否允許s3:GetBucketLocation可用成品的 S3 儲存貯體。

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

當核心裝置套用部署時, AWS IoT Greengrass 核心軟體無法下載元件成品時,您可能會看到此錯誤。部署失敗,因為下載的成品檔案的總和檢查碼與您建立元件時所 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中尋找以識別此問題。若要解決此問題,請將greengrass:ResolveComponentCandidates權限新增至核心裝置的 AWS IoT 原則。如需詳細資訊,請參閱 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 re:Post使用標AWS IoT Greengrass 籤,或聯繫我們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 核心的元件時,您可能會看到這個錯誤,而且核心裝置執行的是較舊的 Greengrass 核心版本,而不是最新的次要版本。之所以發生這個錯誤,是因為 AWS IoT Greengrass Core 軟體會嘗試自動將元件更新為最新的相容版本。但是, AWS IoT Greengrass 核心軟體會阻止 Greengrass 核更新為新的次要版本,因為幾個 AWS提供的元件依賴於 Greengrass 核的特定次要版本。如需詳細資訊,請參閱 Greengrass 核更新行為

您必須修訂部署,以指定您要使用的 Greengrass 核心版本。執行以下任意一項:

  • 修改部署以指定核心裝置目前執行的 Greengrass 核心核心版本。

  • 修改部署以指定 Greengrass 核心的較新次要版本。如果您選擇此選項,則還必須更新依賴 Greengrass 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 核心 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

若要解決此問題,請將greengrass:GetDeploymentConfiguration權限新增至核心裝置的 AWS IoT 原則。如需詳細資訊,請參閱 更新核心裝置的AWS IoT政策

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

當核心裝置收到部署且核心裝置的 AWS IoT 政策不允許greengrass:ListThingGroupsForCoreDevice權限時,您可能會看到此警告。當您建立部署時,核心裝置會使用此權限來識別其物群組,並移除您從中移除核心裝置之任何物件群組的元件。如果核心裝置執行 Greengrass 核心 v2.5.0,則部署會失敗。如果核心裝置執行 Greengrass 核心 v2.5.1 或更新版本,部署會繼續進行,但不會移除元件。如需有關物件群組移除行為的詳細資訊,請參閱將AWS IoT Greengrass元件部署到裝置

若要更新核心裝置的行為,以移除您從中移除核心裝置之物件群組的元件,請將greengrass:ListThingGroupsForCoreDevice權限新增至核心裝置的 AWS IoT 策略。如需詳細資訊,請參閱 更新核心裝置的AWS IoT政策

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

您可能會看到多次列印此資訊訊息,而不會出現錯誤,因為核心裝置會在記錄層級記DEBUG錄錯誤。核心裝置收到大型部署文件時,可能會發生此問題。發生此問題時,部署會無限期地重試,且其狀態為 [進行中] () 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 核心軟體無法在元件的生命週期指令碼中執行命令時,您可能會在 Greengrass 元件的記錄檔中看到這個錯誤。該組件的狀態變BROKEN為這個錯誤的結果。如果執行元件的系統使用者 (例如ggc_user,在 PATH 中的資料夾中找不到命令的可執行檔),就會發生此錯誤。

在 Windows 裝置上,檢查包含可執行檔的資料夾是否位PATH於執行元件的系統使用者。如果缺少它PATH,請執行下列其中一個動作:

  • 將可執行檔的資料夾加入至PATH系統變數,此變數可供所有使用者使用。然後,重新啟動元件。

    如果您執行 Greengrass 核心 2.5.0,則在更新PATH系統變數之後,您必須重新啟動 AWS IoT Greengrass 核心軟體,才能執行更新的元件。PATH如果 AWS IoT Greengrass 核心軟體PATH在您重新啟動軟體後未使用更新的軟體,請重新啟動裝置,然後再試一次。如需詳細資訊,請參閱 執行AWS IoT Greengrass核心軟體

  • 將可執行檔的資料夾新增至執行元件之系統使用者的使用者變數。PATH

Python 腳本不會記錄消息

Greengrass 核心裝置會收集可用來識別元件問題的記錄檔。如果您的 Python 腳本stdoutstderr消息沒有出現在組件日誌中,則可能需要刷新緩衝區或禁用 Python 中這些標準輸出流的緩衝。執行下列任何一項:

  • 使用 -u 參數運行 Python 以禁用和緩衝。stdout stderr

    Linux or Unix
    python3 -u hello_world.py
    Windows
    py -3 -u hello_world.py
  • 在組件的配方中使用 SetenvPYTHON緩衝環境變量設置為非空字符串。此環境變數會停用stdoutstderr的緩衝。

  • 清除stdoutstderr串流的緩衝區。執行以下任意一項:

    • 打印時刷新消息。

      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日誌

變更預設組態時,元件組態不會更新

當您在元件的方案DefaultConfiguration中變更時,新的預設組態不會在部署期間取代元件的現有組態。若要套用新的預設模型組態,您必須將零組件的模型組態重設為其預設設定。部署元件時,請指定單一空字串做為重設更新

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 作業

提示

如果您變更零組件方案DefaultConfiguration中的,您必須將零組件的模型組態重設為其新的預設組態。部署元件時,請指定單一空字串做為重設更新。如需詳細資訊,請參閱 變更預設組態時,元件組態不會更新

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

如果多個 IPC 授權原則 (包括核心裝置上的所有元件) 使用相同的原則識別碼,您可能會看到此錯誤。

請檢查元件的 IPC 授權政策,修復任何重複項目,然後再試一次。若要建立唯一的原則識別碼,建議您結合元件名稱、IPC 服務名稱和計數器。如需詳細資訊,請參閱 授權元件執行 IPC 作業

提示

如果您變更零組件方案DefaultConfiguration中的,您必須將零組件的模型組態重設為其新的預設組態。部署元件時,請指定單一空字串做為重設更新。如需詳細資訊,請參閱 變更預設組態時,元件組態不會更新

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. 檢查角色是否存在。執行下列命令,並以權杖交換角色的名稱取代 MyGreengrassV2 TokenExchangeRole

    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 IAM 使用者指南中的修改角色

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 認證且無法連線至 Token 交換服務時,您可能會看到此錯誤。

請執行下列操作:

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

當元件未執行 Token 交換服務且元件嘗試要求 AWS 認證時,您可能會看到此錯誤。

請執行下列操作:

  • 檢查組件是否聲明了令牌交換服務組件的依賴關係,aws.greengrass.TokenExchangeService. 如果沒有,請新增相依性並重新部署元件。

  • 檢查元件是否在其install生命週期中使用 AWS 認證。 AWS IoT Greengrass 不保證令牌交換服務在install生命週期中的可用性。更新元件,將使用 AWS 認證的程式碼移至startuprun生命週期,然後重新部署元件。

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

當您將組態值從容器類型 (清單或物件) 變更為非容器類型 (字串、數字或布林值) 時,您可能會看到此錯誤。請執行下列操作:

  1. 檢查組件的方案,以查看其默認配置是否將該配置值設置為列表還是對象。如果是這樣,請移除或變更該組態值。

  2. 建立部署以將該組態值重設為預設值。如需詳細資訊,請參閱 建立部署更新零組件組態

然後,您可以將該配置值設置為字符串,數字或布爾值。

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

Docker 應用程式管理員元件嘗試從 Amazon 彈性容器登錄 (Amazon ECR) 中的私有存放庫下載 Docker 映像時,您可能會在 Greengrass 核記錄中看到此錯誤。如果您使用 wincred Docker 認證協助程式 (docker-credential-wincred),就會發生這個錯誤。因此,Amazon ECR 無法儲存登入登入資料。

執行下列其中一個動作:

  • 如果您不使用 wincred Docker 憑證助手,請從核心設備中刪除docker-credential-wincred該程序。

  • 如果您使用 wincred Docker 認證協助程式,請執行下列動作:

    1. 重新命名核心裝置上的docker-credential-wincred程式。wincred以 Windows 泊塢視窗認證協助程式的新名稱取代。例如,您可以將其重新命名為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.

當執行元件處理序的系統使用者 (例如) 的密碼過期時,您可能會在 Windows 核心裝置上看到這個錯誤。ggc_user因此, AWS IoT Greengrass Core 軟體無法以該系統使用者身分執行元件處理程序。

若要更新 Greengrass 系統使用者的密碼
  1. 以系統管理員身分執行下列命令來設定使用者的密碼。以系統使用者取代 ggc_user,並以要設定的密碼取代密碼。

    net user ggc_user password
  2. 使用此PsExec 公用程式將使用者的新密碼儲存在 LocalSystem 帳戶的認證管理員執行個體中。以您設定的使用者密碼取代密碼。

    psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
提示

視您的 Windows 組態而定,使用者的密碼可能會設定為在 future 的某個日期到期。為確保您的 Greengrass 應用程式繼續運作,請追蹤密碼何時到期,並在密碼到期之前進行更新。您也可以將使用者的密碼設定為永不過期。

  • 若要檢查使用者及其密碼何時到期,請執行下列命令。

    net user ggc_user | findstr /C:expires
  • 若要將使用者的密碼設定為永不過期,請執行下列命令。

    wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
  • 如果您使用的是 Windows 10 或更新版本,而該wmic命令已被取代,請執行下列 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 函數需要 C 組 v1,C 組 v1 和 v2 是相互排斥的。

若要啟用 cgroup 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>

當您在 V2 核心裝置上執行 V1 Lambda 函數 (使用 AWS IoT Greengrass Core SDK),但未在舊版訂閱路由器元件中指定訂閱時,可能會看到此錯誤。若要修正此問題,請部署並設定舊版訂閱路由器,以指定所需的訂閱。如需詳細資訊,請參閱 匯入 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 命令行界面問題

疑難排解使用 Greengr ass CLI 的問題。

java.lang.RuntimeException: Unable to create ipc client

當您執行 Greengrass CLI 命令,並指定與 AWS IoT Greengrass 核心軟體安裝位置不同的根資料夾時,您可能會看到這個錯誤。

執行下列其中一項動作來設定根路徑,並取代/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 CLI 難排解 AWS IoT Greengrass V2.

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 第一版本:

  • 最 AWS CLI 低版本:

提示

您可以運行以下命令來檢查您擁有 AWS CLI 的版本。

aws --version

若要解決此問題,請更新 AWS CLI 至支援的更新版本 AWS IoT Greengrass V2。若要取得更多資訊,請參閱《AWS Command Line Interface 使用指南》 AWS CLI中的〈安裝、更新和解除安裝〉