

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

# Hub 加入設定
<a name="managedintegrations-sdk-v2-cookbook-hubsetup"></a>

在開始機群佈建加入程序之前，請先為每個中樞裝置完成這些設定步驟。本節說明如何建立受管物件、設定目錄結構，以及設定必要的憑證。

**Topics**
+ [步驟 1：註冊自訂端點](#managedintegrations-sdk-v2-cookbook-acc)
+ [步驟 2：建立佈建設定檔](#managedintegrations-sdk-v2-cookbook-fleet-provision)
+ [步驟 3：建立受管物件 （機群佈建）](#managedintegrations-sdk-v2-cookbook-managedthing)
+ [步驟 4：建立目錄結構](#managedintegrations-sdk-v2-cookbook-hubdir)
+ [步驟 5：將身分驗證資料新增至中樞裝置](#managedintegrations-sdk-v2-cookbook-copycert)
+ [步驟 6：建立裝置組態檔案](#managedintegrations-sdk-v2-cookbook-genconfig)
+ [步驟 7：將組態檔案複製到您的中樞](#managedintegrations-sdk-v2-cookbook-copyconfig)

## 步驟 1：註冊自訂端點
<a name="managedintegrations-sdk-v2-cookbook-acc"></a>

建立專用通訊端點，讓您的裝置用來與受管整合交換資料。此端點會為所有device-to-cloud的訊息建立安全連線點，包括裝置命令、狀態更新和通知。

**註冊端點**
+ 使用 [RegisterCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterCustomEndpoint.html) API device-to-Managed整合通訊的端點。

  **RegisterCustomEndpoint 請求範例**

  ```
  aws iot-managed-integrations register-custom-endpoint  
  ```

  **回應：**

  ```
  {
    [{{ACCOUNT-PREFIX}}]-ats.iot.{{AWS-REGION}}.amazonaws.com
  }
  ```
**注意**  
存放端點地址。您將需要它來進行未來的裝置通訊。

  若要傳回端點資訊，請使用 `GetCustomEndpoint` API。

  如需詳細資訊，請參閱《 受管整合 API 參考指南》中的 [RegisterCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterCustomEndpoint.html) API 和 [GetCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetCustomEndpoint.html) API。 **

## 步驟 2：建立佈建設定檔
<a name="managedintegrations-sdk-v2-cookbook-fleet-provision"></a>

佈建設定檔包含您的裝置連線至受管整合所需的安全登入資料和組態設定。

**建立機群佈建設定檔**
+ <a name="managedintegrations-sdk-v2-cookbook-provisioning"></a>呼叫 [CreateProvisioningProfile](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateProvisioningProfile.html) API 來產生下列項目：
  + 定義裝置連線設定的佈建範本
  + 裝置身分驗證的宣告憑證和私有金鑰
**重要**  
安全地存放宣告憑證、私有金鑰和範本 ID。您需要這些登入資料才能將裝置加入受管整合。如果您遺失這些登入資料，則必須建立新的佈建設定檔。

**`CreateProvisioningProfile` 範例請求**

```
aws iot-managed-integrations create-provisioning-profile \
    --provisioning-type FLEET_PROVISIONING \
    --name PROFILE_NAME
```

**回應：**

```
{
"Arn":"arn:aws:iotmanagedintegrations:{{AWS-REGION}}:{{ACCOUNT-ID}}:provisioning-profile/{{PROFILE-ID}}",
    "ClaimCertificate":
  "-----BEGIN CERTIFICATE-----
  MIICiTCCAfICCQD6m7.....w3rrszlaEXAMPLE=
  -----END CERTIFICATE-----",
    "ClaimCertificatePrivateKey":
  "-----BEGIN RSA PRIVATE KEY-----
  MIICiTCCAfICCQ...3rrszlaEXAMPLE=
 -----END RSA PRIVATE KEY-----",
    "Id": "{{PROFILE-ID}}",
    "{{PROFILE-NAME}}",
         "ProvisioningType": "FLEET_PROVISIONING"
}
```

## 步驟 3：建立受管物件 （機群佈建）
<a name="managedintegrations-sdk-v2-cookbook-managedthing"></a>

使用 `CreateManagedThing` API 為您的中樞裝置建立受管物件。每個中樞都需要具有唯一身分驗證資料的自有受管物件。如需詳細資訊，請參閱《 受管整合 API 參考》中的 [CreateManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateManagedThing.html) API。 **

當您建立受管物件時，請指定這些參數：
+ `Role`：`CONTROLLER`針對不支援命令和控制的中樞，將此值設定為 ，否則設定為 `DEVICE`。
+ `AuthenticationMaterialType`：將此值設定為 `WIFI_SETUP_QR_BAR_CODE`。
+ `AuthenticationMaterial`：包含下列欄位。您可以使用 `UPC`或 `EAN`，但不能同時使用兩者。
  + `SN`：此裝置的唯一序號
  + `UPC`：此裝置的通用產品代碼
  + `EAN`：此裝置的國際文章編號

**重要**  
每個裝置在其身分驗證資料中都必須有唯一的序號 (SN)。

**`CreateManagedThing` 請求範例**：

```
{ 
 "Role": "CONTROLLER",
 "AuthenticationMaterialType": "WIFI_SETUP_QR_BAR_CODE",
 "AuthenticationMaterial": "SN:123456789524;UPC:829576019524"
}
```

如需詳細資訊，請參閱《 受管整合 *API 參考*》中的 [CreateManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateManagedThing.html)。

### （選用） 取得受管物件
<a name="managedintegrations-sdk-v2-cookbook-managedthing-get"></a>

受管物件`ProvisioningStatus`的 必須是 `PRE_ASSOCIATED`才能繼續。如需 ProvisioningStatus 的詳細資訊，請參閱 [裝置佈建](https://docs.aws.amazon.com/iot-mi/latest/devguide/device-provisioning.html)。使用 `GetManagedThing` API 驗證您的受管物件是否存在，並準備好進行佈建。如需詳細資訊，請參閱《 受管整合 *API 參考*》中的 [GetManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetManagedThing.html)。

## 步驟 4：建立目錄結構
<a name="managedintegrations-sdk-v2-cookbook-hubdir"></a>

為您的組態檔案和憑證建立目錄。根據預設，中樞加入程序會使用 `/data/aws/iotmi/config/iotmi_config.json`。

您可以在組態檔案中指定憑證和私有金鑰的自訂路徑。本指南使用預設路徑 `/data/aws/iotmi/certs`。

```
mkdir -p /data/aws/iotmi/config
mkdir -p /data/aws/iotmi/certs

/data/
    aws/
        iotmi/
            config/
            certs/
```

## 步驟 5：將身分驗證資料新增至中樞裝置
<a name="managedintegrations-sdk-v2-cookbook-copycert"></a>

將憑證和金鑰複製到您的中樞裝置，然後建立裝置特定的組態檔案。這些檔案會在佈建程序期間，在您的中樞與受管整合之間建立安全通訊。

**複製宣告憑證和金鑰**
+ 將這些身分驗證檔案從 `CreateProvisioningProfile` API 回應複製到您的中樞裝置：
  + `claim_cert.pem`：宣告憑證 （適用於所有裝置）
  + `claim_pk.key`：宣告憑證的私有金鑰

  將兩個檔案放在 `/data/aws/iotmi/certs`目錄中。
**重要**  
 以 PEM 格式儲存憑證和私有金鑰時，請正確處理換行字元，以確保格式正確。對於 PEM 編碼的檔案，新行字元`(\n)`必須以實際的行分隔符號取代，因為只要儲存逸出的新行，稍後就無法正確擷取。
**注意**  
如果您使用安全儲存，請將這些登入資料存放在您的安全儲存位置，而不是檔案系統。如需詳細資訊，請參閱[建立用於安全儲存的自訂憑證處理常式](managedintegrations-sdk-v2-cookbook-certhandler.md)。

## 步驟 6：建立裝置組態檔案
<a name="managedintegrations-sdk-v2-cookbook-genconfig"></a>

建立包含唯一裝置識別符、憑證位置和佈建設定的組態檔案。軟體開發套件會在中樞加入期間使用此檔案來驗證您的裝置、管理佈建狀態，以及儲存連線設定。

**注意**  
每個中樞裝置都需要具有唯一裝置特定值的專屬組態檔案。

使用下列程序來建立或修改您的組態檔案，並將其複製到中樞。
+ <a name="managedintegrations-sdk-v2-cookbook-modifyconfig-fleet"></a>**建立或修改組態檔案 （機群佈建）**。

  在裝置組態檔案中設定這些必要欄位：
  + 憑證路徑

    1. `iot_claim_cert_path`：申請憑證的位置 (`claim_cert.pem`)

    1. `iot_claim_pk_path`：私有金鑰的位置 (`claim_pk.key`)

    1. 實作安全儲存憑證處理常式時，`SECURE_STORAGE`針對這兩個欄位使用
  + 連線設定

    1. `fp_template_name`：先前 `ProvisioningProfile`的名稱。

    1. `endpoint_url`：來自 `RegisterCustomEndpoint` API 回應的受管整合端點 URL （區域中的所有裝置皆相同）。
  + 裝置識別符

    1. `SN`：符合您 `CreateManagedThing` API 呼叫的裝置序號 （每個裝置唯一）

    1. `UPC`來自 `CreateManagedThing` API 呼叫的通用產品代碼 （與此產品的所有裝置相同） 

  ```
  {
      "ro": {
          "iot_provisioning_method": "FLEET_PROVISIONING",
          "iot_claim_cert_path": "{{<SPECIFY_THIS_FIELD>}}",
          "iot_claim_pk_path": "{{<SPECIFY_THIS_FIELD>}}",
          "fp_template_name": "{{<SPECIFY_THIS_FIELD>}}",        
          "endpoint_url": "{{<SPECIFY_THIS_FIELD>}}",
          "SN": "{{<SPECIFY_THIS_FIELD>}}",
          "UPC": "{{<SPECIFY_THIS_FIELD>}}"        
      },
      "rw": {
          "iot_provisioning_state": "NOT_PROVISIONED"
      }
  }
  ```

### 組態檔案的內容
<a name="managedintegrations-sdk-v2-cookbook-config-contents"></a>

檢閱 `iotmi_config.json` 檔案的內容。


**目錄**  

| 金錀 | 值 | 由客戶新增？ | 備註 | 
| --- | --- | --- | --- | 
| iot\_provisioning\_method | FLEET\_PROVISIONING | 是 | 指定您要使用的佈建方法。 | 
| iot\_claim\_cert\_path | 您指定的檔案路徑 或 SECURE\_STORAGE。例如 /data/aws/iotmi/certs/claim\_cert.pem | 是 | 指定您要使用 或 的檔案路徑SECURE\_STORAGE。 | 
| iot\_claim\_pk\_path | 您指定的檔案路徑 或 SECURE\_STORAGE。例如 /data/aws/iotmi/certs/claim\_pk.pem | 是 | 指定您要使用 或 的檔案路徑SECURE\_STORAGE。 | 
| fp\_template\_name | 機群佈建範本名稱應等於先前使用的 ProvisioningProfile 名稱。 | 是 | 等於先前ProvisioningProfile使用的 名稱 | 
| endpoint\_url | 受管整合的端點 URL。 | 是 | 您的裝置使用此 URL 連線到 Managed Integrations 雲端。若要取得此資訊，請使用 [RegisterCustomEndpoint](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterCustomEndpoint.html) API。 | 
| SN | 裝置序號。例如 AIDACKCEVSQ6C2EXAMPLE。 | 是 | 您必須為每個裝置提供此唯一資訊。 | 
| UPC | 裝置通用產品程式碼。例如 841667145075。 | 是 | 您必須為裝置提供此資訊。 | 
| managed\_thing\_id | 受管物件的 ID。 | 否 | 此資訊稍後會由中樞佈建後的加入程序新增。 | 
| iot\_provisioning\_state | 佈建狀態。 | 是 | 佈建狀態必須設定為 NOT\_PROVISIONED。 | 
| iot\_permanent\_cert\_path | IoT 憑證路徑。例如 /data/aws/iotmi/iot\_cert.pem。 | 否 | 此資訊稍後會由中樞佈建後的加入程序新增。 | 
| iot\_permanent\_pk\_path | IoT 私有金鑰檔案路徑。例如 /data/aws/iotmi/iot\_pk.pem。 | 否 | 此資訊稍後會由中樞佈建後的加入程序新增。 | 
| client\_id | 將用於 MQTT 連線的用戶端 ID。 | 否 | 此資訊稍後會由中樞佈建後的加入程序新增，以供其他元件使用。 | 
| mqtt\_keep\_alive\_interval | 範圍為 30-1200，單位以秒為單位。預設值為 300. | 是 | 使用此值可設定 MQTT 連線的持續作用間隔。 | 
| event\_manager\_upper\_bound | 預設值為 500。 | 否 | 此資訊稍後會由中樞佈建後的加入程序新增，以供其他元件使用。 | 

## 步驟 7：將組態檔案複製到您的中樞
<a name="managedintegrations-sdk-v2-cookbook-copyconfig"></a>

將您的組態檔案複製到 `/data/aws/iotmi/config`或自訂目錄路徑。您將在加入程序期間提供此`HubOnboarding`二進位檔路徑。

**對於機群佈建**

```
/data/
    aws/
        iotmi/
            config/
                iotmi_config.json
            certs/
                claim_cert.pem
                claim_pk.key
```