故障診斷 ​AWS IoT Greengrass - AWS IoT Greengrass

若我們提供該指南英語版本的翻譯,在有任何牴觸的狀況下請以英文版本的指南為主。其透過機器翻譯提供翻譯。

故障診斷 ​AWS IoT Greengrass

此區段提供故障診斷資訊和可能的解決方案,以協助解決 的相關問題。AWS IoT Greengrass.

有關 AWS IoT Greengrass 配額(限制),請參閱 服務配額Amazon Web Services 一般參考.

AWS IoT Greengrass 核心問題

如果 AWS IoT Greengrass 核心軟體沒有啟動,請嘗試以下一般故障診斷步驟:

搜尋以下症狀和錯誤,來尋找可協助對 問題進行故障診斷的資訊。AWS IoT Greengrass 核心.

問題

 

錯誤 配置文件缺少標記、路徑或鍵盤。[PID=<的Greengrass後臺進程pid>]死亡。

解決方案: 您可能會看到 crash.log 當 AWS IoT Greengrass 核心軟件未啓動。如果您執行的是 1.6 版或更早的版本,也可能會發生這種情況。請執行以下其中一項作業:

  • 升級到V1.7 or later...我們建議您始終運行最新版本的 AWS IoT Greengrass 核心軟件。如需下載信息,請參閱 AWS IoT Greengrass 核心軟件.

  • 使用正確的 config.json 您的 AWS IoT Greengrass 核心軟件版本。如需詳細資訊,請參閱AWS IoT Greengrass 核心組態檔案.

    注意

    若要找出核心裝置上安裝了哪個版本的 AWS IoT Greengrass 核心軟體,請由您的裝置終端機執行以下命令。

    cd /greengrass-root/ggc/core/ sudo ./greengrassd --version

 

錯誤 無法解析/<Greengrass-root>/config/config.json。

解決方案: 當您在這個時候 AWS IoT Greengrass 核心軟件未啓動。確保 Greengrass配置文件 正在使用有效的JSON格式。

打開 config.json (位於 /greengrass-root/config)並驗證JSON格式。例如,確保已正確使用逗號。

 

錯誤 生成TLS配置時出錯: 錯誤缺血

解決方案: 當您在這個時候 AWS IoT Greengrass 核心軟件未啓動。確保 加密 Greengrass配置文件的部分有效。這個錯誤訊息應提供更多資訊。

打開 config.json (位於 /greengrass-root/config)並檢查 crypto 第節。例如,憑證和金鑰路徑必須使用正確的 URI 格式,並指向正確的位置。

 

錯誤 運行時無法啓動:無法啓動工作人員:容器測試超時。

解決方案: 當您在這個時候 AWS IoT Greengrass 核心軟件未啓動。設置 postStartHealthCheckTimeout 屬性在 Greengrass配置文件. 此選用屬性會設定 Greengrass 協助程式等候後置開始健康狀況檢查完成的時間量 (毫秒)。預設值為 30 秒 (30000 毫秒)。

開放 config.json (位於 )。/greengrass-root/config). 在 runtime 對象,添加 postStartHealthCheckTimeout 屬性並將值設置爲大於30000的數值。視需要插入逗號以建立有效的 JSON 文件。例如: 。

... "runtime" : { "cgroup" : { "useSystemd" : "yes" }, "postStartHealthCheckTimeout" : 40000 }, ...

 

錯誤 無法在本地CloudWatch上調用PutlogEvents,loggroup: /GreenGrassSystem/Connection_Manager,錯誤: RequestError:發送請求失敗,原因如下: http://<path>/CloudWatch/Logs/:DialTCP<address>:getsockopt:連接拒絕,響應:{}。

解決方案: 當您在這個時候 AWS IoT Greengrass 核心軟件未啓動。如果您在 Raspberry Pi 上執行 AWS IoT Greengrass,而且未完成所需的記憶體設定,可能會發生這種情況。有關詳細信息,請參閱 此步驟.

 

錯誤 由於:無法加載組而無法創建服務器:chmod/<greengrass-root>/ggc/deployment/lambda/arn:aws:Lambda:<region>:<account-id>:function:<function-name>:<version>/<文件名>:沒有此類文件或目錄。

解決方案: 當您在這個時候 AWS IoT Greengrass 核心軟件未啓動。如果您部署 Lambda 可執行檔 核心部分,檢查功能 Handler 屬性在 group.json 文件(位於/greengrass-root/GGC/deployment/group)。如果處理程序不是編譯可執行文件的確切名稱,請更換 group.json 帶有空JSON對象的文件({}),然後運行以下命令開始 AWS IoT Greengrass:

cd /greengrass/ggc/core/ sudo ./greengrassd start

然後,使用 AWS Lambda API 要更新功能配置 handler 參數,發佈新函數版本,並更新別名。有關詳細信息,請參閱 AWS Lambda 功能控制和別名.

假設您已透過別名 (建議) 新增函數到 Greengrass,那麼您現在可以重新部署您的群組。(若否,您必須在您的群組定義和訂閱中指向新的函數版本或別名,才能部署群組。)

 

在您從無容器化的情況下執行變更為在 Greengrass 容器中執行後,AWS IoT Greengrass 核心軟體沒有啟動。

解決方案: 檢查您沒有缺少任何container依賴關係。

 

錯誤 滑閥閥芯尺寸應至少爲262144字節。

解決方案: 當您在這個時候 AWS IoT Greengrass 核心軟件未啓動。打開 group.json 文件(位於 /greengrass-root/ggc/deployment/group),將文件的內容替換爲空的JSON對象({}),然後運行以下命令開始 AWS IoT Greengrass:

