配置 IDT 設置以運行AWS IoT Greengrass資格套件 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長壽命階段。如需詳細資訊,請參閱 AWS IoT Greengrass V1 維護政策 。在此日期之後, AWS IoT Greengrass V1 不會發佈提供功能、增強功能、錯誤修正或安全修補程式的更新。在 上執行的裝置 AWS IoT Greengrass V1 不會中斷,並會繼續運作和連線至雲端。我們強烈建議您遷移至 AWS IoT Greengrass Version 2,這會新增重要的新功能,並支援其他平台

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

配置 IDT 設置以運行AWS IoT Greengrass資格套件

在執行測試之前,您必須先設定AWS登入資料和裝置。

設定 AWS 憑證

您必須在<device-tester-extract-location> /configs/config.jsonfile. 針對建立和設定 AWS 帳戶中建立的 IDT for AWS IoT Greengrass 使用者,使用登入資料。您可以使用下列兩種方式的其中之一指定登入資料:

  • 登入資料檔案

  • 環境變數

IDT 會使用與 AWS CLI 相同的登入資料檔案。如需詳細資訊,請參閱組態與登入資料檔案

登入資料檔案的位置會有所不同,取決於您使用的作業系統:

  • macOS, Linux: ~/.aws/credentials

  • Windows:C:\Users\UserName\.aws\credentials

添加您的AWS登入資料到credentials檔案的格式如下所示:

[default] aws_access_key_id = <your_access_key_id> aws_secret_access_key = <your_secret_access_key>

若要設定 IDT inAWS IoT Greengrass以使用AWS登入資料credentials文件中,編輯config.json檔案如下所示:

{ "awsRegion": "us-west-2", "auth": { "method": "file", "credentials": { "profile": "default" } } }
注意

如果您不使用default AWS描述檔名稱,請務必在config.jsonfile. 如需詳細資訊,請參閱具名描述檔

環境變數是由作業系統維護且由系統命令使用的變數。如果您關閉 SSH 工作階段,則不會儲存它們。IDT inAWS IoT Greengrass可以使用AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY環境變數來存儲AWS登入資料。

若要在 Linux、macOS 或 Unix 上設定這些變數,請使用 export

export AWS_ACCESS_KEY_ID=<your_access_key_id> export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>

若要在 Windows 上設定這些變數,請使用 set

set AWS_ACCESS_KEY_ID=<your_access_key_id> set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>

若要設定 IDT 來使用環境變數,請在 config.json 檔案中編輯 auth 區段。請見此處範例:

{ "awsRegion": "us-west-2", "auth": { "method": "environment" } }

設定 device.json

除此之外AWSIDT inAWS IoT Greengrass需要測試執行所在裝置的相關資訊 (例如 IP 地址、登入資訊、作業系統和 CPU 架構)。

您必須使用位於 <device_tester_extract_location>/configs/device.json 中的 device.json 範本提供此資訊:

Physical device
[ { "id": "<pool-id>", "sku": "<sku>", "features": [ { "name": "os", "value": "linux | ubuntu | openwrt" }, { "name": "arch", "value": "x86_64 | armv6l | armv7l | aarch64" }, { "name": "container", "value": "yes | no" }, { "name": "docker", "value": "yes | no" }, { "name": "streamManagement", "value": "yes | no" }, { "name": "hsi", "value": "yes | no" }, { "name": "ml", "value": "mxnet | tensorflow | dlr | mxnet,dlr,tensorflow | no" }, *********** Remove the section below if the device is not qualifying for ML **************, { "name": "mlLambdaContainerizationMode", "value": "container | process | both" }, { "name": "processor", "value": "cpu | gpu" }, ****************************************************************************************** ], *********** Remove the section below if the device is not qualifying for HSI *************** "hsm": { "p11Provider": "/path/to/pkcs11ProviderLibrary", "slotLabel": "<slot_label>", "slotUserPin": "<slot_pin>", "privateKeyLabel": "<key_label>", "openSSLEngine": "/path/to/openssl/engine" }, ******************************************************************************************** *********** Remove the section below if the device is not qualifying for ML **************** "machineLearning": { "dlrModelPath": "/path/to/compiled/dlr/model", "environmentVariables": [ { "key": "<environment-variable-name>", "value": "<Path:$PATH>" } ], "deviceResources": [ { "name": "<resource-name>", "path": "<resource-path>", "type": "device | volume" } ] }, ****************************************************************************************** "kernelConfigLocation": "", "greengrassLocation": "", "devices": [ { "id": "<device-id>", "connectivity": { "protocol": "ssh", "ip": "<ip-address>", "port": 22, "auth": { "method": "pki | password", "credentials": { "user": "<user-name>", "privKeyPath": "/path/to/private/key", "password": "<password>" } } } } ] } ]
注意

