

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 設定 IDT AWS IoT Greengrass 設定以執行資格套件
<a name="set-config"></a>

執行測試之前，您必須在主機電腦上設定 AWS 登入資料和裝置的設定。

## 設定您的 AWS 登入資料
<a name="cfg-aws-gg"></a>

您必須在 `<device-tester-extract-location> /configs/config.json` 檔案中設定 IAM 使用者登入資料。使用在 中建立之 IDT for AWS IoT Greengrass 使用者的登入資料[建立和設定 AWS 帳戶](dev-tst-prereqs.md#config-aws-account-for-idt)。您可以使用下列兩種方式的其中之一指定登入資料：
+ 憑證檔案
+ 環境變數

### 使用 AWS 登入資料檔案設定登入資料
<a name="config-cred-file"></a>

IDT 會使用與 AWS CLI相同的登入資料檔案。如需詳細資訊，請參閱[組態與登入資料檔案](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html)。

登入資料檔案的位置會有所不同，取決於您使用的作業系統：
+ 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>
```

若要 AWS IoT Greengrass 將 IDT for 設定為使用 `credentials` 檔案中的 AWS 登入資料，請編輯 `config.json` 檔案，如下所示：

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

**注意**  
如果您不使用`default` AWS 設定檔，請務必變更`config.json`檔案中的設定檔名稱。如需詳細資訊，請參閱[具名描述檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)。

### 使用環境變數設定 AWS 登入資料
<a name="config-env-vars"></a>

環境變數是由作業系統維護且由系統命令使用的變數。如果您關閉 SSH 工作階段，則不會儲存它們。IDT for AWS IoT Greengrass 可以使用 `AWS_ACCESS_KEY_ID`和 `AWS_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
<a name="device-config"></a>

除了 AWS 登入資料之外，IDT for AWS 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 Device Catalog 中列出您的電路板，您在此處指定的 SKU 必須符合您在列出程序中使用的 SKU。

`features`  
包含裝置支援功能的陣列。所有功能都是必要的。    
`os` 和 `arch`  
  
支援的作業系統 (OS) 和架構組合：  
+ `linux`, `x86_64`
+ `linux`, `armv6l`
+ `linux`, `armv7l`
+ `linux`, `aarch64`
+ `ubuntu`, `x86_64`
+ `openwrt`, `armv7l`
+ `openwrt`, `aarch64`
如果您使用 IDT 來測試在 Docker 容器中 AWS IoT Greengrass 執行，則僅支援 x86\$164 Docker 架構。  
`container`  
<a name="description-container"></a>驗證裝置是否符合在 Greengrass 核心上以容器模式執行 Lambda 函數的所有軟體和硬體需求。  
有效值為 `yes`或 `no`。  
`docker`  
<a name="description-docker"></a>驗證裝置是否符合所有必要的技術相依性，以使用 Greengrass Docker 應用程式部署連接器來執行容器  
有效值為 `yes`或 `no`。  
`streamManagement`  
<a name="description-sm"></a>驗證裝置是否符合執行 AWS IoT Greengrass 串流管理員所需的所有技術相依性。  
有效值為 `yes`或 `no`。  
`hsi`  
<a name="description-hsi"></a>驗證提供的 HSI 共用程式庫是否可以與硬體安全模組 (HSM) 溝通，並正確實作所需的 PKCS\$111 API。HSM 和共用程式庫必須能夠簽署 CSR、執行 TLS 操作並提供正確的金鑰長度和公開金鑰演算法。  
有效值為 `yes`或 `no`。  
`ml`  
<a name="description-ml"></a>驗證裝置符合所有必要的技術相依性，以便在本機執行 ML 推論。  
有效值可以是 `mxnet`、`tensorflow`、 `dlr`和 的任意組合 `no`（例如 `mxnet`、`mxnet,tensorflow`、 `mxnet,tensorflow,dlr`或 `no`)。  
`mlLambdaContainerizationMode`  
驗證裝置是否符合在 Greengrass 裝置上以容器模式執行 ML 推論所需的所有技術相依性。  
有效值為 `container`、 `process`或 `both`。  
`processor`  
驗證裝置是否符合指定處理器類型的所有硬體需求。  
有效值為 `cpu`或 `gpu`。
如果您不想使用 `container`、`docker`、`hsi`、 `streamManager`或 `ml`功能，您可以將對應的 設定為 `value` `no`。  
Docker 僅支援 `streamManagement`和 的功能資格`ml`。

