本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS IoT Greengrass V2 疑難排解
使用本節中的疑難排解資訊和解決方案來協助解決問題AWS IoT Greengrass Version 2。
主題
檢視AWS IoT Greengrass核心軟體和元件記錄
AWS IoT GreengrassCore 軟體會將記錄檔寫入本機檔案系統,您可以使用這些檔案系統來檢視核心裝置的即時資訊。您還可以將核心設備配置為將日誌寫入日 CloudWatch 誌,以便遠程對核心設備進行故障排除。這些記錄可協助您識別元件、部署和核心裝置的問題。如需詳細資訊,請參閱監控AWS IoT Greengrass日誌。
AWS IoT Greengrass核心軟體問題
疑難排解AWS IoT Greengrass核心軟體問題。
主題
- 無法設定核心裝置
- 無法將AWS IoT Greengrass核心軟體作為系統服務啟動
- 無法將原子核設定為系統服務
- 無法連線到 AWS IoT Core
- 記憶體不足錯誤
- 無法安 Greengrass CLI
- User root is not allowed to execute
- com.aws.greengrass.lifecyclemanager.GenericExternalService: Could not determine user/group to run with
- Failed to map segment from shared object: operation not permitted
- 無法設置視窗服務
- com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager
- com.aws.greengrass.deployment.IotJobsHelper: No connection available during subscribing to Iot Jobs descriptions topic. Will retry in sometime
- software.amazon.awssdk.services.iam.model.IamException: The security token included in the request is invalid
- software.amazon.awssdk.services.iot.model.IotException: User: <user> is not authorized to perform: iot:GetPolicy
- Error: com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request
- Operation aws.greengrass#<operation> is not supported by Greengrass
- java.io.FileNotFoundException: <stream-manager-store-root-dir>/stream_manager_metadata_store (Permission denied)
- com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: Private key or certificate with label <label> does not exist
- software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: User: <user> is not authorized to perform: secretsmanager:GetSecretValue on resource: <arn>
- software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: Access to KMS is not allowed
- java.lang.NoClassDefFoundError: com/aws/greengrass/security/CryptoKeySpi
- com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: CKR_OPERATION_NOT_INITIALIZED
無法設定核心裝置
如果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 Greengrass。您可以安裝 systemd
或使用不同的初始化系統。如需詳細資訊,請參閱將 Greengrass 核配置為系統服務。 -
在沒有系統服務的情況下運行 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核心軟體。
-
檢查核心裝置的AWS IoT物件是否使用允許
iot:Connect
、iot:Publish
iot:Receive
、和iot:Subscribe
權限的憑證。 -
如果您的核心裝置使用網路 Proxy,請檢查您的核心裝置是否具有裝置角色,且其角色是否允許
iot:Connect
iot:Publish
iot: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,您可以執行下列動作:
-
解壓縮下載的AWS IoT Greengrass核心安裝歸檔
-
在目
Greengrass
錄中打開bin/greengrass.xml.template
文件。 -
將標
<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 時,可能會看到此錯誤。請執行下列動作:
-
如果您使用臨時安全憑據,請檢查會話令牌是否正確,以及是否正在複製並粘貼完整的會話令牌。
-
如果您使用長期安全憑據,請檢查設備是否沒有以前使用臨時憑據的會話令牌。請執行下列動作:
-
執行下列命令以取消設定工作階段 Token 環境變數。
-
檢查AWS憑證檔案是否包含工作階段權杖、
aws_session_token
。~/.aws/credentials
如果是這樣,請從文件中刪除該行。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策略,並添加任何缺少的必需權限。如需詳細資訊,請參閱下列內容:
-
AWS IoT CoreAWS IoT開發人員指南中的政策動作
Operation aws.greengrass#<operation> is not supported by Greengrass
當您在自訂 Greengrass 元件中使用處理序間通訊 (IPC) 作業,且核心裝置上未安裝所需AWS提供的元件時,您可能會看到這個錯誤。
若要修正此問題,請在元件方案中新增必要的元件做為相依性,以便AWS IoT Greengrass核心軟體在您部署元件時安裝必要的元件。
-
擷取秘密值 —
aws.greengrass.SecretManager
-
與局部陰影互動 —
aws.greengrass.ShadowManager
-
管理本機部署和元件 —
aws.greengrass.Cli
v2.6.0 或更新版本 -
驗證和授權用戶端裝置 —
aws.greengrass.clientdevices.Auth
v2.2.0 或更新版本
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 中使用相同的物件 ID。
請查看 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 日誌包含此錯誤。
授權核心裝置下載密碼
-
將
secretsmanager:GetSecretValue
權限新增至核心裝置的權杖交換角色。下列範例原則陳述式會授與取得密碼值的權限。{ "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyGreengrassSecret-abcdef" ] }
如需詳細資訊,請參閱授權核心設備與AWS服務。
-
將部署重新套用至核心裝置。執行下列任意一項:
-
不進行任何變更即修訂部署。核心裝置在收到修訂後的部署時,會嘗試再次下載密碼。如需詳細資訊,請參閱修訂部署。
-
重新啟動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 交換角色。如需詳細資訊,請參閱下列內容:
-
AWS Secrets Manager用戶指南中的秘密加密和解密
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 供應商元件文件的「需求」一節。
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 上的成品。
核心裝置部署問題
疑難排解 Greengrass 核心裝置上的部署問題。每個項目都對應到您可能在核心設備上看到的日誌消息。
主題
- Error: com.aws.greengrass.componentmanager.exceptions.PackageDownloadException: Failed to download artifact
- Error: com.aws.greengrass.componentmanager.exceptions.ArtifactChecksumMismatchException: Integrity check for downloaded artifact failed. Probably due to file corruption.
- Error: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: Failed to negotiate component <name> version with cloud and no local applicable version satisfying requirement <requirements>
- software.amazon.awssdk.services.greengrassv2data.model.ResourceNotFoundException: The latest version of Component <componentName> doesn't claim platform <coreDevicePlatform> compatibility
- 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
- 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
- Info: com.aws.greengrass.deployment.exceptions.RetryableDeploymentDocumentDownloadException: Greengrass Cloud Service returned an error when getting full deployment configuration
- Warn: com.aws.greengrass.deployment.DeploymentService: Failed to get thing group hierarchy
- Info: com.aws.greengrass.deployment.DeploymentDocumentDownloader: Calling Greengrass cloud to get full deployment configuration
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 GreengrassCLI 部署建立命令。
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
。如需如何解決此問題的詳細資訊,請參閱此疑難排解項目。
核心裝置元件問題
疑難排解核心裝置上的 Greengrass 元件問題。
主題
- Warn: '<command>' is not recognized as an internal or external command
- Python 腳本不會記錄消息
- 變更預設組態時,元件組態不會更新
- awsiot.greengrasscoreipc.model.UnauthorizedError
- com.aws.greengrass.authorization.exceptions.AuthorizationException: Duplicate policy ID "<id>" for principal "<componentList>"
- com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 400)
- com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 403)
- com.aws.greengrass.tes.CredentialsProviderError: Could not load credentials from any providers
- Received error when attempting to retrieve ECS metadata: Could not connect to the endpoint URL: "<tokenExchangeServiceEndpoint>"
- copyFrom: <configurationPath> is already a container, not a leaf
- com.aws.greengrass.componentmanager.plugins.docker.exceptions.DockerLoginException: Error logging into the registry using credentials - 'The stub received bad data.'
- java.io.IOException: Cannot run program "cmd" ...: [LogonUser] The password for this account has expired.
- aws.greengrass.StreamManager: Instant exceeds minimum or maximum instant
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 腳本stdout
和stderr
消息未出現在組件日誌中,則可能需要刷新緩衝區或禁用 Python 中這些標準輸出流的緩衝。執行下列任何一項:
-
使用 -u
參數運行 Python 以禁用和緩衝。 stdout
stderr
-
在組件的配方中使用 Setenv 將 PYTHON緩衝環境變量設置為非
空字符串。此環境變數會停用 stdout
和stderr
的緩衝。 -
清除
stdout
或stderr
串流的緩衝區。執行下列任意一項:-
打印時刷新消息。
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
中變更時,新的預設組態不會在部署期間取代元件的現有組態。若要套用新的預設模型組態,您必須將零組件的模型組態重設為其預設設定。部署元件時,請指定單一空字串做為重設更新。
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憑據提供者承擔的信任關係。
請執行下列動作:
-
識別核心裝置使用的權杖交換角色。該錯誤消息包括核心設備的AWS IoT角色別名,該別名指向令牌交換角色。在開發電腦上執行下列命令,並
MyGreengrassCoreTokenExchangeRoleAlias
以錯誤訊息中的AWS IoT角色別名名稱取代。aws iot describe-role-alias --role-alias
MyGreengrassCoreTokenExchangeRoleAlias
該響應包括令牌交換 IAM 角色的亞馬遜資源名稱(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" } }
-
檢查角色是否存在。執行下列命令,並以權杖交換角色的名稱取代
MyGreengrassV2 TokenExchangeRole
。aws iam get-role --role-name
MyGreengrassV2TokenExchangeRole
如果命令返回
NoSuchEntity
錯誤,則該角色不存在,您必須創建它。如需如何建立和設定此角色的詳細資訊,請參閱授權核心設備與AWS服務。 -
檢查角色是否具有允許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認證且無法連線至 Token 交換服務時,您可能會看到此錯誤。
請執行下列動作:
-
檢查組件是否聲明了令牌交換服務組件的依賴關係,
aws.greengrass.TokenExchangeService
. 如果沒有,請新增相依性並重新部署元件。 -
如果組件在 docker 中運行,請確保您應用正確的網絡設置和環境變量,根據在碼頭容器組件中使用AWS憑據(Linux).
-
檢
/etc/hosts
查是否有以::1
及包含開頭的項目localhost
。移除項目,以查看是否造成元件在錯誤的位址連線至 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認證的程式碼移至startup
或run
生命週期,然後重新部署元件。
copyFrom: <configurationPath> is already a container, not a leaf
當您將組態值從容器類型 (清單或物件) 變更為非容器類型 (字串、數字或布林值) 時,您可能會看到此錯誤。請執行下列動作:
然後,您可以將該配置值設置為字符串,數字或布爾值。
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 認證協助程式,請執行下列動作:-
重新命名核心裝置上的
docker-credential-wincred
程式。wincred
以 Windows 泊塢視窗認證協助程式的新名稱取代。例如,您可以將其重新命名為docker-credential-wincredreal
。 -
更新 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 GreengrassCore 軟體無法以該系統使用者身分執行元件處理程序。
若要更新 Greengrass 系統使用者的密碼
-
以系統管理員身分執行下列命令來設定使用者的密碼。以系統使用者取代
ggc_user
,並以要設定的密碼
取代密碼。net user
ggc_user
password
-
使用此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
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:
-
執行下列命令以取得核心裝置的清單。
aws greengrassv2 list-core-devices
-
執行下列命令,從步驟 1 擷取每個核心裝置上的元件狀態。取代
為要查詢的每個核心裝置的名稱。coreDeviceName
aws greengrassv2 list-installed-components --core-device-thing-name
coreDeviceName
-
收集具有先前步驟中已停止使用的元件版本的核心裝置。
-
執行下列命令,從步驟 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核心軟體安裝位置不同的根資料夾時,您可能會看到這個錯誤。
執行下列其中一項動作來設定根路徑,並以AWS IoT Greengrass核心軟體安裝的路徑取代/greengrass/v2
:
-
將
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中的〈安裝、更新和解除安裝〉。