cd /greengrass/ggc/core/ sudo ./greengrassd start

然後依照 在本機儲存快取訊息 程序中的步驟操作。對於 GGCloudSpooler 功能,請確保指定 GG_CONFIG_MAX_SIZE_BYTES 值大於或等於262144。

 

錯誤 [錯誤]-雲消息傳遞錯誤: 嘗試發佈消息時出錯。{"errorstring":"operationtimedout"}

解決方案: 您可能會看到 GGCloudSpooler.log GreengrassCore無法將MQTT消息發送至 AWS IoT Core. 如果核心環境的頻寬有限又有高延遲,就可能發生這種情況。如果您正在運行 AWS IoT Greengrass v1.10.2或更高版本,嘗試增加 mqttOperationTimeout配置JSON 文件。如果該屬性不存在,請將其新增到 coreThing 物件。例如: 。

{ "coreThing": { "mqttOperationTimeout": 10, "caPath": "root-ca.pem", "certPath": "hash.cert.pem", "keyPath": "hash.private.key", ... }, ... }

預設值為 5,最小值為 。5.

 

錯誤:container_linux.go:344:開始容器過程導致“process_linux.go:424:container初始化導致\"rootfs_linux.go:64:將\\\"/Greengrass/GGC/Socket/Greengrass_IPC.sock/Socket/Greengrass_ipc.sock/socket/Greengrass_ipc.sock\\\”安裝到Rootfs\\\"/Greengrass/GGC/Packages/<version\\\"/Greengrass_IPC.sock\\\"的>/rootfs/merge\\\"導致\\\"STAT/Greengrass/GGC/Socket/Greengrass_IPC.sock:PermissionRejected\\\"\""。

解決方案: 您可能會看到 runtime.log 當 AWS IoT Greengrass 核心軟件未啓動。如果您的 umask 高於 0022...要解決此問題,您必須設置 umask0022 或更低。數值 0022 預設會授予所有人讀取新檔案的許可。

 

錯誤 使用PID運行的Greengrass後臺進程:<process-id>。有些系統元件無法啟動。檢查 'runtime.log' 是否有錯誤。

解決方案: 當您在這個時候 AWS IoT Greengrass 核心軟件未啓動。檢查 runtime.logcrash.log 對於具體錯誤信息。如需詳細資訊,請參閱日誌故障診斷.

 

裝置陰影與雲端不同步。

解決方案: 確保 AWS IoT Greengrass 擁有權限 iot:UpdateThingShadowiot:GetThingShadowGreengrass服務角色. 如果服務角色使用 AWSGreengrassResourceAccessRolePolicy 受管政策,預設會包含這些權限。

請參閱陰影同步逾時問題故障診斷.

 

錯誤:無法接受 TCP 連線。接受 tcp [::]:8000: accept4: 太多開啟的檔案。

解決方案: 您可能會在 greengrassd 腳本輸出。如果 AWS IoT Greengrass 核心軟體的檔案描述項限制已達閾值且需要提高此限制,可能會發生這種狀況。

使用以下命令,然並重新啟動 AWS IoT Greengrass 核心軟體。

ulimit -n 2048
注意

在此範例中,將提高限制到 2048。請為您使所用的案例選擇適當的數值。

 

錯誤 運行時執行錯誤:無法啓動Lambda容器。container_linux.go:259:啓動容器過程導致“process_linux.go:345:container初始化導致\"rootfs_linux.go:50:準備rootfs導致\\\"permissionrejected\\\"\""。

解決方案: 安裝 AWS IoT Greengrass 在根目錄下直接下載,或確保目錄 AWS IoT Greengrass 已安裝核心軟件及其父目錄 execute 每個人的權限。

 

警告 [WARN]-[5]GK遙控器: 檢索公鑰數據時出錯: ErrPrincipalNotConfigured:未設置MQTTCertificate私鑰。

解決方案: AWS IoT Greengrass 使用常用處理器驗證所有安全負責人的屬性。此警告在 runtime.log 預計除非您爲本地MQTT服務器指定了自定義私鑰。如需詳細資訊,請參閱AWS IoT Greengrass 核心安全性主體.

 

錯誤 嘗試使用角色時拒絕許可 arn:aws:iam::<account-id>:role/<role-name>訪問S3URLhttps://<region>-Greengrass-Updates.s3region>.amazonaws.com/core/<architecture>/Greengrass-Core-<Distribution-version>.tar.gz。

解決方案: 當空氣(OTA)更新失敗,您可能會看到此錯誤。在簽署人角色政策中,將目標AWS區域添加爲 Resource...此簽名人角色用於預先簽署S3URL的 AWS IoT Greengrass 軟件更新。有關詳細信息,請參閱 S3URL簽署人角色.

 

TheThethe AWS IoT Greengrass 核心 配置爲使用 網絡代理 您的 Lambda 功能無法進行傳出連接。

解決方案: 根據您的運行時間以及 Lambda 創建連接的功能,您也可能接收連接超時錯誤。確保您的 Lambda 功能使用適當的代理配置通過網絡代理連接。 AWS IoT Greengrass 將代理配置傳遞到用戶定義的配置 Lambda 通過 http_proxyhttps_proxy,和 no_proxy 環境變量。存取方式如下面 Python 程式碼片段所示。

import os print(os.environ['http_proxy'])

使用與環境中定義的變量相同的案例,例如,所有小寫字母 http_proxy 或所有大寫字母 HTTP_PROXY...對於這些變量, AWS IoT Greengrass 支持兩者。