如果 method 是設定為 pki,則指定 privKeyPath

如果 method 是設定為 password,則指定 password

Docker container
[ { "id": "<pool-id>", "sku": "<sku>", "features": [ { "name": "os", "value": "linux | ubuntu | openwrt" }, { "name": "arch", "value": "x86_64" }, { "name": "container", "value": "no" }, { "name": "docker", "value": "no" }, { "name": "streamManagement", "value": "yes | no" }, { "name": "hsi", "value": "no" }, { "name": "ml", "value": "mxnet | tensorflow | dlr | mxnet,dlr,tensorflow | no" }, *********** Remove the section below if the device is not qualifying for ML **************, { "name": "mlLambdaContainerizationMode", "value": "process" }, { "name": "processor", "value": "cpu | gpu" }, ****************************************************************************************** ], *********** Remove the section below if the device is not qualifying for ML **************** "machineLearning": { "dlrModelPath": "/path/to/compiled/dlr/model", "environmentVariables": [ { "key": "<environment-variable-name>", "value": "<Path:$PATH>" } ], "deviceResources": [ { "name": "<resource-name>", "path": "<resource-path>", "type": "device | volume" } ] }, ****************************************************************************************** "kernelConfigLocation": "", "greengrassLocation": "", "devices": [ { "id": "<device-id>", "connectivity": { "protocol": "docker", "containerId": "<container-name | container-id>", "containerUser": "<user>" } } ] } ]

如下所述,包含值的所有欄位皆為必要:

id

使用者定義的英數字元 ID,可唯一識別裝置的集合,稱為「裝置集區」。屬於同一個集區的裝置必須有相同的硬體。當您執行測試套件,集區中的裝置會用來將工作負載平行化。多個裝置用來執行不同的測試。

sku

可唯一識別測試裝置的英數字元值。SKU 用來追蹤合格的主機板。

注意

如果您想要在 AWS Partner 裝置目錄中列出您的電路板,在此處指定的 SKU 必須符合您在列名程序中使用的 SKU。

features

包含裝置支援功能的陣列。所有功能都是必需的。

osarch

支援的作業系統 (OS) 和架構組合:

  • linux, x86_64

  • linux, armv6l

  • linux, armv7l

  • linux, aarch64

  • ubuntu, x86_64

  • openwrt, armv7l

  • openwrt, aarch64

注意

如果您使用 IDT 來測試AWS IoT Greengrass,則只支援 x86_64 Docker 架構。

container

驗證裝置是否符合在 Greengrass 核心上以容器模式執行 Lambda 函數的所有軟體和硬體需求。

有效值為yes或者no

docker

驗證裝置是否符合所需的所有技術相依性,以使用 Greengrass Docker 應用程式部署連接器來執行容器

有效值為yes或者no

streamManagement

驗證裝置是否符合執行 AWS IoT Greengrass 串流管理員需要的所有必要技術相依性。

有效值為yes或者no

hsi

驗證提供的 HSI 共用程式庫是否可以與硬體安全模組 (HSM) 溝通,並正確實作所需的 PKCS#11 API。HSM 和共用程式庫必須能夠簽署 CSR、執行 TLS 操作並提供正確的金鑰長度和公開金鑰演算法。