`machineLearning`  
選用。ML 資格測試的組態資訊。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](#device-json-ml-qualification)。

`hsm`  
選用。使用 AWS IoT Greengrass 硬體安全模組 (HSM) 進行測試的組態資訊。否則，應省略 `hsm` 屬性。如需詳細資訊，請參閱[硬體安全整合](hardware-security.md)。  
<a name="connectivity-protocol-ssh-only"></a>只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。    
`hsm.p11Provider`  
PKCS\$111 實作的 libdl-loadable 程式庫的絕對路徑。  
`hsm.slotLabel`  
用於識別硬體模組的插槽標籤。  
`hsm.slotUserPin`  
用來向模組驗證 AWS IoT Greengrass 核心的使用者 PIN 碼。  
`hsm.privateKeyLabel`  
用於識別硬體模組中之金鑰的標籤。  
`hsm.openSSLEngine`  
OpenSSL 引擎 `.so` 檔案的絕對路徑，此檔案可在 OpenSSL 上啟用 PKCS\$111 支援。由 OTA AWS IoT Greengrass 更新代理程式使用。

`devices.id`  
使用者定義的唯一識別符，用於識別要測試的裝置。

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

`connectivity.ip`  
要測試之裝置的 IP 位址。  
<a name="connectivity-protocol-ssh-only"></a>只有當 `connectivity.protocol` 設為 `ssh` 時，才會套用此屬性。

`connectivity.containerId`  
要測試之 Docker 容器的容器 ID 或名稱。  
<a name="connectivity-protocol-docker-only"></a>只有當 `connectivity.protocol` 設為 `docker` 時，才會套用此屬性。

`connectivity.auth`  
連線的驗證資訊。  
<a name="connectivity-protocol-ssh-only"></a>只有當 `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 軟體版本。  
從 Docker 映像或 提供的 Dockerfile 在 Docker 容器中執行測試時 AWS IoT Greengrass，請將此值設定為 `/greengrass`。

`kernelConfigLocation`  
選用。核心組態檔案的路徑。 AWS IoT Device Tester 使用此檔案來檢查裝置是否已啟用必要的核心功能。如果未指定，IDT 會使用下列路徑來搜尋核心組態檔案： `/proc/config.gz`和 `/boot/config-<kernel-version>`。 AWS IoT Device Tester 會使用其找到的第一個路徑。

## 設定 device.json 以取得 ML 資格
<a name="device-json-ml-qualification"></a>

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

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

如需不適用於 ML 資格之裝置組態屬性的相關資訊，請參閱 [設定 device.json](#device-config)。

 

`features` 陣列中的 `ml`  
您的主機板支援的 ML 框架。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。  
+ 如果您的主機板只支援一個框架，請指定該框架。例如：

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

  ```
  {
      "name": "ml",
      "value": "mxnet,tensorflow"
  }
  ```

`features` 陣列中的 `mlLambdaContainerizationMode`  
您想要測試的[容器化模式](lambda-group-config.md#lambda-containerization-considerations)。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。  
+ 選擇使用非容器化 Lambda 函數`process`執行 ML 推論程式碼。此選項需要 v1 AWS IoT Greengrass .10.x 或更新版本。
+ 選擇使用容器化 Lambda 函數`container`執行 ML 推論程式碼。
+ 選擇 `both` 以兩種模式執行 ML 推論程式碼。此選項需要 v1 AWS IoT Greengrass .10.x 或更新版本。

`features` 陣列中的 `processor`  
指出主機板支援的硬體加速器。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。  
+ 如果您的主機板使用 CPU 做為處理器，請選擇 `cpu`。
+ 如果您的主機板使用 GPU 做為處理器，請選擇 `gpu`。

`machineLearning`  
選用。ML 資格測試的組態資訊。<a name="idt-version-ml-qualification"></a>此屬性需要 IDT v3.1.0 或更新版本。    
`dlrModelPath`  
使用 `dlr` 框架時需要。DLR 編譯模型目錄的絕對路徑，必須命名為 `resnet18`。如需詳細資訊，請參閱[編譯 DLR 模型](idt-ml-qualification.md#ml-qualification-dlr-compile-model)。  
以下是 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 裝置上使用[容器化](lambda-group-config.md#lambda-containerization-considerations)執行的 Lambda 函數，請新增 GPU 程式庫的環境變數。這使得 GPU 可以執行計算。若要使用不同的 GPU 程式庫，請參閱程式庫或裝置的官方文件。  
如果 `mlLambdaContainerizationMode` 功能設定為 `container` 或 `both`，請設定下列鍵。

```
"environmentVariables": [
    {
        "key": "PATH",      
        "value": "<path/to/software/bin>:$PATH"    
    },
    {
        "key": "LD_LIBRARY_PATH",      
        "value": "<path/to/ld/lib>"    
    },
    ...
]
```  
`deviceResources`  
GPU 裝置所需。包含可由 Lambda 函數存取的[本機資源](access-local-resources.md#lra-resource-types)。使用此區段可新增本機裝置和磁碟區資源。  
+ 對於裝置資源，請指定 `"type": "device"`。對於 GPU 裝置，裝置資源應該是 `/dev` 下的 GPU 相關裝置檔案。
**注意**  
`/dev/shm` 目錄是例外狀況。它僅能設為磁碟區資源。
+ 對於磁碟區資源，請指定 `"type": "volume"`。