注意

大多數用來連線的程式庫 (例如 boto3 或 cURL 和 python requests 套件),預設會使用這些環境變數。

 

此核心位於連線/中斷連線的無限迴圈。runtime.log 檔案包含連線和中斷連線項目的連續系列。

解決方案: 如果另一個裝置以硬式編碼為使用核心物件名稱做為對 之 MQTT 連線中的用戶端 ID,就會發生這種情形。AWS IoT. 相同 AWS 區域和 AWS 帳戶中的同步連線必須使用唯一的用戶端 ID。在預設情況下,核心使用核心物件名稱做為這些連線的用戶端 ID。

若要解決這個問題,您可以變更其他裝置用於連線的用戶端 ID (建議使用),或覆寫核心的預設值。

覆寫核心裝置的預設用戶端 ID

  1. 執行下列命令來停止 Greengrass 協助程式:

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
  2. 開放 greengrass-root/config/config.json 由 su 使用者編輯。

  3. coreThing 對象,添加 coreClientId 屬性,並將值設置爲您的自定義客戶端ID。值必須介於 1 到 128 個字元之間。在 AWS 帳戶的目前 AWS 區域中,這個值必須是唯一值。

    "coreClientId": "MyCustomClientId"
  4. 啟動協助程式。

    cd /greengrass-root/ggc/core/ sudo ./greengrassd start

 

錯誤 : 無法啟動 lambda 容器。container_linux.go: 259: 啟動容器程序導致「process_linux.go: 345: container init 導致「rootfs_linux.go: 62: 將「proc」掛載到 rootfs」

解決方案: 在某些平臺上,您可能會看到 runtime.log 當WhenWhen AWS IoT Greengrass 嘗試安裝安裝 /proc 文件系統創建 Lambda 容器。或者,您可能會看到類似錯誤,例如 operation not permittedEPERM...即使依賴檢查程序腳本通過的平臺上運行測試,也可能發生這些錯誤。

請嘗試下列其中一種可能的解決方案 :

  • 在 Linux 核心中啟用 CONFIG_DEVPTS_MULTIPLE_INSTANCES 選項。

  • 設置 /proc 主機上的裝載選項 rw,relatim 只有。

  • 將 Linux 核心升級至 4.9 版或更新版本。

注意

這個問題與掛載 /proc 以提供本機資源存取無關。

 

[錯誤]-運行時執行錯誤:無法啓動Lambda容器。{"errorstring":"無法初始化容器裝載:無法掩蔽覆蓋上層的Greengrass根:無法在目錄<GGC-PATH>中創建掩碼設備:存在文件"}

解決方案: 當部署失敗時,可能會在runtime.log中看到此錯誤。如果A Lambda 功能 AWS IoT Greengrass 組無法訪問 /usr Core文件系統中的目錄。

若要解決這個問題,請將本機磁碟區資源新增至群組,然後部署群組。此資源必須:

  • 指定 /usr 作爲 源路徑目標路徑.

  • 為擁有資源的 Linux 群組自動新增作業系統群組許可。

  • 附屬於 Lambda 函數並允許唯讀存取。

 

[錯誤]-部署失敗。{"deployymentid":"<deployment-id>","errorstring":"containertestprocesswithpid<pid>失敗:容器處理狀態:退出狀態1"}

解決方案: 當部署失敗時,可能會在runtime.log中看到此錯誤。如果A Lambda 功能 AWS IoT Greengrass 組無法訪問 /usr Core文件系統中的目錄。

您可以通過檢查來確認 GGCanary.log 對於其他錯誤。如果 Lambda 功能無法訪問 /usr 目錄, GGCanary.log 將包含以下錯誤:

[ERROR]-standard_init_linux.go:207: exec user process caused "no such file or directory"

若要解決這個問題,請將本機磁碟區資源新增至群組,然後部署群組。此資源必須:

  • 指定 /usr 作爲 源路徑目標路徑.

  • 為擁有資源的 Linux 群組自動新增作業系統群組許可。

  • 附屬於 Lambda 函數並允許唯讀存取。

 

解決方案: 您可能會看到 runtime.log 當 AWS IoT Greengrass 核心軟件未啓動,Linux內核版本爲4.19.57或更早版本。這個問題在 Debian 作業系統上可能比較常見。

要解決此問題,請執行下列項目之一:

  • 如果您正在運行 AWS IoT Greengrass Core軟件v1.9.3或更高版本,添加 system.useOverlayWithTmpfs 屬性至 配置JSON,並將值設置爲 true...例如:

    { "system": { "useOverlayWithTmpfs": true }, "coreThing": { "caPath": "root-ca.pem", "certPath": "cloud.pem.crt", "keyPath": "cloud.pem.key", ... }, ... }
  • 如果您正在運行 AWS IoT Greengrass 核心軟件v1.9.2或更早版本的RaspberryPI,更新至 AWS IoT Greengrass Core軟件v1.9.3或更高版本。若要取得 AWS IoT Greengrass 軟體無線更新的資訊,請參閱 。AWS IoT Greengrass 核心軟體的 OTA 更新.

  • 升級裝置上的 Linux 核心。我們建議使用 4.4 版或更新版本。

注意

錯誤訊息中會顯示您的 AWS IoT Greengrass Core 軟體版本。若要尋找您的 Linux 核心版本,請執行 uname -r.

 

錯誤 [debug]無法獲取路由。捨棄訊息。

解決方案: 檢查您的組中的訂閱,確保訂閱列表中列出的訂閱 [DEBUG] 消息存在。

 