有效值為yes或者no

ml

驗證裝置符合所有必要的技術相依性,以便在本機執行 ML 推論。

有效值可以是mxnettensorflowdlr,以及no(例如,mxnetmxnet,tensorflowmxnet,tensorflow,dlr, 或no

mlLambdaContainerizationMode

驗證裝置是否符合在 Greengrass 裝置上以容器模式執行 ML 推論的所有必要技術相依性。

有效值為containerprocess, 或both

processor

驗證裝置是否符合指定處理器類型的所有硬體需求。

有效值為cpu或者gpu

注意

如果您不想使用containerdockerstreamManagerhsi, 或ml功能,您可以設定相應的valueno

Docker 僅支持streamManagementml

machineLearning

選用。ML 資格測試的組態資訊。如需詳細資訊,請參閱 設定 device.json 以取得 ML 資格

hsm

選用。使用 AWS IoT Greengrass 硬體安全模組 (HSM) 進行測試的組態資訊。否則,應省略 hsm 屬性。如需詳細資訊,請參閱 硬體安全整合

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

hsm.p11Provider

PKCS#11 實作的 libdl-loadable 程式庫的絕對路徑。

hsm.slotLabel

用於識別硬體模組的插槽標籤。

hsm.slotUserPin

用於驗證使用者 PIN。AWS IoT Greengrass核心添加到模塊中。

hsm.privateKeyLabel

用於識別硬體模組中之金鑰的標籤。

hsm.openSSLEngine

OpenSSL 引擎 .so 檔案的絕對路徑,此檔案可在 OpenSSL 上啟用 PKCS#11 支援。由 AWS IoT Greengrass OTA 更新代理程式使用。

devices.id

使用者定義的唯一識別符,用於識別要測試的裝置。

connectivity.protocol

用來與此裝置通訊的通訊協定。目前,唯一支援的值是實體裝置的 ssh,以及 Docker 容器的 docker

connectivity.ip

要測試之裝置的 IP 位址。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.containerId

要測試之 Docker 容器的容器 ID 或名稱。

只有當 connectivity.protocol 設為 docker 時,才會套用此屬性。

connectivity.auth

連線的驗證資訊。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.auth.method

用來透過指定的連線通訊協定存取裝置的驗證方法。

支援的值如下:

  • pki

  • password

connectivity.auth.credentials

用於驗證的燈入資料。

connectivity.auth.credentials.password

用於登入要測試裝置的密碼。

只有當 connectivity.auth.method 設為 password 時,才會套用此值。

connectivity.auth.credentials.privKeyPath

用來登入待測裝置之私有金鑰的完整路徑。

只有當 connectivity.auth.method 設為 pki 時,才會套用此值。

connectivity.auth.credentials.user

登入要測試之裝置的使用者名稱。

connectivity.auth.credentials.privKeyPath

用來登入要測試之裝置的私有金鑰的完整路徑。

connectivity.port

選用。用於 SSH 連接的端口號。

預設值為 22。

此屬性僅適用於connectivity.protocol已設定為ssh

greengrassLocation

AWS IoT Greengrass Core 軟體在您裝置上的位置。

對於實體裝置,只有當您使用 AWS IoT Greengrass 的現有安裝時,才會使用此值。使用此屬性指示 IDT 使用安裝在您裝置上的 AWS IoT Greengrass Core 軟體版本。

從 AWS IoT Greengrass 提供的 Docker 映像或 Dockerfile 的 Docker 容器中執行測試時,將此值設為 /greengrass

kernelConfigLocation

選用。(選用) 核心組態檔案的路徑。AWS IoTDevice Tester 會使用這個檔案檢查裝置是否已啟用必要的核心功能。如果未指定,IDT 會使用以下路徑來搜尋核心組態檔案:/proc/config.gz/boot/config-<kernel-version>。AWS IoTDevice Tester 會使用其找到的第一個路徑。

設定 device.json 以取得 ML 資格

本節說明裝置組態檔案中適用於 ML 資格的選用屬性。如果您計劃針對 ML 資格執行測試,則必須定義適用於您的使用案例的屬性。

您可以使用 device-ml.json 範本來定義裝置的組態設定。此範本包含選用的 ML 屬性。您也可以使用 device.json 並新增 ML 資格屬性。這些檔案位於 <device-tester-extract-location>/configs 中,並包含 ML 資格屬性。如果您使用 device-ml.json,您必須在執行 IDT 測試之前將檔案重新命名為 device.json

如需不適用於 ML 資格之裝置組態屬性的相關資訊,請參閱 設定 device.json

 

features 陣列中的 ml

您的主機板支援的 ML 框架。此屬性需要 IDT v3.1.0 或更新版本。

  • 如果您的主機板只支援一個框架,請指定該框架。例如:

    { "name": "ml", "value": "mxnet" }
  • 如果您的主機板支援多個框架,請以逗號分隔的清單指定框架。例如:

    { "name": "ml", "value": "mxnet,tensorflow" }
features 陣列中的 mlLambdaContainerizationMode

您想要測試的容器化模式此屬性需要 IDT v3.1.0 或更新版本。

  • 選擇process以非容器化 Lambda 函數執行 ML 推論程式碼。此選項需要 AWS IoT Greengrass v1.10.x 或更新版本。

  • 選擇container以容器化 Lambda 函數執行 ML 推論程式碼。

  • 選擇 both 以兩種模式執行 ML 推論程式碼。此選項需要 AWS IoT Greengrass v1.10.x 或更新版本。

features 陣列中的 processor

指出主機板支援的硬體加速器。此屬性需要 IDT v3.1.0 或更新版本。

  • 如果您的主機板使用 CPU 做為處理器,請選擇 cpu

  • 如果您的主機板使用 GPU 做為處理器,請選擇 gpu

machineLearning

選用。ML 資格測試的組態資訊。此屬性需要 IDT v3.1.0 或更新版本。

dlrModelPath

使用 dlr 框架時需要。DLR 編譯模型目錄的絕對路徑,必須命名為 resnet18。如需詳細資訊,請參閱 編譯 DLR 模型

注意

以下是 macOS 上的範例路徑:/Users/<user>/Downloads/resnet18

environmentVariables

鍵值組的陣列,可以動態地將設定傳遞給 ML 推論測試。對於 CPU 裝置為選用。您可以使用此區段來新增裝置類型所需的框架特定環境變數。如需這些需求的相關資訊,請參閱框架或裝置的官方網站。例如,若要在某些裝置上執行 MxNet 推論測試,可能需要下列環境變數。

"environmentVariables": [ ... { "key": "PYTHONPATH", "value": "$MXNET_HOME/python:$PYTHONPATH" }, { "key": "MXNET_HOME", "value": "$HOME/mxnet/" }, ... ]
注意

value 欄位可能會根據您的 MxNet 安裝而有所不同。

如果您正在測試使用容器化,為 GPU 庫添加環境變量。這使得 GPU 可以執行計算。若要使用不同的 GPU 程式庫,請參閱程式庫或裝置的官方文件。

注意

如果 mlLambdaContainerizationMode 功能設定為 containerboth,請設定下列鍵。

"environmentVariables": [ { "key": "PATH", "value": "<path/to/software/bin>:$PATH" }, { "key": "LD_LIBRARY_PATH", "value": "<path/to/ld/lib>" }, ... ]
deviceResources

GPU 裝置所需。包含本機資源,可以通過 Lambda 函數訪問。使用此區段可新增本機裝置和磁碟區資源。

  • 對於裝置資源,請指定 "type": "device"。對於 GPU 裝置,裝置資源應該是 /dev 下的 GPU 相關裝置檔案。

    注意

    /dev/shm 目錄是例外狀況。它僅能設為磁碟區資源。

  • 對於磁碟區資源,請指定 "type": "volume"