

支援終止通知：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)。

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

# 設定 AWS IoT Greengrass 核心
<a name="gg-core"></a>

 AWS IoT Greengrass 核心是做為節點環境中中樞或閘道的 AWS IoT 物件 （裝置）。如同其他 AWS IoT 裝置，核心存在於登錄檔中，具有裝置影子，並使用裝置憑證向 AWS IoT Core 和 進行身分驗證 AWS IoT Greengrass。核心裝置執行 AWS IoT Greengrass 核心軟體，利其管理 Greengrass 群組的本機步驟，例如，通訊、陰影同步和字符交換。

Core AWS IoT Greengrass 軟體提供下列功能：<a name="ggc-software-features"></a>
+ 部署和本機執行連接器和 Lambda 函數。
+ 在本機使用自動匯出至 來處理資料串流 AWS 雲端。
+ 使用 受管訂閱，透過裝置、連接器和 Lambda 函數之間的本機網路傳送 MQTT 訊息。
+ 使用受管訂閱的 AWS IoT 和 裝置、連接器和 Lambda 函數之間的 MQTT 訊息。
+  AWS 雲端 使用裝置身分驗證和授權保護裝置與 之間的連線。
+ 裝置的本機陰影同步。陰影可設定為與 同步 AWS 雲端。
+ 對本機裝置和磁碟區資源控制的存取。
+ 用於執行本機推論的雲端訓練機器學習模型部署。
+ 可讓裝置探索 Greengrass 核心裝置的自動 IP 地址偵測。
+ 新的或更新的群組組態的集中部署。下載組態資料之後，核心裝置會自動重新啟動。
+ 使用者定義 Lambda 函數的安全over-the-air (OTA) 軟體更新。
+ 本機秘密的安全加密儲存，以及連接器和 Lambda 函數控制的存取。

## AWS IoT Greengrass 核心組態檔案
<a name="config-json"></a>

Core AWS IoT Greengrass 軟體的組態檔案為 `config.json`。它會置放於 `/greengrass-root/config` 目錄中。

**注意**  
*greengrass-root* 代表 Core AWS IoT Greengrass 軟體安裝在您裝置上的路徑。通常，這是 `/greengrass` 目錄。  
如果您從 AWS IoT Greengrass 主控台使用**預設群組建立**選項，則 `config.json` 檔案會部署到運作狀態的核心裝置。

 您可以執行下列命令檢閱此檔案內容：

```
cat /greengrass-root/config/config.json
```

以下是範例 `config.json` 檔案。這是從 AWS IoT Greengrass 主控台建立核心時產生的版本。

------
#### [ GGC v1.11 ]

```
{
    "coreThing": {
        "caPath": "root.ca.pem",
        "certPath": "hash.cert.pem",
        "keyPath": "hash.private.key",
        "thingArn": "arn:partition:iot:region:account-id:thing/core-thing-name",
        "iotHost": "host-prefix-ats.iot.region.amazonaws.com",
        "ggHost": "greengrass-ats.iot.region.amazonaws.com",
        "keepAlive": 600,
        "ggDaemonPort": 8000,
        "systemComponentAuthTimeout": 5000
    },
    "runtime": {
        "maxWorkItemCount": 1024,
        "maxConcurrentLimit": 25,
        "lruSize": 25,
        "mountAllBlockDevices": "no",
        "cgroup": {
            "useSystemd": "yes"
        }
    },
    "managedRespawn": false,
    "crypto": {
        "principals": {
            "SecretsManager": {
                "privateKeyPath": "file:///greengrass/certs/hash.private.key"
            },
            "IoTCertificate": {
                "privateKeyPath": "file:///greengrass/certs/hash.private.key",
                "certificatePath": "file:///greengrass/certs/hash.cert.pem"
            }
        },
        "caPath": "file:///greengrass/certs/root.ca.pem"
    },
    "writeDirectory": "/var/snap/aws-iot-greengrass/current/ggc-write-directory",
    "pidFileDirectory": "/var/snap/aws-iot-greengrass/current/pidFileDirectory"
}
```

`config.json` 檔案支援以下屬性：

**coreThing**