錯誤 [錯誤24]太多打開<lambda-function>,[errno24]過多打開文件

解決方案: 您可能會在您的 Lambda 功能實例化功能日誌文件 StreamManagerClient 在功能處理器中。我們建議您將用戶端建立處理常式之外。如需詳細資訊,請參閱使用 StreamManagerClient 與流合作.

 

部署問題

使用以下資訊協助您排解部署的故障問題。

問題

 

您目前的部署無法運作,因此您想要回復到之前可正常運作的部署。

解決方案: 使用 AWS IoT 主控台 或 AWS IoT Greengrass API重新部署之前的工作部署。這會將對應的群組版本部署至您的核心裝置。

重新部署 (主控台)

  1. 在組配置頁面上,選擇 部署. 此頁面會顯示群組的部署歷史記錄,包括日期和時間、群組版本,以及每個部署嘗試的狀態。

  2. 尋找您要重新部署的資料列。在 狀態 列,選擇橢圓(),然後選擇 重新部署.

    顯示重新部署動作以進行部署的部署頁面。

重新部署 (CLI)

  1. 使用 List部署 要查找要重新部署的部署的ID。例如: 。

    aws greengrass list-deployments --group-id 74d0b623-c2f2-4cad-9acc-ef92f61fcaf7

    命令會傳回群組的部署清單。

    { "Deployments": [ { "DeploymentId": "8d179428-f617-4a77-8a0c-3d61fb8446a6", "DeploymentType": "NewDeployment", "GroupArn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/8dd1d899-4ac9-4f5d-afe4-22de086efc62", "CreatedAt": "2019-07-01T20:56:49.641Z" }, { "DeploymentId": "f8e4c455-8ac4-453a-8252-512dc3e9c596", "DeploymentType": "NewDeployment", "GroupArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/4ad66e5d-3808-446b-940a-b1a788898382", "CreatedAt": "2019-07-01T20:41:47.048Z" }, { "DeploymentId": "e4aca044-bbd8-41b4-b697-930ca7c40f3e", "DeploymentType": "NewDeployment", "GroupArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/1f3870b6-850e-4c97-8018-c872e17b235b", "CreatedAt": "2019-06-18T15:16:02.965Z" } ] }
    注意

    這些 AWS CLI 命令對群組和部署 ID 使用範例值。當您執行命令時,請務必取代範例值。

  2. 使用 創建部署 重新部署目標部署。將部署類型設置爲 Redeployment...例如:

    aws greengrass create-deployment --deployment-type Redeployment \ --group-id 74d0b623-c2f2-4cad-9acc-ef92f61fcaf7 \ --deployment-id f8e4c455-8ac4-453a-8252-512dc3e9c596

    命令會傳回新部署的 ARN 和 ID。

    { "DeploymentId": "f9ed02b7-c28e-4df6-83b1-e9553ddd0fc2", "DeploymentArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/deployments/f9ed02b7-c28e-4df6-83b1-e9553ddd0fc2" }
  3. 使用 getdeploy狀態 要獲得部署的狀態。

 

您會在日誌中看到部署 403 Forbidden (403 禁止) 錯誤。

解決方案: 確保 AWS IoT Greengrass 核心 雲中包括 "greengrass:*" 作爲允許的操作。

 

當您第一次執行 create-deployment 命令時,就會發生 ConcurrentDeployment 錯誤。

解決方案: 部署可能在進行中。您可以運行 獲取-部署狀態 查看是否創建了部署。如果尚未建立,可以再建立一次部署。

 

錯誤 Greengrass無權承擔與此賬戶相關的服務角色,或者錯誤: 失敗 TES服務角色與此帳戶無關。

解決方案: 當部署失敗時,可能會看到此錯誤。檢查Greengrass服務角色是否與您的 AWS 當前帳戶 AWS 地區。有關詳細信息,請參閱 管理 Greengrass 服務角色 (CLI)管理 Greengrass 服務角色 (主控台).

 

錯誤:無法在部署中執行下載步驟,下載時發生錯誤:下載群組定義檔案時發生錯誤:... x509:憑證已過期或無效

解決方案: 您可能會看到 runtime.log 當部署失敗。如果您收到 Deployment failed 包含消息的錯誤 x509: certificate has expired or is not yet valid,檢查設備時鐘。TLS 和 X.509 憑證提供安全基礎以便建置 IoT 系統,但是這些憑證在伺服器和用戶端上需要準確的時間。IoT 裝置應該具有正確的時間 (15 分鐘內),才能嘗試連線至 AWS IoT Greengrass 或其他使用伺服器憑證的 TLS 服務。有關詳細信息,請參閱 使用設備時間驗證AWSIot服務器證書AWS官方博客物聯網.

 

錯誤 簽名驗證期間出現錯誤。儲存庫未更新,將使用先前的索引檔案。GPG錯誤:https://dnw9lb6lzp2d8.cloudfront.netstableinrelease: 無法驗證以下簽名,因爲公鑰不可用: NO_PUBKEY68D644ABD示例

解決方案: 當用於驗證APT存儲庫包的信任密鑰時,您可能會看到此錯誤 AWS IoT Greengrass 缺少、已過期或無效。若要解決這個問題,請安裝 keyring 套件:

wget -O aws-iot-greengrass-keyring.deb https://d1onfpft10uf5o.cloudfront.net/greengrass-apt/downloads/aws-iot-greengrass-keyring.deb sudo dpkg -i aws-iot-greengrass-keyring.deb

如需詳細資訊,請參閱使用 apt 安裝 AWS IoT Greengrass 核心軟體.

 

部署尚未完成。

解決方案: 執行以下作業:

  • 請確認 AWS IoT Greengrass 協助程式有在您的核心裝置上執行作業。在您的核心裝置終端機執行以下命令檢查協助程式是否正在執行並啟動它,若需要的話。

    1. 檢查精靈是否有在運作:

      ps aux | grep -E 'greengrass.*daemon'

      若輸出中包含 /greengrass/ggc/packages/1.11.0/bin/daemon 適用的 root 項目,則表精靈正在運作。

      路徑的版本取決於安裝在您的核心裝置中的 AWS IoT Greengrass 核心軟體版本。

    2. 啟動精靈:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  • 確保您的核心裝置已連線,且核心連線端點的設定都正確。

 

錯誤 無法找到Java或Java8可執行文件或錯誤: 部署<部署ID>對於組<組ID>的新部署失敗錯誤:<worker-id>的工作人員無法初始化原因安裝的java版本無法初始化必須大於或等於8

解決方案: 如果已啓用StreamManager(流量管理器) AWS IoT Greengrass 核心,在部署組之前,必須在覈心設備上安裝Java8Runtime。有關詳細信息,請參閱 要求 對於StreamManager。當您使用 默認組創建 工作流程 AWS IoT 主控台 創建組。

或者,可以停用串流管理員,然後部署群組。如需詳細資訊,請參閱設定串流管理員設定 (主控台).

 

此部署沒有完成,且 runtime.log 含有多個「等待 1 秒讓容器停止」項目。

解決方案: 在您的核心裝置終端機執行下列命令以重新啟動 AWS IoT Greengrass 精靈。

cd /greengrass/ggc/core/ sudo ./greengrassd stop sudo ./greengrassd start

 

部署未完成,且 runtime.log 包含"[錯誤]-Greengrass部署錯誤:無法將部署狀態報告回雲{"deployymentid":"<deployment-id>","errorstring": “無法啓動放置,端點:https://<部署狀態>,錯誤: puthttps://<deployment-status>:proxyConnectTCP:x509:未知授權簽名證書""}

解決方案: 您可能會看到 runtime.log 當GreengrassCore配置爲使用HTTPS代理連接時,系統上不會信任代理服務器證書鏈。若要嘗試解決這個問題,請將憑證鏈結新增至根 CA 憑證。Greengrass 核心會將此檔案的憑證新增至 HTTPS 和 MQTT 與 的連線中用於 TLS 驗證的憑證集區。AWS IoT Greengrass.

下列範例顯示新增至根 CA 憑證檔案的 Proxy 伺服器 CA 憑證:

# My proxy CA -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIQWgIVAMHSAzWG/5YVRYtRQOxXUTEpHuEmApzGCSqGSIb3DQEK \nCwUAhuL9MQswCQwJVUzEPMAVUzEYMBYGA1UECgwP1hem9uLmNvbSBJbmMuMRww ... content of proxy CA certificate ... +vHIRlt0e5JAm5\noTIZGoFbK82A0/nO7f/t5PSIDAim9V3Gc3pSXxCCAQoFYnui GaPUlGk1gCE84a0X\n7Rp/lND/PuMZ/s8YjlkY2NmYmNjMCAXDTE5MTEyN2cM216 gJMIADggEPADf2/m45hzEXAMPLE= -----END CERTIFICATE----- # Amazon Root CA 1 -----BEGIN CERTIFICATE----- MIIDQTCCAimgF6AwIBAgITBmyfz/5mjAo54vB4ikPmljZKyjANJmApzyMZFo6qBg ADA5MQswCQYDVQQGEwJVUzEPMA0tMVT8QtPHRh8jrdkGA1UEChMGDV3QQDExBBKW ... content of root CA certificate ... o/ufQJQWUCyziar1hem9uMRkwFwYVPSHCb2XV4cdFyQzR1KldZwgJcIQ6XUDgHaa 5MsI+yMRQ+hDaXJiobldXgjUka642M4UwtBV8oK2xJNDd2ZhwLnoQdeXeGADKkpy rqXRfKoQnoZsG4q5WTP46EXAMPLE -----END CERTIFICATE-----

默認情況下,根CA證書文件位於 /greengrass-root/certs/root.ca.pem...要查找核心設備上的位置,請檢查 crypto.caPath 屬性 配置JSON.

注意

greengrass-root 代表 AWS IoT Greengrass 核心軟體在裝置上安裝所在的路徑。通常,這是 /greengrass 目錄。

 

錯誤 部署<部署ID>類型新部署組<組ID>失敗錯誤: 處理時出錯。組配置無效:112或[1190]文件上沒有RW權限: <path>。

解決方案: 確保 <path> 目錄對目錄具有讀取權限。

 

錯誤:已將 <list-of-function-arns> 設定為以根使用者身分執行,但未將 Greengrass 設定為使用根許可執行 Lambda 函數。

解決方案: 您可能會看到 runtime.log 當部署失敗。確保已配置 AWS IoT Greengrass 允許 Lambda 要使用root權限運行的函數。更改值 allowFunctionsToRunAsRootgreengrass_root/config/config.jsonyes 或更改 Lambda 作爲另一個用戶/組運行的功能。如需詳細資訊,請參閱以 Root 身分執行 Lambda 函數.

 

錯誤 部署<部署ID>類型新部署組<組ID>失敗錯誤: Greengrass部署錯誤:無法在部署中執行下載步驟。處理時錯誤:無法加載下載的組文件:無法根據用戶名找到UID,用戶名:GGC_User:用戶:未知用戶GGC_User。