| 欄位 | Description | 備註 | 
| --- | --- | --- | 
| <a name="shared-config-capath"></a>caPath |   AWS IoT 根 CA 相對於`/greengrass-root/certs`目錄的路徑。  |  用於回溯相容於 1.7.0 之前的版本。當`crypto`物件存在時，會忽略此屬性。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。   | 
| <a name="shared-config-certpath"></a>certPath |  相對於 `/greengrass-root/certs` 目錄的核心裝置憑證路徑。  | 用於回溯相容於 1.7.0 之前的版本。當crypto物件存在時，會忽略此屬性。 | 
| <a name="shared-config-keypath"></a>keyPath | 相對於 /greengrass-root/certs 目錄的核心私有金鑰路徑。 | 用於回溯相容於 1.7.0 之前的版本。當crypto物件存在時，會忽略此屬性。 | 
| <a name="shared-config-thingarn"></a>thingArn | 代表 AWS IoT Greengrass 核心裝置的 AWS IoT 物件的 Amazon Resource Name (ARN)。 | 在 AWS IoT Greengrass 主控台的 核心下尋找核心的 ARN，或執行 CLI [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-core-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-core-definition-version.html) 命令。 | 
| <a name="shared-config-iothost-v1.9"></a>iotHost | 您的 AWS IoT 端點。 |  在**主控台**的設定 AWS IoT 下或透過執行 CLI [https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html) 命令來尋找端點。 此命令傳回 Amazon Trust Services (ATS) 端點。如需詳細資訊，請參閱[伺服器身分驗證](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html)文件。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。 請確定您的[端點與您的 對應 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)。    | 
| <a name="shared-config-gghost-v1.9"></a>ggHost | 您的 AWS IoT Greengrass 端點。 |  這是您的 `iotHost` 端點，其具有的主機字首會由 *greengrass* 取代 (例如 `greengrass-ats.iot.region.amazonaws.com`)。使用與 AWS 區域 相同的 `iotHost`。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。 請確定您的[端點對應至您的 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/greengrass.html) 。    | 
| <a name="shared-config-iotmqttport"></a>iotMqttPort | 選用。用於 MQTT 通訊的連接埠號碼 AWS IoT。 | 有效值為 8883 或 443。預設值為 8883。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="shared-config-iothttpport"></a>iotHttpPort | 選用。用於建立到 AWS IoT之 HTTPS 連線的連接埠號碼。 | 有效值為 8443 或 443。預設值為 8443。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="shared-config-ggmqttport"></a>ggMqttPort | 選用。用於透過區域網路進行 MQTT 通訊的連接埠號碼。 | 有效值為 1024 到 65535。預設值為 8883。如需詳細資訊，請參閱[設定本機簡訊的 MQTT 連接埠](#config-local-mqtt-port)。 | 
| <a name="shared-config-gghttpport"></a>ggHttpPort | 選用。用於建立到 AWS IoT Greengrass 服務之 HTTPS 連線的連接埠號碼。 | 有效值為 8443 或 443。預設值為 8443。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="shared-config-keepalive"></a>keepAlive | 選用。MQTT KeepAlive 期間 (以秒為單位)。 | 有效範圍介於 30 與 1200 秒之間。預設值為 600。 | 
| <a name="shared-config-networkproxy"></a>networkProxy | 選用。定義要連線代理伺服器的物件。 | 代理伺服器可以是 HTTP 或 HTTPS。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。 | 
| <a name="config-mqttOperationTimeout-v1.11.0"></a>mqttOperationTimeout | 選用。在與 AWS IoT Core的 MQTT 連線中，允許 Greengrass 核心完成發佈、訂閱或取消訂閱操作的時間量 (以秒為單位)。 | 預設值為 5。最小值為 5。 | 
| <a name="shared-conifg-ggDaemonPort"></a>ggDaemonPort | 選用。Greengrass 核心 IPC 連接埠號碼。 |  此屬性可在 AWS IoT Greengrass v1.11.0 或更新版本中使用。 有效值介於 1024 和 65535 之間。預設值為 8000。  | 
| <a name="shared-config-systemComponentAuthTimeout"></a>systemComponentAuthTimeout | 選用。允許 Greengrass 核心 IPC 完成身分驗證的時間 （以毫秒為單位）。 |  此屬性可在 AWS IoT Greengrass v1.11.0 或更新版本中使用。 有效值介於 500 到 5000 之間。預設值為 5000。  | 

**runtime**


| 欄位 | Description | 備註 | 
| --- |--- |--- |
| maxWorkItemCount | 選用。Greengrass 協助程式一次可以處理的工作項目數量上限。超過此限制的工作項目會被忽略。 工作項目佇列由系統元件、使用者定義的 Lambda 函數和連接器共用。 | 預設值為 1024。該最大值受裝置硬體的限制。 增加此值會增加 AWS IoT Greengrass 使用的記憶體。如果您預期核心會接收大量的 MQTT 訊息流量，則可以提高此值。  | 
| maxConcurrentLimit | 選用。Greengrass 協助程式可以擁有的並行未鎖定 Lambda 工作者數量上限。您可以指定不同的整數來覆寫此參數。 | 預設值為 25。最小值由 定義`lruSize`。  | 
| lruSize | Optional. Defines the minimum value for maxConcurrentLimit. | The default value is 25. | 
| mountAllBlockDevices | Optional. Enables AWS IoT Greengrass to use bind mounts to mount all block devices into a container after setting up the OverlayFS. |  此屬性可在 AWS IoT Greengrass v1.11.0 或更新版本中使用。 有效值為 `yes` 和 `no`。預設值為 `no`。 `yes` 如果您的`/usr`目錄不在`/`階層下，請將此值設定為 。 | 
| postStartHealthCheckTimeout | Optional. The time (in milliseconds) after starting that the Greengrass daemon waits for the health check to finish. | The default timeout is 30 seconds (30000 ms). | 
| `cgroup` | 
| --- |
| useSystemd | Indicates whether your device uses [https://en.wikipedia.org/wiki/Systemd](https://en.wikipedia.org/wiki/Systemd). | Valid values are 是 or 否. Run the check\$1ggc\$1dependencies script in [模組 1](module1.md) to see if your device uses systemd. | 

**加密**

`crypto` 包含支援透過 PKCS\$111 和本機秘密儲存在硬體安全模組 (HSM) 上儲存私密金鑰的屬性。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。


| 欄位 | Description | 備註 | 
| --- |--- |--- |
| caPath |   AWS IoT 根 CA 的絕對路徑。  |  必須為此格式的檔案 URI：`file:///absolute/path/to/file`。  請確定您的[端點對應至您的憑證類型](#certificate-endpoints)。   | 
| `PKCS11` | 
| --- |
| OpenSSLEngine |  選用。OpenSSL 引擎 `.so` 檔案的絕對路徑，此檔案可在 OpenSSL 上啟用 PKCS\$111 支援。  |  必須是檔案系統上的檔案路徑。 如果您使用具有硬體安全性的 Greengrass OTA 更新代理程式，則需要此屬性。如需詳細資訊，請參閱[設定無線更新的支援](hardware-security.md#hardware-security-ota-updates)。  | 
| P11Provider |  PKCS\$111 實作的 libdl-loadable 程式庫的絕對路徑。  |  必須是檔案系統上的檔案路徑。  | 
| slotLabel |  用於識別硬體模組的插槽標籤。  |  必須符合 PKCS\$111 標籤規格。  | 
| slotUserPin |  用來向模組驗證 Greengrass 核心的使用者 PIN 碼。  |  必須具有足夠的許可，才能使用設定的私有金鑰執行 C\$1Sign。  | 
| `principals` | 
| --- |
| IoTCertificate | The certificate and private key that the core uses to make requests to AWS IoT. | 
| IoTCertificate  .privateKeyPath  |  核心私有金鑰的路徑。  |  如為檔案系統儲存，必須為此格式的檔案 URI：`file:///absolute/path/to/file`。 如為 HSM 儲存，必須為指定物件標籤的 [RFC 7512 PKCS \$1 11](https://tools.ietf.org/html/rfc7512) 路徑。  | 
| IoTCertificate  .certificatePath |  核心裝置憑證的絕對路徑。  |  必須為此格式的檔案 URI：`file:///absolute/path/to/file`。  | 
| MQTTServerCertificate |  選用。核心用於結合憑證做為 MQTT 伺服器或閘道的私有金鑰。  | 
| MQTTServerCertificate  .privateKeyPath |  本機 MQTT 伺服器私有金鑰的路徑。  |  使用此值，為本機 MQTT 伺服器指定您自己的私有金鑰。 如為檔案系統儲存，必須為此格式的檔案 URI：`file:///absolute/path/to/file`。 如為 HSM 儲存，必須為指定物件標籤的 [RFC 7512 PKCS \$1 11](https://tools.ietf.org/html/rfc7512) 路徑。 如果省略此屬性， 會根據輪換設定 AWS IoT Greengrass 輪換金鑰。若有指定，則由客戶負責輪換金鑰。  | 
| SecretsManager | The private key that secures the data key used for encryption. For more information, see [將秘密部署到 AWS IoT Greengrass 核心](secrets.md). | 
| SecretsManager  .privateKeyPath |  本機 Secrets Manager 私有金鑰的路徑。  |  僅支援 RSA 金鑰。 如為檔案系統儲存，必須為此格式的檔案 URI：`file:///absolute/path/to/file`。 如為 HSM 儲存，必須為指定物件標籤的 [RFC 7512 PKCS \$1 11](https://tools.ietf.org/html/rfc7512) 路徑。必須使用 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 填補機制產生私密金鑰。  | 

也支援下列組態屬性：


****  

| 欄位 | Description | 備註 | 
| --- | --- | --- | 
| <a name="shared-config-mqttmaxconnectionretryinterval"></a> mqttMaxConnectionRetryInterval  |  選用。連線中斷時，MQTT 連線重試的間隔上限 (以秒為單位)。  |  請指定此數值做為未簽署的整數。預設值為 `60`。  | 
| <a name="shared-config-managedrespawn"></a> managedRespawn  |  選用。指出 OTA 代理程式在更新之前需要執行自訂程式碼。  |  有效值為 `true` 或 `false`。如需詳細資訊，請參閱[AWS IoT Greengrass Core 軟體的 OTA 更新](core-ota-update.md)。  | 
| <a name="shared-config-writedirectory"></a> writeDirectory  |  選用。其中 AWS IoT Greengrass 建立所有讀取/寫入資源的寫入目錄。  |  如需詳細資訊，請參閱[設定 的寫入目錄 AWS IoT Greengrass](#write-directory)。  | 
| <a name="shared-config-piddirectory"></a>pidFileDirectory |  Optional. 會將其程序 ID (PID) AWS IoT Greengrass 存放在此目錄下。  |  預設值為 `/var/run`。  | 

------
#### [ Extended life versions ]

下列版本的 AWS IoT Greengrass Core 軟體處於[延長生命週期階段](maintenance-policy.md)。此資訊僅供參考之用。

GGC 1.10 版  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600,
    "systemComponentAuthTimeout": 5000
  },
  "runtime" : {
    "maxWorkItemCount" : 1024,
    "maxConcurrentLimit" : 25,
    "lruSize": 25,
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援以下屬性：  
**coreThing**      
<a name="config-json-properties-corething-v1.9"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
`crypto` 包含支援透過 PKCS\$111 和本機秘密儲存在硬體安全模組 (HSM) 上儲存私密金鑰的屬性。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
<a name="config-crypto"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

GGC 1.9 版  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600
  },
  "runtime" : {
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援以下屬性：  
**coreThing**      
<a name="config-json-properties-corething-v1.9"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
已在 v1.7.0 中新增 `crypto` 物件。其中推出的屬性可透過 PKCS\$111 和本機私密儲存支援硬體安全模組 (HSM) 上的私有金鑰儲存。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
<a name="config-crypto"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性。    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC 1.8 版**  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:aws:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600
  },
  "runtime" : {
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援下列屬性。  
**coreThing**      
<a name="config-json-properties-corething-v1.8"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
已在 v1.7.0 中新增 `crypto` 物件。其中推出的屬性可透過 PKCS\$111 和本機私密儲存支援硬體安全模組 (HSM) 上的私有金鑰儲存。如需詳細資訊，請參閱[AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)、[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.7**  

```
{
  "coreThing" : {
    "caPath" : "root.ca.pem",
    "certPath" : "hash.cert.pem",
    "keyPath" : "hash.private.key",
    "thingArn" : "arn:aws:iot:region:account-id:thing/core-thing-name",
    "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
    "keepAlive" : 600
  },
  "runtime" : {
    "cgroup" : {
      "useSystemd" : "yes"
    }
  },
  "managedRespawn" : false,
  "crypto" : {
    "principals" : {
      "SecretsManager" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
      },
      "IoTCertificate" : {
        "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
        "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
      } 
    },
    "caPath" : "file:///greengrass/certs/root.ca.pem"
  }
}
```
`config.json` 檔案支援以下屬性：  
**coreThing**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**runtime**      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
**加密**  
於 v1.7.0 新增的 `crypto` 物件所引進的屬性，可透過 PKCS\$111 和本機私密儲存支援硬體安全模組 (HSM) 上的私有金鑰儲存。如需詳細資訊，請參閱[硬體安全整合](hardware-security.md)及[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。支援 HSM 上或檔案系統中私有金鑰儲存的組態。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)
也支援下列組態屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.6**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600,
       "mqttMaxConnectionRetryInterval": 60
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   },
   "managedRespawn": true,
   "writeDirectory": "/write-directory"
}
```
如果您從 AWS IoT Greengrass 主控台使用**預設群組建立**選項，則 `config.json` 檔案會部署到工作狀態的核心裝置，以指定預設組態。
`config.json` 檔案支援以下屬性：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.5**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   },
   "managedRespawn": true
}
```
`config.json` 檔案存在於 `/greengrass-root/config` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.3**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   },
   "managedRespawn": true
}
```
`config.json` 檔案存在於 `/greengrass-root/config` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.1**  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   }
}
```
`config.json` 檔案存在於 `/greengrass-root/config` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

**GGC v1.0**  
在 AWS IoT Greengrass Core v1.0 中， `config.json` 會部署到 `greengrass-root/configuration`。  

```
{
   "coreThing": {
       "caPath": "root-ca-pem",
       "certPath": "cloud-pem-crt",
       "keyPath": "cloud-pem-key",
       "thingArn": "arn:aws:iot:region:account-id:thing/core-thing-name",
       "iotHost": "host-prefix.iot.region.amazonaws.com",
       "ggHost": "greengrass.iot.region.amazonaws.com",
       "keepAlive": 600
   },
   "runtime": {
       "cgroup": {
           "useSystemd": "yes|no"
       }
   }
}
```
`config.json` 檔案存在於 `/greengrass-root/configuration` 中並包含以下參數：    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)

------

## 服務端點必須符合根 CA 憑證類型
<a name="certificate-endpoints"></a>

您的 AWS IoT Core 和 AWS IoT Greengrass 端點必須對應至裝置上的根 CA 憑證的憑證類型。如果端點和憑證類型不相符，身分驗證嘗試會在裝置和 AWS IoT Core 或 之間失敗 AWS IoT Greengrass。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[伺服器身分驗證](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html)。

如果您的裝置使用 Amazon Trust Services (ATS) 根 CA 憑證，這是偏好的方法，它也必須使用 ATS 端點進行裝置管理和探索資料平面操作。ATS 端點包含 `ats`區段，如下列 AWS IoT Core 端點語法所示。

```
prefix-ats.iot.region.amazonaws.com
```

**注意**  
為了回溯相容性， AWS IoT Greengrass 目前支援某些 中的舊版 VeriSign 根 CA AWS 區域憑證和端點。如果您使用的是舊式 VeriSign 根 CA 憑證，我們建議您建立 ATS 端點，並改用 ATS 根 CA 憑證。否則，請務必使用對應的舊式端點。如需詳細資訊，請參閱 中[支援的舊版端點](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#greengrass-legacy-endpoints)*Amazon Web Services 一般參考*。

### config.json 中的端點
<a name="certificate-endpoints-config"></a>

在 Greengrass 核心裝置上，端點會在 [`config.json`](#config-json) 檔案的 `coreThing` 物件中指定。`iotHost` 屬性代表 AWS IoT Core 端點。`ggHost` 屬性代表 AWS IoT Greengrass 端點。在下列範例程式碼片段中，這些屬性指定 ATS 端點。

```
{
  "coreThing" : {
    ...
    "iotHost" : "abcde1234uwxyz-ats.iot.us-west-2.amazonaws.com",
    "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
    ...
  },
```

**AWS IoT Core 端點**  
您可以使用適當的 `--endpoint-type` 參數執行 [https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-endpoint.html) CLI 命令來取得 AWS IoT Core 端點。  
+ 若要傳回 ATS 簽署的端點，請執行：

  ```
  aws iot describe-endpoint --endpoint-type iot:Data-ATS
  ```
+ 若要傳回舊式 VeriSign 簽署的端點，請執行：

  ```
  aws iot describe-endpoint --endpoint-type iot:Data
  ```

**AWS IoT Greengrass 端點**  
您的 AWS IoT Greengrass 端點是您的`iotHost`端點，主機字首會取代為 *greengrass*。例如，ATS 簽署的端點是 `greengrass-ats.iot.region.amazonaws.com`。這使用與 AWS IoT Core 端點相同的區域。

## 連線至連接埠 443 或透過網路代理
<a name="alpn-network-proxy"></a>

此功能適用於 AWS IoT Greengrass Core v1.7 和更新版本。

Greengrass 核心 AWS IoT Core 使用 MQTT 訊息通訊協定搭配 TLS 用戶端身分驗證與 通訊。根據慣例，透過 TLS 的 MQTT 使用連接埠 8883。不過，做為安全措施之用，受限環境可能會將傳入和傳出流量限制於小範圍的 TCP 連接埠。例如，企業防火牆可能會針對 HTTPS 流量開放連接埠 443，但關閉較不常用之通訊協定的其他連接埠，例如 MQTT 流量的連接埠 8883。其他受限環境可能會要求所有流量先通過 HTTP 連線，再連線至網際網路。

若要在這些案例中啟用通訊， AWS IoT Greengrass 允許下列組態：
+ **透過連接埠 443 使用 TLS 用戶端身分驗證的 MQTT**。如果您的網路允許對連接埠 443 的連線，您可以將核心設定為針對 MQTT 流量使用連接埠 443，而不使用預設的連接埠 8883。這可以直接連線至連接埠 443，或透過網路代理伺服器連線。

  AWS IoT Greengrass 使用 [ Application Layer Protocol Network](https://tools.ietf.org/html/rfc7301) (ALPN) TLS 延伸來啟用此連線。針對預設組態，連接埠 443 上透過 TLS 的 MQTT 使用憑證型的用戶端身分驗證。

  當設定為使用連接埠 443 的直接連線時，核心支援軟體[over-the-air(OTA) 更新](core-ota-update.md)。 AWS IoT Greengrass 此支援需要 AWS IoT Greengrass Core v1.9.3 或更新版本。
+ 根據預設**，透過連接埠 443 的 HTTPS 通訊**會透過連接埠 8443 AWS IoT Greengrass 傳送 HTTPS 流量，但您可以將其設定為使用連接埠 443。
+ **透過網路代理的連線**。您可以設定網路代理伺服器，做為連線至 Greengrass 核心的中介。僅支援基本身分驗證和 HTTP 與 HTTPS 代理。

  代理組態會透過 `http_proxy`、 `https_proxy`和 `no_proxy`環境變數傳遞給使用者定義的 Lambda 函數。使用者定義的 Lambda 函數必須使用這些傳入設定來透過代理連線。根據預設，Lambda 函數用來進行連線的常見程式庫 （例如 boto3 或 cURL 和 python `requests`套件） 通常會使用這些環境變數。如果 Lambda 函數也指定這些相同的環境變數， AWS IoT Greengrass 則不會覆寫它們。
**重要**  
設定為使用網路代理的 Greengrass 核心不支援 [OTA 更新](core-ota-update.md)。<a name="config-mqtt-port"></a>

**透過連接埠 443 設定 MQTT**

此功能需要 AWS IoT Greengrass Core v1.7 或更新版本。

此程序可讓 Greengrass 核心將連接埠 443 用於與 AWS IoT Core傳遞 MQTT 訊息。

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

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 在 `coreThing` 物件中，新增 `iotMqttPort` 屬性，並將值設定為 **443**，如以下範例所示。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "iotMqttPort" : 443,
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "keepAlive" : 600
       },
       ...
   }
   ```

1. 啟動協助程式。

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

 <a name="config-http-port"></a>

**透過連接埠 443 設定 HTTPS**

此功能需要 AWS IoT Greengrass Core v1.8 或更新版本。

此程序會設定核心使用連接埠 443 進行 HTTPS 通訊。

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

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 在 `coreThing` 物件中，新增 `iotHttpPort` 和 `ggHttpPort` 屬性，如以下範例所示。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "iotHttpPort" : 443,
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "ggHttpPort" : 443,
           "keepAlive" : 600
       },
       ...
   }
   ```

1. 啟動協助程式。

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

 <a name="config-network-proxy"></a>

**設定網路代理**

此功能需要 AWS IoT Greengrass Core v1.7 或更新版本。

此程序允許 透過 HTTP 或 HTTPS 網路代理 AWS IoT Greengrass 連線到網際網路。

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

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 使用 `coreThing` 物件來新增 [networkProxy](#networkProxy-object) 物件，如以下範例所示。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "keepAlive" : 600,
           "networkProxy": {
               "noProxyAddresses" : "http://128.12.34.56,www.mywebsite.com",
               "proxy" : {
                   "url" : "https://my-proxy-server:1100",
                   "username" : "Mary_Major",
                   "password" : "pass@word1357"
               }
           }
       },
       ...
   }
   ```

1. 啟動協助程式。

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

**networkProxy 物件**

使用 `networkProxy` 物件，指定網路代理的相關資訊。此物件具有下列屬性。


| 欄位 | Description (描述) | 
| --- | --- | 
| noProxyAddresses |  選用。從代理中免除的 IP 地址或主機名稱清單 (以逗號分隔)。  | 
| proxy |  要連線至的代理。代理具有以下屬性。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/gg-core.html)  | 

### 允許端點
<a name="allow-endpoints-proxy"></a>

Greengrass 裝置和 AWS IoT Core 或 之間的通訊 AWS IoT Greengrass 必須經過身分驗證。此身分驗證是根據已註冊的 X.509 裝置憑證和加密金鑰。若要允許經驗證的請求通過代理而不需其他加密，請允許以下端點。


| Endpoint | 站點 | Description | 
| --- | --- | --- | 
| greengrass.region.amazonaws.com | 443 |  用於群組管理的控制平面操作。  | 
| `prefix-ats.iot.region.amazonaws.com` 或 `prefix.iot.region.amazonaws.com` | MQTT：8883 或 443 HTTPS：8443 或 443 |  用於裝置管理的資料平面操作，例如陰影同步。 根據您的核心和用戶端裝置是否使用 Amazon Trust Services （偏好） 根 CA 憑證、舊版根 CA 憑證或兩者，允許使用一個或兩個端點。如需詳細資訊，請參閱[服務端點必須符合根 CA 憑證類型](#certificate-endpoints)。  | 
| `greengrass-ats.iot.region.amazonaws.com` 或 `greengrass.iot.region.amazonaws.com` | 8443 或 443 |  用於裝置探索操作。 根據您的核心和用戶端裝置是否使用 Amazon Trust Services （偏好） 根 CA 憑證、舊版根 CA 憑證或兩者，允許使用一個或兩個端點。如需詳細資訊，請參閱[服務端點必須符合根 CA 憑證類型](#certificate-endpoints)。  在連接埠 443 上連線的用戶端必須實作 [ Application Layer Protocol Negotiation (ALPN)](https://tools.ietf.org/html/rfc7301) TLS 延伸模組，並在 `ProtocolName`中`x-amzn-http-ca`做為 傳遞`ProtocolNameList`。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的[通訊協定](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html)。   | 
| \$1.s3.amazonaws.com | 443 |  用於部署操作和無線更新。此格式包括 `*` 字元，因為端點字首是由內部控制，並可能隨時變更。  | 
| logs.region.amazonaws.com | 443 |  如果 Greengrass 群組設定為將日誌寫入 CloudWatch，則為必要項目。  | 

## 設定 的寫入目錄 AWS IoT Greengrass
<a name="write-directory"></a>

此功能適用於 AWS IoT Greengrass Core v1.6 和更新版本。

根據預設， AWS IoT Greengrass Core 軟體會部署在單一根目錄下，其中 會 AWS IoT Greengrass 執行所有讀取和寫入操作。不過，您可以將 設定為對所有寫入操作 AWS IoT Greengrass 使用單獨的目錄，包括建立目錄和檔案。在此情況下， AWS IoT Greengrass 會使用兩個最上層目錄：
+ *greengrass-root* 目錄，可將其保留為可讀寫或選擇為唯讀。這包含 AWS IoT Greengrass 核心軟體和其他重要元件，這些元件在執行期間應保持不變，例如憑證和 `config.json`。
+ 指定的寫入目錄。這包含可寫入的內容，例如日誌、狀態資訊和部署的使用者定義 Lambda 函數。

此組態結果為下列目錄結構。

**Greengrass 根目錄**  

```
greengrass-root/
|-- certs/
|   |-- root.ca.pem
|   |-- hash.cert.pem
|   |-- hash.private.key
|   |-- hash.public.key
|-- config/
|   |-- config.json
|-- ggc/
|   |-- packages/
|       |-- package-version/
|           |-- bin/
|               |-- daemon 
|           |-- greengrassd
|           |-- lambda/
|           |-- LICENSE/
|           |-- release_notes_package-version.html
|               |-- runtime/
|                   |-- java8/
|                   |-- nodejs8.10/
|                   |-- python3.8/
|   |-- core/
```

**寫入目錄**  

```
write-directory/
|-- packages/
|   |-- package-version/
|       |-- ggc_root/
|       |-- rootfs_nosys/
|       |-- rootfs_sys/
|       |-- var/
|-- deployment/
|   |-- group/
|       |-- group.json
|   |-- lambda/
|   |-- mlmodel/
|-- var/
|   |-- log/
|   |-- state/
```

 

**設定寫入目錄**

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

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 新增 `writeDirectory` 為參數並指定目標目錄路徑，如下所示。

   ```
   {
       "coreThing": {
           "caPath": "root-CA.pem",
           "certPath": "hash.pem.crt",
           ...
       },
       ...
       "writeDirectory" : "/write-directory"
   }
   ```
**注意**  
您隨時可以更新 `writeDirectory` 設定。更新設定後， 會在下一次開始時 AWS IoT Greengrass 使用新指定的寫入目錄，但不會從先前的寫入目錄遷移內容。

1. 現在，您的寫入目錄已設定，您可以選擇設定 *greengrass-root* 目錄為唯讀。如需詳細資訊，請參閱[設定 Greengrass 根目錄成為唯讀](#configure-ro-directory)。

   否則，請啟動 AWS IoT Greengrass 協助程式：

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

 <a name="configure-ro-directory"></a>

**將 Greengrass 根目錄設為唯讀**

只有在您想要將 Greengrass 根目錄設為唯讀狀態時，才需依照下列步驟執行。開始之前，必須先設定寫入目錄。

1. 授與必要目錄的存取許可：

   1. 將讀取和寫入許可提供給 `config.json` 擁有者。

      ```
      sudo chmod 0600 /greengrass-root/config/config.json
      ```

   1. 使 ggc\$1user 成為憑證和系統 Lambda 目錄的擁有者。

      ```
      sudo chown -R ggc_user:ggc_group /greengrass-root/certs/
      sudo chown -R ggc_user:ggc_group /greengrass-root/ggc/packages/1.11.6/lambda/
      ```
**注意**  
預設會使用 ggc\$1user 和 ggc\$1group 帳戶來執行系統 Lambda 函數。如果您設定群組層級的[預設存取身分](lambda-group-config.md#lambda-access-identity-groupsettings)使用不同的帳戶，您應該改將許可提供給該使用者 (UID) 和群組 (GID)。

1. 使用您偏好的機制將 *greengrass-root* 目錄設為唯讀。
**注意**  
其中一種設定 *greengrass-root* 目錄為唯讀的方法是掛載目錄為唯讀。不過，若要將無線 (OTA) 更新套用至掛載目錄中的 AWS IoT Greengrass Core 軟體，必須先移除掛載目錄，待更新完成後再次掛載目錄。您可以新增這些 `umount` 和 `mount` 操作到 `ota_pre_update` 和 `ota_post_update` 指令碼中。如需 OTA 更新的詳細資訊，請參閱 [Greengrass OTA 更新代理程式](core-ota-update.md#ota-agent) 和 [透過 OTA 更新受管的 respawn](core-ota-update.md#ota-managed-respawn)。

1. 啟動協助程式。

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

   如果未正確設定步驟 1 的許可，則協助程式不會啟動。

## 配置 MQTT 設定
<a name="configure-mqtt"></a>

在 AWS IoT Greengrass 環境中，本機用戶端裝置、Lambda 函數、連接器和系統元件可以互相通訊並與之通訊 AWS IoT Core。所有通訊都經過核心，負責管理授權實體與 MQTT 通訊之間的[訂閱](gg-sec.md#gg-msg-workflow)。

如需可設定 MQTT 設定的相關資訊 AWS IoT Greengrass，請參閱下列各節：
+ [訊息服務品質](#message-quality-of-service)
+ [雲端目標的 MQTT 訊息佇列](#mqtt-message-queue)
+ [使用 的 MQTT 持久性工作階段 AWS IoT Core](#mqtt-persistent-sessions)
+ [與 進行 MQTT 連線的用戶端 IDs AWS IoT](#connection-client-id)
+ [用於本機訊息的 MQTT 連接埠](#config-local-mqtt-port)
+ [使用 發佈、訂閱、取消訂閱 MQTT 連線操作的逾時 AWS 雲端](#mqtt-operation-timeout)

**注意**  
<a name="sitewise-connector-opcua-support"></a>OPC-UA 是一個用於工業通訊的資訊交換標準。若要在 Greengrass 核心上實作對 OPC-UA 的支援，您可以使用 [IoT SiteWise 連接器](iot-sitewise-connector.md)。連接器會將工業裝置資料從 OPC-UA 伺服器傳送至其中的資產屬性 AWS IoT SiteWise。

### 訊息服務品質
<a name="message-quality-of-service"></a>

AWS IoT Greengrass 根據您的組態和通訊的目標和方向， 支援服務品質 (QoS) 層級 0 或 1。Greengrass 核心做為與 通訊的用戶端， AWS IoT Core 以及用於在本機網路上通訊的訊息中介裝置。

![\[核心做為用戶端和本機訊息代理程式。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/mqtt-qos.png)


如需 MQTT 和 QoS 的詳細資訊，請參閱 MQTT 網站上的[入門](https://mqtt.org/getting-started/)。

**與 通訊 AWS 雲端**  
+ **使用 QoS 1 的傳出訊息**

  核心會使用 QoS 1 傳送目標 AWS 雲端 的訊息。 AWS IoT Greengrass 會使用 MQTT 訊息佇列來處理這些訊息。如果未由 確認訊息傳遞 AWS IoT，訊息會經過多工緩衝處理，以便稍後重試。如果佇列已滿，則無法重試訊息。訊息傳遞確認有助於將間歇性連線造成的資料遺失降到最低。

  由於傳出訊息 AWS IoT 要使用 QoS 1，Greengrass 核心可以傳送訊息的最大速率取決於核心與 之間的延遲 AWS IoT。每次核心傳送訊息時，都會等待 AWS IoT 確認訊息後再傳送下一個訊息。例如，如果核心與其之間的往返時間為 AWS 區域 50 毫秒，則核心每秒最多可傳送 20 則訊息。當您選擇核心連線 AWS 區域 的 時，請考慮此行為。若要將大量 IoT 資料擷取至 AWS 雲端，您可以使用[串流管理員](stream-manager.md)。

  如需 MQTT 訊息佇列的詳細資訊，包括如何設定本機儲存快取，以保留目的地為 AWS 雲端 目標的訊息，請參閱 [雲端目標的 MQTT 訊息佇列](#mqtt-message-queue)。
+ **使用 QoS 0 (預設值) 或 QoS 1 的傳入訊息**

  根據預設，核心會使用 QoS 0 訂閱 AWS 雲端 來源的訊息。如果您啟用持久性工作階段，該核心會使用 QoS 1 進行訂閱。這有助於將間歇連線所造成的資料遺失降至最低。若要管理這些訂閱的 QoS，請在本機多工緩衝處理器系統元件上設定持久性設定。

  如需詳細資訊，包括如何啟用核心以建立具有 AWS 雲端 目標的持久性工作階段，請參閱 [使用 的 MQTT 持久性工作階段 AWS IoT Core](#mqtt-persistent-sessions)。

**與本機目標的通訊**  
所有本機通訊都使用 QoS 0。核心會嘗試傳送訊息至本機目標，該目標可以是 Greengrass Lambda 函數、連接器或[用戶端裝置](what-is-gg.md#greengrass-devices)。核心不會存放訊息或確認交付。您可以在元件之間任意刪除訊息。  
雖然 Lambda 函數之間的直接通訊不使用 MQTT 訊息，但行為是相同的。

### 雲端目標的 MQTT 訊息佇列
<a name="mqtt-message-queue"></a>

目標的 MQTT 訊息 AWS 雲端 會排入佇列等待處理。佇列的訊息依先進先出 (FIFO) 順序處理。處理訊息並發佈至 後 AWS IoT Core，訊息會從佇列中移除。

根據預設，Greengrass 核心會存放在以 AWS 雲端 目標為目標的記憶體未處理訊息中。您可以設定該核心，以將未處理的訊息改存放於本機儲存快取中。與記憶體內儲存不同，本機儲存快取能夠在核心重新啟動 （例如，在群組部署或裝置重新啟動之後） 之間保留，因此 AWS IoT Greengrass 可以繼續處理訊息。您也可以設定儲存大小。

**警告**  
Greengrass 核心可能會在失去連線時將重複的 MQTT 訊息排入佇列，因為它會在 MQTT 用戶端偵測到離線之前重試發佈操作。若要避免雲端目標重複的 MQTT 訊息，請將核心`keepAlive`的值設定為小於其`mqttOperationTimeout`值的一半。如需詳細資訊，請參閱[AWS IoT Greengrass 核心組態檔案](#config-json)。

AWS IoT Greengrass 使用多工緩衝處理系統元件 (`GGCloudSpooler`Lambda 函數） 來管理訊息佇列。您可以使用下列 `GGCloudSpooler` 環境變數來設定儲存設定。
+ **GG\$1CONFIG\$1STORAGE\$1TYPE**。訊息佇列的位置。以下為有效值：
  + `FileSystem`。 將未處理的訊息儲存在實體核心裝置的磁碟本機儲存快取中。核心重新啟動時，會保留佇列中的訊息以待處理。訊息處理後會移除。
  + `Memory` (預設)。將未處理的訊息存放於記憶體。核心重新啟動時，佇列的訊息會遺失。

    此選項針對具有限硬體功能的裝置進行最佳化。若使用此組態，建議您在服務中斷最低時部署群組或重新啟動裝置。
+ **GG\$1CONFIG\$1MAX\$1SIZE\$1BYTES**。儲存大小，以位元組計。此值可以是**大於或等於 262144 **(256 KB) 的任何非負整數；較小的大小可防止 AWS IoT Greengrass Core 軟體啟動。預設大小為 2.5 MB。超過大小限制時，舊佇列訊息會由新訊息取代。

**注意**  
此功能適用於 AWS IoT Greengrass Core v1.6 和更新版本。舊版使用佇列大小為 2.5 MB 的記憶體內儲存。您不能設定舊版的儲存設定。

#### 在本機儲存快取訊息
<a name="configure-local-storage-cache"></a>

您可以設定 AWS IoT Greengrass 將訊息快取至檔案系統，使其在核心重新啟動期間持續存在。若要執行此操作，請部署函數定義版本，其中 `GGCloudSpooler` 函數會將儲存類型設定為 `FileSystem`。您必須使用 AWS IoT Greengrass API 來設定本機儲存快取。您無法在主控台執行這項操作。

下列程序使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html) CLI 命令來設定多工緩衝處理程式，將排入佇列的訊息儲存至檔案系統。這還會設定一個 2.6 MB 大小的佇列。

1. <a name="get-group-id-latestversion"></a>取得目標 Greengrass 群組 ID 和目標群組版本 ID。此程序假設這是最新的群組和群組版本。下列查詢會傳回最近建立的群組。

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   或者，您可以依名稱查詢。群組名稱不需要是唯一名稱，因此可能會傳回多個群組。

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**注意**  
<a name="find-group-ids-console"></a>您也可以在 AWS IoT 主控台中找到這些值。群組 ID 會顯示在群組的 **Settings (設定)** 頁面上。群組版本 IDs會顯示在群組的**部署**索引標籤上。

1. <a name="copy-group-id-latestversion"></a>從輸出中的目標群組複製 `Id` 和 `LatestVersion` 值。

1. <a name="get-latest-group-version"></a>取得最新的群組版本。
   + 將 *group-id* 取代為您複製`Id`的 。
   + 將 *latest-group-version-id* 取代為您複製`LatestVersion`的 。

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. <a name="copy-group-component-arns-except-function"></a>從輸出中的 `Definition` 物件，複製 `CoreDefinitionVersionArn` 以及所有其他群組元件的 ARN，但 `FunctionDefinitionVersionArn` 除外。建立新群組版本時，您會需要使用這些數值。

1. <a name="parse-function-def-id"></a>從輸出中的 `FunctionDefinitionVersionArn`，複製函數定義的 ID。該 ID 是 ARN 中跟在 `functions` 區段後面的 GUID，如下列範例所示。

   ```
   arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
   ```
**注意**  
或者，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)命令，然後從輸出複製 ID 來建立函數定義。

1. 新增函數定義版本至函數定義。
   + 將 *function-definition-id* 取代為您為函數定義複製的 `Id`。
   + 將 *arbitrary-function-id* 取代為函數的名稱，例如 **spooler-function**。
   + 將您想要在此版本中包含的任何 Lambda 函數新增至`functions`陣列。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html)命令，從現有的函數定義版本取得 Greengrass Lambda 函數。
**警告**  
務必為 `GG_CONFIG_MAX_SIZE_BYTES` 指定**大於或等於 262144 的值**。較小的大小可防止 AWS IoT Greengrass Core 軟體啟動。

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_MAX_SIZE_BYTES":"2621440","GG_CONFIG_STORAGE_TYPE":"FileSystem"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id"}]'
   ```
**注意**  
如果您先前已將`GG_CONFIG_SUBSCRIPTION_QUALITY`環境變數設定為[支援 的持久性工作階段 AWS IoT Core](#mqtt-persistent-sessions)，請將其包含在此函數執行個體中。

1. <a name="copy-function-def-version-arn"></a>從輸出複製函數定義版本的 `Arn`。

1. <a name="create-group-version-with-sys-lambda"></a>建立包含系統 Lambda 函數的群組版本。
   + 為該群組將 *group-id* 取代為 `Id`。
   + 將 *core-definition-version-arn* 取代為您從最新群組版本所複製的 `CoreDefinitionVersionArn`。
   + 將 *function-definition-version-arn* 取代為您為功能定義版本所複製的 `Arn`。
   + 取代您已從最新群組版本複製之其他群組元件 (例如 `SubscriptionDefinitionVersionArn` 或 `DeviceDefinitionVersionArn`) 的 ARN。
   + 移除任何未使用的參數。比如說若您的群組版本不包含任何資源，則請移除 `--resource-definition-version-arn`。

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --device-definition-version-arn device-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>從輸出複製 `Version`。這是新群組版本的 ID。

1. <a name="create-group-deployment"></a>部署具有新群組版本的群組。
   + 將 *group-id* 取代為您為群組所複製的 `Id`。
   + 將 *group-version-id* 取代為您為新群組版本所複製的 `Version`。

   ```
   aws greengrass create-deployment \
   --group-id group-id \
   --group-version-id group-version-id \
   --deployment-type NewDeployment
   ```

 若要更新儲存設定，您可以使用 AWS IoT Greengrass API 來建立新的函數定義版本，其中包含具有更新組態的`GGCloudSpooler`函數。然後，請將函數定義版本新增至新群組版本 (以及其他群組元件) 和部署群組的版本中。如果想要還原預設組態，您可以部署一個不包含 `GGCloudSpooler` 函數的函數定義版本。

 此系統 Lambda 函數不會顯示在主控台中。然而，在函數新增至最新的群組版本後，除非您使用 API 執行取代或移除作業，否則其將包含在從主控台進行的部署中。

### 使用 的 MQTT 持久性工作階段 AWS IoT Core
<a name="mqtt-persistent-sessions"></a>

此功能適用於 AWS IoT Greengrass Core v1.10 和更新版本。

Greengrass 核心可以與 AWS IoT 訊息中介裝置建立持久性工作階段。持久性工作階段是持續的連線，允許核心在離線時接收傳送的訊息。該核心是連線中的用戶端。

在持久性工作階段中， AWS IoT 訊息中介裝置會儲存核心在連線期間所做的所有訂閱。如果核心中斷連線， AWS IoT 訊息中介裝置會儲存未確認和發佈為 QoS 1 的新訊息，並以本機目標為目標，例如 Lambda 函數和[用戶端裝置](what-is-gg.md#greengrass-devices)。當核心重新連線時，持久性工作階段會繼續，且 AWS IoT 訊息中介裝置會以每秒 10 則訊息的最大速率將儲存的訊息傳送至核心。持久性工作階段的預設到期時間為 1 小時，並在訊息代理程式偵測到核心中斷連線時開始。如需詳細資訊，請參閱《 *AWS IoT 開發人員指南*》中的 [MQTT 持久性工作階段](https://docs.aws.amazon.com/iot/latest/developerguide/mqtt-persistent-sessions.html)。

AWS IoT Greengrass 使用多工緩衝處理系統元件 (`GGCloudSpooler`Lambda 函數） 來建立具有 AWS IoT 作為來源的訂閱。您可以使用下列 `GGCloudSpooler` 環境變數來設定持久性工作階段。
+ **GG\$1CONFIG\$1SUBSCRIPTION\$1QUALITY**。以 AWS IoT 做為來源的訂閱品質。以下為有效值：
  + `AtMostOnce` (預設)。停用持久性工作階段。使用 QoS 0 的訂閱。
  + `AtLeastOncePersistent`。 啟用持久性工作階段。在 `CONNECT` 訊息中設定 `cleanSession` 旗標為 `0`，並以 QoS 1 訂閱。

    核心接收到的 QoS 1 發佈訊息，會保證達到 Greengrass 協助程式的記憶體內工作佇列。核心會在訊息新增至佇列後確認訊息。從佇列到本機目標 （例如 Greengrass Lambda 函數、連接器或裝置） 的後續通訊會以 QoS 0 傳送。 AWS IoT Greengrass 不保證可交付至本機目標。
**注意**  
您可以使用 [maxWorkItemCount](#config-json-runtime) 組態屬性來控制工作項目佇列的大小。例如，如果您的工作負載需要大量的 MQTT 流量，您可以提升佇列大小。

    啟用持久性工作階段時，核心會開啟至少一個額外的連線，以便與 MQTT 訊息交換 AWS IoT。如需詳細資訊，請參閱[與 進行 MQTT 連線的用戶端 IDs AWS IoT](#connection-client-id)。

#### 設定 MQTT 持久性工作階段
<a name="configure-persistent-sessions"></a>

您可以將 設定為搭配 AWS IoT Greengrass 使用持久性工作階段 AWS IoT Core。若要執行此操作，請部署函數定義版本，其中 `GGCloudSpooler` 函數會將訂閱品質設定為 `AtLeastOncePersistent`。此設定適用於您所有以 AWS IoT Core (`cloud`) 做為來源的訂閱。您必須使用 AWS IoT Greengrass API 來設定持久性工作階段。您無法在主控台執行這項操作。

下列程序使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html) CLI 命令，將多工緩衝處理程式設定為使用持久性工作階段。在此程序中，我們假設您正在更新現有群組的最新群組版本設定。

1. <a name="get-group-id-latestversion"></a>取得目標 Greengrass 群組 ID 和目標群組版本 ID。此程序假設這是最新的群組和群組版本。下列查詢會傳回最近建立的群組。

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   或者，您可以依名稱查詢。群組名稱不需要是唯一名稱，因此可能會傳回多個群組。

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**注意**  
<a name="find-group-ids-console"></a>您也可以在 AWS IoT 主控台中找到這些值。群組 ID 會顯示在群組的 **Settings (設定)** 頁面上。群組版本 IDs會顯示在群組的**部署**索引標籤上。

1. <a name="copy-group-id-latestversion"></a>從輸出中的目標群組複製 `Id` 和 `LatestVersion` 值。

1. <a name="get-latest-group-version"></a>取得最新的群組版本。
   + 將 *group-id* 取代為您複製`Id`的 。
   + 將 *latest-group-version-id* 取代為您複製`LatestVersion`的 。

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. <a name="copy-group-component-arns-except-function"></a>從輸出中的 `Definition` 物件，複製 `CoreDefinitionVersionArn` 以及所有其他群組元件的 ARN，但 `FunctionDefinitionVersionArn` 除外。建立新群組版本時，您會需要使用這些數值。

1. <a name="parse-function-def-id"></a>從輸出中的 `FunctionDefinitionVersionArn`，複製函數定義的 ID。該 ID 是 ARN 中跟在 `functions` 區段後面的 GUID，如下列範例所示。

   ```
   arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
   ```
**注意**  
或者，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)命令來建立函數定義，然後從輸出複製 ID。

1. 新增函數定義版本至函數定義。
   + 將 *function-definition-id* 取代為您為函數定義複製的 `Id`。
   + 將 *arbitrary-function-id* 取代為函數的名稱，例如 **spooler-function**。
   + 將您想要在此版本中包含的任何 Lambda 函數新增至`functions`陣列。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html)命令，從現有的函數定義版本取得 Greengrass Lambda 函數。

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_SUBSCRIPTION_QUALITY":"AtLeastOncePersistent"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id"}]'
   ```
**注意**  
如果您先前設定 `GG_CONFIG_STORAGE_TYPE` 或 `GG_CONFIG_MAX_SIZE_BYTES` 環境變數來[定義儲存設定](#mqtt-message-queue)，請將它們包含在此函數執行個體中。

1. <a name="copy-function-def-version-arn"></a>從輸出複製函數定義版本的 `Arn`。

1. <a name="create-group-version-with-sys-lambda"></a>建立包含系統 Lambda 函數的群組版本。
   + 為該群組將 *group-id* 取代為 `Id`。
   + 將 *core-definition-version-arn* 取代為您從最新群組版本所複製的 `CoreDefinitionVersionArn`。
   + 將 *function-definition-version-arn* 取代為您為功能定義版本所複製的 `Arn`。
   + 取代您已從最新群組版本複製之其他群組元件 (例如 `SubscriptionDefinitionVersionArn` 或 `DeviceDefinitionVersionArn`) 的 ARN。
   + 移除任何未使用的參數。比如說若您的群組版本不包含任何資源，則請移除 `--resource-definition-version-arn`。

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --device-definition-version-arn device-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>從輸出複製 `Version`。這是新群組版本的 ID。

1. <a name="create-group-deployment"></a>部署具有新群組版本的群組。
   + 將 *group-id* 取代為您為群組所複製的 `Id`。
   + 將 *group-version-id* 取代為您為新群組版本所複製的 `Version`。

   ```
   aws greengrass create-deployment \
   --group-id group-id \
   --group-version-id group-version-id \
   --deployment-type NewDeployment
   ```

1. (選用) 提高核心組態檔案中的 [maxWorkItemCount](#config-json-runtime) 屬性。這有助核心處理增加的 MQTT 流量以及與本機目標之間的通訊。

 若要使用這些組態變更更新核心，您可以使用 AWS IoT Greengrass API 來建立新的函數定義版本，其中包含具有更新組態的`GGCloudSpooler`函數。然後，請將函數定義版本新增至新群組版本 (以及其他群組元件) 和部署群組的版本中。如果想要還原預設組態，您可以建立一個不包含 `GGCloudSpooler` 函數的函數定義版本。

 此系統 Lambda 函數不會顯示在主控台中。然而，在函數新增至最新的群組版本後，除非您使用 API 執行取代或移除作業，否則其將包含在從主控台進行的部署中。

### 與 進行 MQTT 連線的用戶端 IDs AWS IoT
<a name="connection-client-id"></a>

此功能適用於 AWS IoT Greengrass Core v1.8 和更新版本。

Greengrass 核心會開啟與 的 MQTT 連線 AWS IoT Core ，以進行陰影同步和憑證管理等操作。對於這些連線，核心會根據核心物件名稱產生可預測的用戶端 ID。可預測IDs 可與監控、稽核和定價功能搭配使用，包括 AWS IoT Device Defender 和 [AWS IoT 生命週期事件](https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)。您也可以建立關於可預測用戶端 ID 的邏輯 (例如根據憑證屬性建立[訂閱政策](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html#pub-sub-policy-cert)範本)。

------
#### [ GGC v1.9 and later ]

兩個 Greengrass 系統元件會開啟 MQTT 連線 AWS IoT Core。這些元件使用下列模式來產生連線的用戶端 ID。


| 作業 | 用戶端 ID 模式 | 
| --- | --- | 
| 部署 | `core-thing-name` 範例：`MyCoreThing` 此用戶端 ID 可用來連線、中斷連線、訂閱和取消訂閱生命週期事件通知。 | 
| Subscriptions |  `core-thing-name-cn` 範例：`MyCoreThing-c01` `n` 是一個整數，從 00 開始，並隨著每個新連線遞增，最大數量為 250。連線數量取決於與 AWS IoT Core 影子狀態同步的裝置數量 （每個群組最多 2，500 個），以及將 `cloud`作為其來源的訂閱數量 （每個群組最多 10，000 個）。 多工緩衝處理系統元件會與 連線 AWS IoT Core ，以與雲端來源或目標交換訂閱的訊息。多工緩衝處理也會做為 AWS IoT Core 與本機影子服務和裝置憑證管理器之間訊息交換的代理。  | 

若要計算每個群組的 MQTT 連線數，請使用下列公式：

`number of MQTT connections per group = number of connections for Deployment Agent + number of connections for Subscriptions`

其中：
+ 部署代理程式的連線數 = 1。
+ 訂閱的連線數 = `(2 subscriptions for supporting certificate generation + number of MQTT topics in AWS IoT Core + number of device shadows synced) / 50`。
  + 其中， `50` = 每個 AWS IoT Core 連線可支援的訂閱數量上限。

**注意**  
如果您為 訂閱啟用[持久性工作階段](#mqtt-persistent-sessions) AWS IoT Core，核心會開啟至少一個要在持久性工作階段中使用的額外連線。系統組件不支援持久性工作階段，因此它們不能共用該連線。

若要減少 MQTT 連線數量並協助降低成本，您可以使用本機 Lambda 函數彙總邊緣的資料。然後，您將彙總的資料傳送至 AWS 雲端。因此，您在 中使用較少的 MQTT 主題 AWS IoT Core。如需詳細資訊，請參閱[AWS IoT Greengrass 定價](https://aws.amazon.com/greengrass/pricing/)。

------
#### [ GGC v1.8 ]

有數個 Greengrass 系統元件會開啟與 AWS IoT Core的 MQTT 連線。這些元件使用下列模式來產生連線的用戶端 ID。


| 作業 | 用戶端 ID 模式 | 
| --- | --- | 
| 部署 | `core-thing-name` 範例：`MyCoreThing` 此用戶端 ID 可用來連線、中斷連線、訂閱和取消訂閱生命週期事件通知。 | 
| 與 交換 MQTT 訊息 AWS IoT Core | `core-thing-name-spr` 範例：`MyCoreThing-spr` | 
| 影子同步 | `core-thing-name-snn` 範例：`MyCoreThing-s01` `nn` 是從 00 起始的整數，隨著每個新連線遞增，最大到 03。連線數目取決於與影子狀態同步的裝置數目 （每個群組最多 200 個裝置） AWS IoT Core （每個連線最多 50 個訂閱）。 | 
| 裝置憑證管理 | `core-thing-name-dcm` 範例：`MyCoreThing-dcm` | 

------

**注意**  
同時連線中使用重複的用戶端 ID，可能會導致連線-中斷連線的無限迴圈。如果另一個裝置已硬式編碼為在連線中使用核心裝置名稱做為用戶端 ID，就會發生這種情形。如需詳細資訊，請參閱此[故障診斷步驟](gg-troubleshooting.md#config-client-id)。

Greengrass 裝置也與 AWS IoT Device Management的機群索引服務完全整合。這可讓您根據裝置屬性、影子狀態和雲端連線狀態，索引和搜尋裝置。例如，Greengrass 裝置使用實物名稱當做用戶端 ID 建立至少一個連線，因此您可以使用裝置連線索引，探索哪些 Greengrass 裝置目前與 AWS IoT Core連線或中斷連線。如需詳細資訊，請參閱[《 開發人員指南》中的機群索引服務](https://docs.aws.amazon.com/iot/latest/developerguide/iot-indexing.html)。 *AWS IoT *

### 設定本機簡訊的 MQTT 連接埠
<a name="config-local-mqtt-port"></a>

此功能需要 AWS IoT Greengrass Core v1.10 或更新版本。

Greengrass 核心做為本機 Lambda 函數、連接器和[用戶端裝置](what-is-gg.md#greengrass-devices)之間 MQTT 訊息的本機訊息中介裝置。根據預設，核心會使用連接埠 8883 以供區域網路上的 MQTT 流量使用。您可能會想變更連接埠，以避免與在連接埠 8883 上執行的其他軟體發生衝突。

**設定核心用於本機 MQTT 流量的連接埠號碼**

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

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```

1. 開放 `greengrass-root/config/config.json` 由 su 使用者編輯。

1. 在 `coreThing` 物件中，新增 `ggMqttPort` 屬性並將值設為您要使用的連接埠號碼。有效值為 1024 到 65535。下列範例會將連接埠號碼設定為 `9000`。

   ```
   {
       "coreThing" : {
           "caPath" : "root.ca.pem",
           "certPath" : "12345abcde.cert.pem",
           "keyPath" : "12345abcde.private.key",
           "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name",
           "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
           "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
           "ggMqttPort" : 9000,
           "keepAlive" : 600
       },
       ...
   }
   ```

1. 啟動協助程式。

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

1. 如果該核心已啟用[自動 IP 偵測](#ip-auto-detect)，則組態即完成。

   如果自動 IP 偵測未啟用，您必須更新核心的連線資訊。這可讓用戶端裝置在探索操作期間接收正確的連接埠號碼，以取得核心連線資訊。您可以使用 AWS IoT 主控台或 AWS IoT Greengrass API 來更新核心連線資訊。在此程序中，您只會更新連接埠號碼。核心的本機 IP 地址會保持不變。  
**更新核心 (主控台) 的連線資訊**  

   1. 在群組組態頁面上，選擇 Greengrass 核心。

   1. 在核心詳細資訊頁面上，選擇 **MQTT 代理程式端點**索引標籤。

   1. 選擇**管理端點**，然後選擇**新增端點** 

   1. 輸入您目前的本機 IP 地址和新的連接埠號碼。下列範例會設定 IP 地址 `192.168.1.8` 的連接埠號碼 `9000`。

   1. 移除已淘汰的端點，然後選擇 **Update (更新)**  
**更新核心 (API) 的連線資訊**  
   + 使用 [UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html) 動作。下列範例使用 AWS CLI 中的 `update-connectivity-info` 來設定 IP 地址 `192.168.1.8` 的連接埠號碼 `9000`。

     ```
     aws greengrass update-connectivity-info \
         --thing-name "MyGroup_Core" \
         --connectivity-info "[{\"Metadata\":\"\",\"PortNumber\":9000,\"HostAddress\":\"192.168.1.8\",\"Id\":\"localIP_192.168.1.8\"},{\"Metadata\":\"\",\"PortNumber\":8883,\"HostAddress\":\"127.0.0.1\",\"Id\":\"localhost_127.0.0.1_0\"}]"
     ```
**注意**  
您也可以設定核心用於 MQTT 訊息的連接埠 AWS IoT Core。如需詳細資訊，請參閱[連線至連接埠 443 或透過網路代理](#alpn-network-proxy)。

### 使用 發佈、訂閱、取消訂閱 MQTT 連線操作的逾時 AWS 雲端
<a name="mqtt-operation-timeout"></a>

此功能可在 AWS IoT Greengrass v1.10.2 或更新版本中使用。

您可以設定允許 Greengrass 核心在與 AWS IoT Core的 MQTT 連線中完成發佈、訂閱或取消訂閱操作的時間量 (以秒為單位)。如果因為頻寬限制或高延遲而造成操作逾時，您可能會想要調整此設定。若要在 [config.json](#config-json) 檔案中設定此設定，請新增或變更 `coreThing` 物件中的 `mqttOperationTimeout` 屬性。例如：

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

預設逾時時間為 5 秒。最小逾時為 5 秒。

## 啟動自動 IP 偵測
<a name="ip-auto-detect"></a>

您可以設定 AWS IoT Greengrass 讓 Greengrass 群組中的用戶端裝置自動探索 Greengrass 核心。啟用時，核心會監控其 IP 地址的變更。如果地址變更，核心會發佈更新的地址清單。這些地址可供與核心位於相同 Greengrass 群組中的用戶端裝置使用。

**注意**  
用戶端裝置 AWS IoT 的政策必須授予`greengrass:Discover`許可，允許裝置擷取核心的連線資訊。如需有關此政策陳述式的詳細資訊，請參閱[探索授權](gg-discover-api.md#gg-discover-auth)。

若要從 AWS IoT Greengrass 主控台啟用此功能，請在第一次部署 Greengrass 群組時選擇**自動偵測**。您也可以選擇 **Lambda 函數**索引標籤並選擇 **IP 偵測器**，在群組組態頁面上啟用或停用此功能。如果選取自動偵測**和覆寫 MQTT 代理程式端點，則會啟用自動 IP 偵測**。

若要使用 AWS IoT Greengrass API 管理自動探索，您必須設定`IPDetector`系統 Lambda 函數。下列程序說明如何使用 [ create-function-definition-version](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition-version.html) CLI 命令來設定 Greengrass 核心的自動探索。

1. <a name="get-group-id-latestversion"></a>取得目標 Greengrass 群組 ID 和目標群組版本 ID。此程序假設這是最新的群組和群組版本。下列查詢會傳回最近建立的群組。

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   或者，您可以依名稱查詢。群組名稱不需要是唯一名稱，因此可能會傳回多個群組。

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**注意**  
<a name="find-group-ids-console"></a>您也可以在 AWS IoT 主控台中找到這些值。群組 ID 會顯示在群組的 **Settings (設定)** 頁面上。群組版本 IDs會顯示在群組的**部署**索引標籤上。

1. <a name="copy-group-id-latestversion"></a>從輸出中的目標群組複製 `Id` 和 `LatestVersion` 值。

1. <a name="get-latest-group-version"></a>取得最新的群組版本。
   + 將 *group-id* 取代為您複製`Id`的 。
   + 將 *latest-group-version-id* 取代為您複製`LatestVersion`的 。

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. <a name="copy-group-component-arns-except-function"></a>從輸出中的 `Definition` 物件，複製 `CoreDefinitionVersionArn` 以及所有其他群組元件的 ARN，但 `FunctionDefinitionVersionArn` 除外。建立新群組版本時，您會需要使用這些數值。

1. 從輸出中的 `FunctionDefinitionVersionArn`，複製函數定義的 ID 和函數定義版本：

   ```
   arn:aws:greengrass:region:account-id:/greengrass/groups/function-definition-id/versions/function-definition-version-id
   ```
**注意**  
您可以選擇性地執行 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html) 命令來建立函數定義，然後從輸出複製 ID。

1.  使用 [https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-function-definition-version.html) 命令來取得目前定義狀態。使用您為函數定義複製的 *function-definition-id*。例如，*4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3*。

   ```
   aws greengrass get-function-definition-version
   --function-definition-id function-definition-id
   --function-definition-version-id function-definition-version-id
   ```

    請記下列出的函數組態。您需要在建立新的函數定義版本中包含這些組態，以防止目前的定義設定遺失。

1.  新增函數定義版本至函數定義。
   + 將 *function-definition-id* 取代為您為函數定義複製的 `Id`。例如，*4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3*。
   + 將 *arbitrary-function-id* 取代為函數的名稱，例如 **auto-detection-function**。
   + 將您想要在此版本中包含的所有 Lambda 函數新增至`functions`陣列，例如上一個步驟中列出的任何 。

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[{"FunctionArn":"arn:aws:lambda:::function:GGIPDetector:1","Id":"arbitrary-function-id","FunctionConfiguration":{"Pinned":true,"MemorySize":32768,"Timeout":3}}]'\
   --region us-west-2
   ```

1. <a name="copy-function-def-version-arn"></a>從輸出複製函數定義版本的 `Arn`。

1. <a name="create-group-version-with-sys-lambda"></a>建立包含系統 Lambda 函數的群組版本。
   + 為該群組將 *group-id* 取代為 `Id`。
   + 將 *core-definition-version-arn* 取代為您從最新群組版本所複製的 `CoreDefinitionVersionArn`。
   + 將 *function-definition-version-arn* 取代為您為功能定義版本所複製的 `Arn`。
   + 取代您已從最新群組版本複製之其他群組元件 (例如 `SubscriptionDefinitionVersionArn` 或 `DeviceDefinitionVersionArn`) 的 ARN。
   + 移除任何未使用的參數。比如說若您的群組版本不包含任何資源，則請移除 `--resource-definition-version-arn`。

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --device-definition-version-arn device-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>從輸出複製 `Version`。這是新群組版本的 ID。

1. <a name="create-group-deployment"></a>部署具有新群組版本的群組。
   + 將 *group-id* 取代為您為群組所複製的 `Id`。
   + 將 *group-version-id* 取代為您為新群組版本所複製的 `Version`。

   ```
   aws greengrass create-deployment \
   --group-id group-id \
   --group-version-id group-version-id \
   --deployment-type NewDeployment
   ```

 如果想要手動輸入 Greengrass 核心的 IP 地址，您可以使用不包含 `IPDetector` 函數的不同函數定義來完成此教學課程。這將防止偵測函數尋找並自動輸入您的 Greengrass 核心 IP 地址。

 Lambda 主控台中看不到此系統 Lambda 函數。將函數新增至最新的群組版本後，它會包含在您從主控台執行的部署中，除非您使用 API 將其取代或移除。

## 設定初始化系統，啟動 Greengrass 協助程式
<a name="start-on-boot"></a>

設定您的初始化系統在開機時啟動 Greengrass 協助程式是很好的實務練習，尤其是在管理大型叢集裝置時。

**注意**  
如果您使用 `apt` 安裝 AWS IoT Greengrass Core 軟體，您可以使用系統化指令碼在開機時啟用啟動。如需詳細資訊，請參閱[使用 systemd 指令碼以管理 Greengrass 協助程式生命週期](install-ggc.md#ggc-package-manager-systemd)。

有不同類型的初始化系統，例如 initd、systemd、SystemV，以及其所使用類似的組態參數。以下範例為 systemd 的服務檔案：此 `Type` 參數設為 `forking` 是因為 greengrassd (用於啟動 Greengrass) 分岔 Greengrass 協助程式程序，而 `Restart` 參數設為 `on-failure`，若 Greengrass 故障時將導引 systemd 重新啟動 Greengrass。

**注意**  
若要查看您的裝置是否使用 systemd，請依照[模組 1 ](module1.md)所述執行`check_ggc_dependencies`指令碼。然後，若要使用 systemd，請確定 中的 `useSystemd` 參數[`config.json`](#config-json)設定為 `yes`。

```
[Unit]
Description=Greengrass Daemon

[Service]
Type=forking
PIDFile=/var/run/greengrassd.pid
Restart=on-failure
ExecStart=/greengrass/ggc/core/greengrassd start
ExecReload=/greengrass/ggc/core/greengrassd restart
ExecStop=/greengrass/ggc/core/greengrassd stop

[Install]
WantedBy=multi-user.target
```

## 另請參閱
<a name="cores-see-also"></a>
+ [什麼是 AWS IoT Greengrass？](what-is-gg.md)
+ [支援平台和需求](what-is-gg.md#gg-platforms)
+ [入門 AWS IoT Greengrass](gg-gs.md)
+ [AWS IoT Greengrass 群組物件模型概觀](deployments.md#api-overview)
+ [硬體安全整合](hardware-security.md)