解決方案: 如果 默認訪問身份 的 AWS IoT Greengrass 群組 使用標準系統帳戶, ggc_user 用戶和 ggc_group 組必須存在於設備上。有關如何添加用戶和組的說明,請參閱此項 步驟. 請務必輸入完全如所示的名稱。

 

錯誤 [錯誤]-運行時執行錯誤:無法啓動Lambda容器。{"errorstring":"無法初始化容器裝載:無法掩蔽覆蓋上層的Greengrass根:無法在目錄<GGC-PATH>中創建掩碼設備:存在文件"}

解決方案: 您可能會看到 runtime.log 當部署失敗。如果A Lambda Greengrass集團的功能無法訪問 /usr Core文件系統中的目錄。要解決此問題,請添加 本地卷資源 然後部署組。資源必須:

  • 指定 /usr 作爲 源路徑目標路徑.

  • 為擁有資源的 Linux 群組自動新增作業系統群組許可。

  • 附屬於 Lambda 函數並允許唯讀存取。

 

錯誤 部署<部署ID>類型<group-id>的新部署失敗錯誤:處理開始失敗:container_linux.go:259:啓動container過程導致“process_linux.go:250:運行“執行設置”流程爲“已啓用”導致\“wait:nochildprocesses\"”。

解決方案: 當部署失敗時,可能會看到此錯誤。重新嘗試部署。

 

錯誤 [warn]-mqtt[client]dialtcp:查找<host-prefix>-ats.iot。<region>.amazonaws.com:無此類主機... [錯誤]-Greengrass部署錯誤:無法將部署狀態報告回雲...NET/HTTP:請求在等待連接時取消(客戶端.等待標頭時超時)

解決方案: 如果您正在使用 systemd-resolved,這支持 DNSSEC 默認設置。因此,無法辨識許多公有網域。嘗試達到 AWS IoT Greengrass 端點未能找到主機,因此您的部署仍然在 In Progress 狀態。

您可以使用下列命令和輸出,來測試是否有此問題。將端點中的 region 預留位置取代為您的 AWS 區域。

$ ping greengrass-ats.iot.region.amazonaws.com ping: greengrass-ats.iot.region.amazonaws.com: Name or service not known
$ systemd-resolve greengrass-ats.iot.region.amazonaws.com greengrass-ats.iot.region.amazonaws.com: resolve call failed: DNSSEC validation failed: failed-auxiliary

一個可能的解決方案是禁用 DNSSEC...當WhenWhen DNSSECfalse,DNS查找 DNSSEC 已驗證。有關詳細信息,請參閱 已知問題 對於 systemd.

  1. 添加 DNSSEC=false/etc/systemd/resolved.conf.

  2. 重新啟動 systemd-resolved.

有關 resolved.confDNSSEC,運行 man resolved.conf 在您的航站樓。

 

建立群組和建立函數問題

使用以下信息幫助解決創建A的問題 AWS IoT Greengrass 群組 或 Greengrass Lambda 功能。

 

錯誤 組的“IsolationMode”配置無效。

解決方案: 此錯誤發生在 IsolationModeDefaultConfigfunction-definition-version 不支持。支援的值為 GreengrassContainer 和 。NoContainer.

 

錯誤 用於ARN<function-arn>的“isolationmode”配置無效。

解決方案: 此錯誤發生在 IsolationMode <function-arn>的<function-arn> function-definition-version 不支持。支援的值為 GreengrassContainer 和 。NoContainer.

 

錯誤 在IsolationMode=nocontainer中不允許使用ARN<function-arn>的備忘錄大小配置。

解決方案: 當您指定 MemorySize 值並且您選擇運行而無需容器化。 Lambda 沒有容器化的運行功能不能具有內存限制。您可以刪除限制或者您可以更改 Lambda 運行的功能 AWS IoT Greengrass 容器。

 

錯誤 在IsolationMode=nocontainer中不允許使用ARN<function-arn>訪問SYSFS配置。

解決方案: 當您指定此錯誤時 true 對於 AccessSysfs 而且您選擇在沒有容器化的情況下運行。 Lambda 無容器化的功能必須更新代碼,以直接訪問文件系統,且無法使用 AccessSysfs...您可以指定 false 對於 AccessSysfs 或者您可以更改 Lambda 運行的功能 AWS IoT Greengrass 容器。

 

錯誤 在IsolationMode=Greengrasscontainer中需要使用ARN<function-arn>的備忘錄大小配置。

解決方案: 由於您未指定 MemorySize 限制 Lambda 您正在運行的功能 AWS IoT Greengrass 容器。指定 MemorySize 值以解決錯誤。

 

錯誤 函數<function-arn>指不允許在isolationmode=nocontainer中類型的<resource-type>的資源。

解決方案: 您無法訪問 Local.DeviceLocal.VolumeML_Model.SageMaker.JobML_Model.S3_Object,或 S3_Object.Generic_Archive 當您運行 Lambda 無容器化功能。若您需要這些資源類型,您必須在 AWS IoT Greengrass 容器中執行。在無容器化的情況下執行時,您也可以透過變更 Lambda 函數中的程式碼來直接存取本機裝置。

 

錯誤 不允許使用ARN<function-arn>執行功能配置。

解決方案: 創建系統時出現此錯誤 Lambda 功能 GGIPDetectorGGCloudSpooler 您指定了 IsolationModeRunAs 配置。您必須忽略 Execution 此係統的參數 Lambda 功能。

 

Discovery 問題

使用下列資訊來協助您排除 AWS IoT Greengrass Discovery Service 的問題。

 

錯誤 設備是多個組的成員,設備不能超過10個組

解決方案: 這是已知的限制。A Greengrass設備 最多可爲10個組。

 

機器學習資源問題

使用下列資訊協助疑難排解機器學習資源的問題。

 

InvalidMLModelOwner - GroupOwnerSetting 在 ML 模型資源中提供,但是 GroupOwner 或 GroupPermission 不存在

解決方案:如果機器學習資源包含 ResourceDownloadOwnerSetting 物件,但未定義必要的 GroupOwnerGroupPermission 屬性,便會收到此錯誤訊息。若要解決此問題,請定義遺失的屬性。

 

附加 Machine Learning 資源時,NoContainer 函數無法設定權限。<function-arn> 係指在資源存取政策中,具有權限 <ro/rw> 的 Machine Learning 資源 <resource-id>。

解決方案:如果非容器化 Lambda 函數指定機器學習資源的功能層級權限,便會收到此錯誤訊息。非容器化函數必須從機器學習資源上定義的資源擁有者權限繼承權限。若要解決這個問題,請選擇 inherit resource owner permissions (繼承資源擁有者權限) (主控台),或 從 Lambda 函數的資源存取政策 (API) 移除權限

 

函數 <function-arn> 係指在資源 <resource-id> ResourceAccessPolicy 和資源 OwnerSetting 中具有遺失權限的 Machine Learning 資源。

解決方案:如果未針對附加的 Lambda 函數或資源,設定機器學習資源的權限,便會收到此錯誤訊息。若要解決此問題,請設定 Lambda 函數 ResourceAccessPolicy 屬性中的權限,或資源的 OwnerSetting 屬性。

 

函數 <function-arn> 係指具有 \"rw\" 權限的 Machine Learning 資源 <resource-id>,而資源擁有者設定 GroupPermission 只允許 \"ro\"。

解決方案:如果為附加 Lambda 函數定義的存取權限超過為機器學習資源定義的資源擁有者權限,便會收到此錯誤訊息。若要解決這個問題,請設定權限限制較多的 Lambda 函數,或資源擁有者限制較少的權限。

 

NoContainer 函數 <function-arn> 係指巢狀目的地路徑的資源。

解決方案:如果多個附加至非容器化 Lambda 函數的機器學習資源使用相同目的地路徑或巢狀目的地路徑,便會收到此錯誤訊息。若要解決此問題,請為資源指定個別目的地路徑。

 

Lambda <function-arn> 透過共用相同群組擁有者 ID 來獲得資源 <resource-id> 的存取權

解決方案:如果 runtime.log 將相同的作業系統群組指定為 Lambda 函式的執行身分和機器學習資源的資源擁有者,但資源未附加至 Lambda 函數,便會收到此錯誤訊息。這種設定能提供 Lambda 函數的隱含權限,不用 AWS IoT Greengrass 授權也可以用於存取資源。

若要解決這個問題,請使用其中一個屬性的不同作業系統群組,或將機器學習資源附加至 Lambda 函數。

AWS IoT GreengrassDocker 中的 核心問題

請使用以下資訊,針對 Docker 容器中執行 AWS IoT Greengrass 核心 的問題進行疑難排解。

 

錯誤 未知選項:-無電子郵件。

解決方案: 當您運行 aws ecr get-login 命令。請確定您已安裝最新的 AWS CLI 版本 (例如,執行:pip install awscli --upgrade --user)。如果您使用 Windows 並已使用 MSI 安裝程式安裝 CLI,您必須重新啟動安裝程序。更多信息,請參閱 安裝 AWS Command Line Interface MicrosoftWindows上AWS Command Line Interface 使用者指南.

 

警告 已禁用IPv4。網路將無法運作。

解決方案: 運行時,您可能會收到此警告或類似消息 AWS IoT Greengrass 在Linux計算機上。請依此步驟所述啟用 IPv4 網路轉寄。AWS IoT Greengrass 雲端部署和 MQTT 通訊無法在未啟用 IPv4 轉寄時使用。如需詳細資訊,請參閱 Docker 文件中的在執行時間設定命名空間核心參數 (sysctls)

 

錯誤 防火牆正在阻止窗口和容器之間的文件共享。

解決方案: 您可能會收到這個錯誤或 Firewall Detected 消息。如果您登入虛擬私有網路 (VPN),而您的網路設定防止掛載共用磁碟機,也可能會發生這個錯誤。在這種情況下,請關閉 VPN 並重新執行 Docker 容器。

 

錯誤 調用GetAuthorisationToke操作時出現錯誤(訪問拒絕例外): 用戶:arn:aws:iam::<account-id>:user/<user-name>無權執行:ecr:GetAuthorization資源:*

在運行 aws ecr get-login-password 如果沒有足夠的權限訪問 Amazon ECR 存儲庫。更多信息,請參閱 Amazon ECR 存儲庫策略示例訪問One Amazon ECR 存儲庫Amazon ECR 用戶指南.

 

錯誤 無法爲Greengrass創建容器: 衝突。容器名稱 "/aws-iot-greengrass" 已在使用中。

解決方案: 當容器名稱由舊版容器執行使用時,可能會發生這種情況。若要解決這個問題,請執行以下命令來移除舊的 Docker 容器:

docker rm -f $(docker ps -a -q -f "name=aws-iot-greengrass")

 

錯誤 [致命]-由於意外錯誤,未能重置線程的裝載命名空間:“操作不允許”。為了保持一致性,GGC 會當機且需要手動重新啟動。

解決方案: 此錯誤 runtime.log 當您嘗試部署A時 GreengrassContainer Lambda 功能 AWS IoT Greengrass 核心 在靠泊裝置容器中運行。目前僅有 NoContainer Lambda 可以將功能部署到GreengrassDocker容器中。

解決這個問題 確保全部 Lambda 功能位於 NoContainer 模式 並開始新部署。然後,在啓動容器時,不要綁定現有 deployment 目錄到 AWS IoT Greengrass 核心 Docker容器。而是建立一個空的 deployment 目錄來取代並在 Docker 容器中綁定掛載該目錄。這允許新的Docker容器接收最新部署 Lambda 功能運行 NoContainer 模式。

如需詳細資訊,請參閱在 Docker 容器中執行 AWS IoT Greengrass.

日誌故障診斷

您可以設定 Greengrass 群組的記錄設定,例如要將日誌傳送到 CloudWatch Logs、將日誌存放在本機檔案系統,或是兩者都要。要在故障排除問題時獲得詳細信息,可以臨時將日誌記錄級別更改爲 DEBUG...在部署組時,記錄設置的更改生效。如需詳細資訊,請參閱設定 AWS IoT Greengrass 的日誌記錄.

在本地文件系統上, AWS IoT Greengrass 在以下位置存儲日誌。在檔案系統中讀取日誌需要根許可。

greengrass-root/ggc/var/log/crash.log

顯示 AWS IoT Greengrass 核心 毀損所產生的訊息。

greengrass-root/ggc/var/log/system/runtime.log

顯示元件故障的訊息。

greengrass-root/ggc/var/log/system/

包含來自 AWS IoT Greengrass 系統元件的所有日誌,例如憑證管理器和連線管理器。通過使用 ggc/var/log/system/ggc/var/log/system/runtime.log,您應該能夠找出 AWS IoT Greengrass 系統組件。

greengrass-root/ggc/var/log/user/

包含來自使用者定義的 Lambda 函數之所有日誌。請檢查此資料夾尋找來自您的本機 Lambda 函數的錯誤訊息。

注意

默認情況下, greengrass-root/greengrass 目錄。如果 寫入目錄 已配置,日誌位於該目錄下。

如果日誌設定為存放於雲端,則可用 CloudWatch Logs 來檢視日誌訊息。crash.log 僅在文件系統日誌中找到 AWS IoT Greengrass 核心 設備。

IFIFIF AWS IoT 已配置爲將日誌寫入 CloudWatch,如果系統組件嘗試連接到 AWS IoT.

如需 AWS IoT Greengrass 日誌記錄的詳細資訊,請參閱。使用 AWS IoT Greengrass 日誌進行監控.

注意

日誌 AWS IoT Greengrass 核心軟件v1.0存儲在 greengrass-root/var/log 目錄。

故障排除存儲問題

當本機檔案儲存空間已滿時,有些元件可能會開始故障:

  • 不會更新本機陰影。

  • 新的 AWS IoT Greengrass 核心 MQTT 伺服器憑證無法於本機下載。

  • 部署失敗。

您應該隨時注意本機中可用的自由空間容量。您可以根據部署的大小計算自由空間 Lambda 功能,記錄配置(參見 日誌故障診斷)以及本地存儲的陰影數量。

訊息故障診斷

所有在本地發送的消息 AWS IoT Greengrass 隨Qos0發送。在預設情況下,AWS IoT Greengrass 存放訊息於記憶體內的佇列中。因此,當 Greengrass 核心重新啟動時 (例如在群組部署或裝置重新開機後),未處理的訊息便會遺失。但是,您可以配置 AWS IoT Greengrass (v1.6 or later)向文件系統中的緩存消息保持不變,這樣它們就會在覈心重新啓動。您也可以設定佇列的容量。如果您設定佇列的容量,請確定其值大於或等於 262144 位元組 (256 KB)。否則,AWS IoT Greengrass 可能不會正常啟動。如需詳細資訊,請參閱雲端目標的 MQTT 訊息佇列.

注意

使用預設記憶體內佇列,當服務中斷最低時,我們建議您部署群組或重新啟動裝置。

您也可以設定核心以建立 的持久性工作階段。AWS IoT. 這能讓核心在離線時接收從 AWS 雲端傳送的訊息。如需詳細資訊,請參閱與 AWS IoT Core 的 MQTT 持久性工作階段.

陰影同步逾時問題故障診斷

若 Greengrass 核心裝置和雲端間的通訊有明顯的延遲,則陰影同步可能會因為逾時而失敗。在這種情況下,您應該會看到與以下內容相似的日誌項目:

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

可能的修復方式是設定核心裝置等待主機回應的時間。打開 配置JSON 文件 greengrass-root/config 並添加 system.shadowSyncTimeout 字段,超時值爲秒。例如: 。

{ "system": { "shadowSyncTimeout": 10 }, "coreThing": { "caPath": "root-ca.pem", "certPath": "cloud.pem.crt", "keyPath": "cloud.pem.key", ... }, ... }

如果否 shadowSyncTimeout 值在 config.json,默認值爲5秒。

注意

對於 AWS IoT Greengrass 核心軟件v1.6及更早版本,默認 shadowSyncTimeout 爲1秒。

查看 AWS IoT Greengrass 論壇

如果您無法使用本主題中的故障排除信息解決問題,可以搜索 AWS IoT Greengrass 論壇 關於相關問題或發佈新的ForumThread。成員 AWS IoT Greengrass 團隊主動監控論壇。