

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

# 設定 AWS IoT Greengrass 核心軟體
新的建議 JVM 選項[https://docs.aws.amazon.com/greengrass/v2/developerguide/configure-greengrass-core-v2#jvm-tuning](https://docs.aws.amazon.com/greengrass/v2/developerguide/configure-greengrass-core-v2#jvm-tuning)

新增建議 JVM 選項的相關資訊，以控制 AWS IoT Greengrass Core 軟體的記憶體配置。

Core AWS IoT Greengrass 軟體提供可用來設定軟體的選項。您可以建立部署，在每個 AWS IoT Greengrass 核心裝置上設定 核心軟體。

**Topics**
+ [

## 部署 Greengrass 核元件
](#configure-nucleus-component)
+ [

## 將 Greengrass 核設定為系統服務
](#configure-system-service)
+ [

## 使用 JVM 選項控制記憶體配置
](#jvm-tuning)
+ [

## 設定執行元件的使用者
](#configure-component-user)
+ [

## 設定元件的系統資源限制
](#configure-component-system-resource-limits)
+ [

## 連線至連接埠 443 或透過網路代理
](#configure-alpn-network-proxy)
+ [

## 使用私有 CA 簽署的裝置憑證
](#configure-nucleus-private-ca)
+ [

## 設定 MQTT 逾時和快取設定
](#configure-mqtt)
+ [

## 在 IPv6 網路上設定 Greengrass Nucleus
](#configure-ipv6)

## 部署 Greengrass 核元件


AWS IoT Greengrass 提供 AWS IoT Greengrass Core 軟體做為元件，您可以將其部署到 Greengrass 核心裝置。您可以建立部署，將相同的組態套用至多個 Greengrass 核心裝置。如需詳細資訊，請參閱[Greengrass 核](greengrass-nucleus-component.md)及[更新 AWS IoT Greengrass 核心軟體 (OTA)](update-greengrass-core-v2.md)。

## 將 Greengrass 核設定為系統服務


您必須將 AWS IoT Greengrass Core 軟體設定為裝置初始化系統中的系統服務，才能執行下列動作：
+ 在裝置開機時啟動 AWS IoT Greengrass Core 軟體。如果您管理大型裝置機群，這是很好的做法。
+ 安裝並執行外掛程式元件。數個 AWS提供的元件是外掛程式元件，可讓它們直接與 Greengrass 核連接。如需元件類型的詳細資訊，請參閱 [元件類型](develop-greengrass-components.md#component-types)。
+ 將over-the-air(OTA) 更新套用至核心裝置 AWS IoT Greengrass 的核心軟體。如需詳細資訊，請參閱[更新 AWS IoT Greengrass 核心軟體 (OTA)](update-greengrass-core-v2.md)。
+ 當部署將元件更新至新版本或更新特定組態參數時，啟用元件以重新啟動 AWS IoT Greengrass Core 軟體或核心裝置。如需詳細資訊，請參閱[引導生命週期步驟](component-recipe-reference.md#bootstrap-lifecycle-definition)。

**重要**  <a name="windows-system-service-requirement-important-note"></a>
在 Windows 核心裝置上，您必須將 AWS IoT Greengrass Core 軟體設定為系統服務。

**Topics**
+ [

### 將 核設定為系統服務 (Linux)
](#configure-system-service-linux)
+ [

### 將核心設定為系統服務 (Windows)
](#configure-system-service-windows)

### 將 核設定為系統服務 (Linux)


Linux 裝置支援不同的初始化系統，例如 initd、Systemd 和 SystemV。當您安裝 AWS IoT Greengrass Core 軟體時，您可以使用 `--setup-system-service true`引數，以系統服務的形式啟動核心，並將其設定為在裝置開機時啟動。安裝程式會將 AWS IoT Greengrass Core 軟體設定為具有 systemd 的系統服務。

您也可以手動設定要做為系統服務執行的 核。以下範例為 systemd 的服務檔案：

```
[Unit]
Description=Greengrass Core

[Service]
Type=simple
PIDFile=/greengrass/v2/alts/loader.pid
RemainAfterExit=no
Restart=on-failure
RestartSec=10
ExecStart=/bin/sh /greengrass/v2/alts/current/distro/bin/loader

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

設定系統服務之後，您可以執行下列命令來設定在開機時啟動裝置，以及啟動或停止 AWS IoT Greengrass Core 軟體。
+ 檢查服務的狀態 （系統化）

  ```
  sudo systemctl status greengrass.service
  ```
+ 若要在裝置開機時啟動核心。

  ```
  sudo systemctl enable greengrass.service
  ```
+ 在裝置開機時停止啟動核心。

  ```
  sudo systemctl disable greengrass.service
  ```
+ 啟動 AWS IoT Greengrass Core 軟體。

  ```
  sudo systemctl start greengrass.service
  ```
+ 停止 AWS IoT Greengrass Core 軟體。

  ```
  sudo systemctl stop greengrass.service
  ```

### 將核心設定為系統服務 (Windows)


安裝 AWS IoT Greengrass 核心軟體時，您可以使用 `--setup-system-service true`引數，以 Windows 服務的形式啟動核心，並將其設定為在裝置開機時啟動。

設定服務之後，您可以執行下列命令來設定在開機時啟動裝置，以及啟動或停止 AWS IoT Greengrass Core 軟體。您必須以管理員身分執行命令提示字元或 PowerShell，才能執行這些命令。

------
#### [ Windows Command Prompt (CMD) ]
+ 檢查服務的狀態

  ```
  sc query "greengrass"
  ```
+ 若要在裝置開機時啟動核心。

  ```
  sc config "greengrass" start=auto
  ```
+ 在裝置開機時停止啟動核心。

  ```
  sc config "greengrass" start=disabled
  ```
+ 啟動 AWS IoT Greengrass Core 軟體。

  ```
  sc start "greengrass"
  ```
+ 停止 AWS IoT Greengrass Core 軟體。

  ```
  sc stop "greengrass"
  ```
**注意**  <a name="windows-ignore-shutdown-signal-behavior-note"></a>
在 Windows 裝置上， AWS IoT Greengrass Core 軟體會在關閉 Greengrass 元件程序時忽略此關閉訊號。如果 AWS IoT Greengrass Core 軟體在您執行此命令時忽略關閉訊號，請等待幾秒鐘，然後再試一次。

------
#### [ PowerShell ]
+ 檢查服務的狀態

  ```
  Get-Service -Name "greengrass"
  ```
+ 若要在裝置開機時啟動核心。

  ```
  Set-Service -Name "greengrass" -Status stopped -StartupType automatic
  ```
+ 在裝置開機時停止啟動核心。

  ```
  Set-Service -Name "greengrass" -Status stopped -StartupType disabled
  ```
+ 啟動 AWS IoT Greengrass Core 軟體。

  ```
  Start-Service -Name "greengrass"
  ```
+ 停止 AWS IoT Greengrass Core 軟體。

  ```
  Stop-Service -Name "greengrass"
  ```
**注意**  <a name="windows-ignore-shutdown-signal-behavior-note"></a>
在 Windows 裝置上， AWS IoT Greengrass Core 軟體會在關閉 Greengrass 元件程序時忽略此關閉訊號。如果 AWS IoT Greengrass Core 軟體在您執行此命令時忽略關閉訊號，請等待幾秒鐘，然後再試一次。

------

## 使用 JVM 選項控制記憶體配置


如果您在記憶體有限的 AWS IoT Greengrass 裝置上執行，您可以使用 Java 虛擬機器 (JVM) 選項來控制堆積大小上限、垃圾收集模式和編譯器選項，以控制 AWS IoT Greengrass 核心軟體使用的記憶體數量。JVM 中的堆積大小會決定應用程式在[垃圾收集](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/introduction.html)發生之前或應用程式用盡記憶體之前可以使用多少記憶體。堆積大小的上限，指定了在繁重的作業進行期間擴充堆疊時，JVM 可以分配的最大記憶體容量。

若要控制記憶體配置，請建立新的部署或修改包含 nucleus 元件的現有部署，並在 [nucleus 元件組態](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-jvm-options)中的`jvmOptions`組態參數中指定您的 JVM 選項。

根據您的需求，您可以執行 AWS IoT Greengrass 核心軟體，減少記憶體配置或減少記憶體配置。

**減少記憶體配置**  
若要在記憶體配置減少的情況下執行 AWS IoT Greengrass 核心軟體，建議您使用下列範例組態合併更新，在核心組態中設定 JVM 選項：

```
{
  "jvmOptions": "-XX:+UseSerialGC -XX:TieredStopAtLevel=1"
}
```

**記憶體配置下限**  
若要以最低記憶體配置執行 AWS IoT Greengrass 核心軟體，建議您使用下列範例組態合併更新，在核心組態中設定 JVM 選項：

```
{
  "jvmOptions": "-Xmx32m -XX:+UseSerialGC -Xint"
}
```

**重要**  
執行具有最低記憶體配置 AWS IoT Greengrass 的核心軟體可能會對低規格系統產生重大效能影響，因為使用較少記憶體時，JVM 會執行更多處理。建議您調校選項，以平衡記憶體和效能需求。

這些範例組態合併更新使用以下 JVM 選項：

`-XX:+UseSerialGC`  
指定 將序列垃圾回收用於 JVM 堆積空間。序列垃圾收集器速度較慢，但比其他 JVM 垃圾收集實作使用的記憶體較少。

`-XX:TieredStopAtLevel=1`  
指示 JVM 使用一次 Java just-in-time(JIT) 編譯器。由於 JIT 編譯程式碼使用裝置記憶體中的空間，因此使用 JIT 編譯器多次耗用比單一編譯更多的記憶體。

`-XmxNNm`  
設定最大 JVM 堆積大小。  
設定過小的堆積大小上限可能會導致效能變慢或out-of-memory錯誤。建議您先測量目前的堆積用量，再使用 `-XmxNNm`選項設定大小上限。使用 JVM 選項設定您的 `-XX:NativeMemoryTracking=detail` JVM。然後，使用 [jcmd 公用程式](https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html)中的`VM.native_memory`命令請求來測量您目前的堆積用量。
如果堆積的測量不是選項，請使用 `-Xmx64m`作為開始值，將堆積大小限制為 64 MB。然後，您可以逐步減少堆積大小上限。對於最小記憶體配置，請使用 `-Xmx32m`作為起始值，將堆積大小限制為 32 MB。  
您可以根據實際需求來增加或減少`-Xmx`值；不過，強烈建議不要將堆積大小上限設定為低於 16 MB。根據部署到核心裝置的外掛程式元件，所需的 JVM 堆積大小也可能隨著時間而不同。如果最大堆積大小對您的環境而言太低，則 AWS IoT Greengrass Core 軟體可能會因為記憶體不足而遇到非預期錯誤。如果您因為記憶體不足而遇到效能較慢或發生錯誤，請還原為已知良好的設定。例如，如果您的正常遞交堆積大小為 `41428KB`，請使用 `-Xmx40m` 來稍微限制堆積用量。

`-Xint`  
指示 JVM 不使用just-in-time(JIT) 編譯器。反之，JVM 會以僅解譯模式執行。此模式比執行 JIT 編譯程式碼慢 （在低端系統上部署可能慢 20 倍）；不過，編譯的程式碼不會使用任何記憶體空間。

如需建立組態合併更新的資訊，請參閱 [更新元件組態](update-component-configurations.md)。

## 設定執行元件的使用者


 AWS IoT Greengrass 核心軟體可以系統使用者身分執行元件程序，並將與執行軟體程序不同的程序分組。這可提高安全性，因為您可以以根或管理員使用者身分執行 AWS IoT Greengrass 核心軟體，而無需將這些許可授予在核心裝置上執行的元件。

下表指出 AWS IoT Greengrass Core 軟體可以以您指定的使用者身分執行的元件類型。如需詳細資訊，請參閱[元件類型](develop-greengrass-components.md#component-types)。


| 元件類型 | 設定元件使用者 | 
| --- | --- | 
|  Huleus  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-no.png) 否   | 
|  外掛程式  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-no.png) 否   | 
|  一般  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-yes.png) 是   | 
|  Lambda （非容器化）  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-yes.png) 是   | 
|  Lambda （容器化）  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-yes.png) 是   | 

您必須先建立元件使用者，才能在部署組態中指定它。在 Windows 型裝置上，您還必須將使用者的使用者名稱和密碼存放在 LocalSystem 帳戶的登入資料管理員執行個體中。如需詳細資訊，請參閱[在 Windows 裝置上設定元件使用者](#create-component-user-windows)。

當您在 Linux 型裝置上設定元件使用者時，您也可以選擇性地指定群組。您可以指定使用者和群組，並以冒號 (`:`) 分隔，格式如下：`user:group`。如果您未指定群組，則 AWS IoT Greengrass Core 軟體會預設為使用者的主要群組。您可以使用名稱或 ID 來識別使用者和群組。

在 Linux 型裝置上，您也可以以不存在的系統使用者身分執行元件，也稱為未知使用者，以提高安全性。Linux 程序可以發出由相同使用者執行的任何其他程序的訊號。未知使用者不會執行其他程序，因此您可以使用未知使用者身分執行元件，以防止元件向核心裝置上的其他元件發出訊號。若要以未知使用者身分執行元件，請指定核心裝置上不存在的使用者 ID。您也可以指定不存在的群組 ID，以做為未知群組執行。

您可以為每個元件和每個核心裝置設定使用者。
+ **為元件設定**

  您可以設定每個元件，以與該元件特定的使用者一起執行。當您建立部署時，您可以為該元件`runWith`組態中的每個元件指定使用者。如果您設定元件， AWS IoT Greengrass 則 Core 軟體會以指定的使用者身分執行元件。否則，預設會以您為核心裝置設定的預設使用者身分執行元件。如需在部署組態中指定元件使用者的詳細資訊，請參閱 中的[`runWith`](create-deployments.md#component-run-with-config)組態參數[建立部署](create-deployments.md)。
+ **設定核心裝置的預設使用者**

  您可以設定 AWS IoT Greengrass Core 軟體用來執行元件的預設使用者。 AWS IoT Greengrass 核心軟體執行元件時，會檢查您是否為該元件指定使用者，並使用它來執行元件。如果元件未指定使用者，則 AWS IoT Greengrass Core 軟體會以您為核心裝置設定的預設使用者身分執行元件。如需詳細資訊，請參閱[設定預設元件使用者](#configure-default-component-user)。

**注意**  
在 Windows 型裝置上，您必須至少指定預設使用者才能執行元件。  
在 Linux 型裝置上，如果您未將使用者設定為執行元件，則適用下列考量：  
如果您執行 AWS IoT Greengrass Core 軟體做為根，則軟體不會執行元件。如果您以根身分執行 ，則必須指定預設使用者來執行元件。
如果您以非根使用者身分執行 AWS IoT Greengrass Core 軟體，則軟體會以該使用者身分執行元件。

**Topics**
+ [

### 在 Windows 裝置上設定元件使用者
](#create-component-user-windows)
+ [

### 設定預設元件使用者
](#configure-default-component-user)

### 在 Windows 裝置上設定元件使用者


**在 Windows 型裝置上設定元件使用者**

1. 在裝置上的 LocalSystem 帳戶中建立元件使用者。

   ```
   net user /add component-user password
   ```

1. 使用 [Microsoft 的 PsExec 公用程式](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)，將元件使用者的使用者名稱和密碼存放在 LocalSystem 帳戶的 Credential Manager 執行個體中。

   ```
   psexec -s cmd /c cmdkey /generic:component-user /user:component-user /pass:password
   ```
**注意**  
在 Windows 型裝置上，LocalSystem 帳戶會執行 Greengrass 核，而且您必須使用 PsExec 公用程式將元件使用者資訊存放在 LocalSystem 帳戶中。使用 Credential Manager 應用程式會將此資訊存放在目前登入使用者的 Windows 帳戶中，而不是 LocalSystem 帳戶。

### 設定預設元件使用者


您可以使用部署來設定核心裝置上的預設使用者。在此部署中，您會更新 [nucleus 元件](greengrass-nucleus-component.md)組態。

**注意**  
您也可以在使用 `--component-default-user`選項安裝 AWS IoT Greengrass Core 軟體時設定預設使用者。如需詳細資訊，請參閱[安裝 AWS IoT Greengrass Core 軟體](install-greengrass-core-v2.md)。

[建立 部署](create-deployments.md)，指定 `aws.greengrass.Nucleus`元件的下列組態更新。

------
#### [ Linux ]

```
{
  "runWithDefault": {
    "posixUser": "ggc_user:ggc_group"
  }
}
```

------
#### [ Windows ]

```
{
  "runWithDefault": {
    "windowsUser": "ggc_user"
  }
}
```

**注意**  
您指定的使用者必須存在，且此使用者的使用者名稱和密碼必須存放在 Windows 裝置上的 LocalSystem 帳戶的登入資料管理員執行個體中。如需詳細資訊，請參閱[在 Windows 裝置上設定元件使用者](#create-component-user-windows)。

------

下列範例定義以 Linux 為基礎的裝置的部署，將 設定為`ggc_user`預設使用者，並將 `ggc_group`設定為預設群組。`merge` 組態更新需要序列化 JSON 物件。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.16.1",
      "configurationUpdate": {
        "merge": "{\"runWithDefault\":{\"posixUser\":\"ggc_user:ggc_group\"}}"
      }
    }
  }
}
```

## 設定元件的系統資源限制
設定系統資源限制

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.4.0 和更新版本。目前 AWS IoT Greengrass 不支援 Windows 核心裝置上的此功能。

您可以設定每個元件程序可在核心裝置上使用的 CPU 和 RAM 用量上限。

下表顯示支援系統資源限制的元件類型。如需詳細資訊，請參閱[元件類型](develop-greengrass-components.md#component-types)。


| 元件類型 | 設定系統資源限制 | 
| --- | --- | 
|  Huleus  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-no.png) 否   | 
|  外掛程式  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-no.png) 否   | 
|  一般  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-yes.png) 是   | 
|  Lambda （非容器化）  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-yes.png) 是   | 
|  Lambda （容器化）  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/images/icon-no.png) 否   | 

**重要**  
當您[在 Docker 容器中執行 AWS IoT Greengrass Core 軟體時，](run-greengrass-docker.md)不支援系統資源限制。

您可以為每個元件和每個核心裝置設定系統資源限制。
+ **為元件設定**

  您可以使用該元件特定的系統資源限制來設定每個元件。建立部署時，您可以指定部署中每個元件的系統資源限制。如果元件支援系統資源限制，則 AWS IoT Greengrass Core 軟體會將限制套用至元件的程序。如果您未指定元件的系統資源限制，則 AWS IoT Greengrass Core 軟體會使用您為核心裝置設定的任何預設值。如需詳細資訊，請參閱[建立部署](create-deployments.md)。
+ **設定核心裝置的預設值**

  您可以設定 AWS IoT Greengrass Core 軟體套用至支援這些限制之元件的預設系統資源限制。當 AWS IoT Greengrass Core 軟體執行元件時，它會套用您為該元件指定的系統資源限制。如果該元件未指定系統資源限制，則 AWS IoT Greengrass Core 軟體會套用您為核心裝置設定的預設系統資源限制。如果您未指定預設系統資源限制， AWS IoT Greengrass 則 Core 軟體預設不會套用任何系統資源限制。如需詳細資訊，請參閱[設定預設系統資源限制](#configure-default-component-system-resource-limits)。

### 設定預設系統資源限制


您可以部署 [Greengrass 核元件](greengrass-nucleus-component.md)，以設定核心裝置的預設系統資源限制。若要設定預設系統資源限制，[請建立 部署](create-deployments.md)來指定`aws.greengrass.Nucleus`元件的下列組態更新。

```
{
  "runWithDefault": {
    "systemResourceLimits": {
      "cpu": cpuTimeLimit,
      "memory": memoryLimitInKb
    }
  }
}
```

下列範例會定義將 CPU 時間限制設定為 的部署`2`，相當於具有 4 個 CPU 核心之裝置上的 50% 用量。此範例也會將記憶體用量設定為 100 MB。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.16.1",
      "configurationUpdate": {
        "merge": "{\"runWithDefault\":{\"systemResourceLimits\":\"cpus\":2,\"memory\":102400}}}"
      }
    }
  }
}
```

## 連線至連接埠 443 或透過網路代理


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

**注意**  
執行 Greengrass [核元件 v2.0.3 和更早版本的 Greengrass](greengrass-nucleus-component.md) 核心裝置使用連接埠 8443 連接到 AWS IoT Greengrass 資料平面端點。這些裝置必須能夠在連接埠 8443 上連線至此端點。如需詳細資訊，請參閱[允許透過代理或防火牆的裝置流量](allow-device-traffic.md)。

若要在這些案例中啟用通訊， AWS IoT Greengrass 提供下列組態選項：
+ **透過連接埠 443 的 MQTT 通訊**。如果您的網路允許連線至連接埠 443，您可以將 Greengrass 核心裝置設定為將連接埠 443 用於 MQTT 流量，而不是預設連接埠 8883。這可以直接連線至連接埠 443，或透過網路代理伺服器連線。與使用憑證型用戶端身分驗證的預設組態不同，連接埠 443 上的 MQTT 會使用[裝置服務角色](device-service-role.md)進行身分驗證。

  如需詳細資訊，請參閱[透過連接埠 443 設定 MQTT](#configure-mqtt-port-443)。
+ **透過連接埠 443 的 HTTPS 通訊**。Core AWS IoT Greengrass 軟體預設會透過連接埠 8443 傳送 HTTPS 流量，但您可以將其設定為使用連接埠 443。 AWS IoT Greengrass 會使用[應用程式層通訊協定網路](https://tools.ietf.org/html/rfc7301) (ALPN) TLS 延伸來啟用此連線。如同預設組態，連接埠 443 上的 HTTPS 使用憑證型用戶端身分驗證。
**重要**  
若要使用 ALPN 並透過連接埠 443 啟用 HTTPS 通訊，您的核心裝置必須執行 Java 8 更新 252 或更新版本。Java 第 9 版及更新版本的所有更新也支援 ALPN。

  如需詳細資訊，請參閱[透過連接埠 443 設定 HTTPS](#configure-https-port-443)。
+ **透過網路代理的連線**。您可以設定網路代理伺服器做為連線至 Greengrass 核心裝置的媒介。 AWS IoT Greengrass 支援 HTTP 和 HTTPS 代理的基本身分驗證。

  <a name="https-proxy-greengrass-nucleus-requirement"></a>Greengrass 核心裝置必須執行 [Greengrass 核 v](greengrass-nucleus-component.md)2.5.0 或更新版本，才能使用 HTTPS 代理。

  Core AWS IoT Greengrass 軟體會透過 `ALL_PROXY`、`HTTPS_PROXY`、 和 `HTTP_PROXY``NO_PROXY`環境變數，將代理組態傳遞至元件。元件必須使用這些設定來透過代理連線。元件使用常見程式庫 （例如 boto3、cURL 和 python `requests`套件），這些程式庫預設會使用這些環境變數進行連線。如果元件也指定這些環境變數，則 AWS IoT Greengrass 不會覆寫它們。

  如需詳細資訊，請參閱[設定網路代理](#configure-network-proxy)。

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


您可以在現有的核心裝置上，或在新的核心裝置上安裝 AWS IoT Greengrass 核心軟體時，透過連接埠 443 設定 MQTT。

**Topics**
+ [

#### 在現有核心裝置上透過連接埠 443 設定 MQTT
](#configure-mqtt-port-443-deployment)
+ [

#### 在安裝期間透過連接埠 443 設定 MQTT
](#configure-mqtt-port-443-installer)

#### 在現有核心裝置上透過連接埠 443 設定 MQTT


您可以使用部署，在單一核心裝置或一組核心裝置上透過連接埠 443 設定 MQTT。在此部署中，您會更新 [nucleus 元件](greengrass-nucleus-component.md)組態。當您更新其`mqtt`組態時，核會重新啟動。

若要透過連接埠 443 設定 MQTT，[請建立 部署](create-deployments.md)來指定`aws.greengrass.Nucleus`元件的下列組態更新。

```
{
  "mqtt": {
    "port": 443
  }
}
```

下列範例定義透過連接埠 443 設定 MQTT 的部署。`merge` 組態更新需要序列化 JSON 物件。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.16.1",
      "configurationUpdate": {
        "merge": "{\"mqtt\":{\"port\":443}}"
      }
    }
  }
}
```

#### 在安裝期間透過連接埠 443 設定 MQTT


您可以在核心裝置上安裝 AWS IoT Greengrass Core 軟體時，透過連接埠 443 設定 MQTT。使用`--init-config`安裝程式引數透過連接埠 443 設定 MQTT。您可以在使用[手動佈建](manual-installation.md)、[機群佈建](fleet-provisioning.md)或[自訂佈建](custom-provisioning.md)安裝 時指定此引數。

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


此功能需要 v2[Greengrass 核](greengrass-nucleus-component.md).0.4 或更新版本。

您可以在現有核心裝置上，或在新核心裝置上安裝 AWS IoT Greengrass 核心軟體時，透過連接埠 443 設定 HTTPS。

**Topics**
+ [

#### 在現有核心裝置上透過連接埠 443 設定 HTTPS
](#configure-https-port-443-deployment)
+ [

#### 在安裝期間透過連接埠 443 設定 HTTPS
](#configure-https-port-443-installer)

#### 在現有核心裝置上透過連接埠 443 設定 HTTPS


您可以使用部署，在單一核心裝置或一組核心裝置上透過連接埠 443 設定 HTTPS。在此部署中，您會更新 [nucleus 元件](greengrass-nucleus-component.md)組態。

若要透過連接埠 443 設定 HTTPS，[請建立指定下列元件組態更新的部署](create-deployments.md)。 `aws.greengrass.Nucleus`

```
{
  "greengrassDataPlanePort": 443
}
```

下列範例定義透過連接埠 443 設定 HTTPS 的部署。`merge` 組態更新需要序列化 JSON 物件。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.16.1",
      "configurationUpdate": {
        "merge": "{\"greengrassDataPlanePort\":443}"
      }
    }
  }
}
```

#### 在安裝期間透過連接埠 443 設定 HTTPS


您可以在核心裝置上安裝 AWS IoT Greengrass Core 軟體時，透過連接埠 443 設定 HTTPS。使用`--init-config`安裝程式引數透過連接埠 443 設定 HTTPS。您可以在使用[手動佈建](manual-installation.md)、[機群佈建](fleet-provisioning.md)或[自訂佈建](custom-provisioning.md)安裝 時指定此引數。

### 設定網路代理


遵循本節中的程序，設定 Greengrass 核心裝置透過 HTTP 或 HTTPS 網路代理連線到網際網路。如需核心裝置使用的端點和連接埠的詳細資訊，請參閱 [允許透過代理或防火牆的裝置流量](allow-device-traffic.md)。

**重要**  
如果您的核心裝置執行比 v2.4.0 更舊的 [Greengrass 核](greengrass-nucleus-component.md)版本，您裝置的角色必須允許下列許可才能使用網路代理：  
`iot:Connect`
`iot:Publish`
`iot:Receive`
`iot:Subscribe`
這是必要的，因為裝置會使用字符交換服務的 AWS 登入資料來驗證 MQTT 連線 AWS IoT。裝置使用 MQTT 從 接收和安裝部署 AWS 雲端，因此除非您為其角色定義這些許可，否則您的裝置將無法運作。裝置通常會使用 X.509 憑證來驗證 MQTT 連線，但裝置無法使用代理來驗證。  
如需如何設定裝置角色的詳細資訊，請參閱 [授權核心裝置與 AWS 服務互動](device-service-role.md)。

**Topics**
+ [

#### 在現有核心裝置上設定網路代理
](#configure-network-proxy-deployment)
+ [

#### 在安裝期間設定網路代理
](#configure-network-proxy-installer)
+ [

#### 讓核心裝置信任 HTTPS 代理
](#https-proxy-certificate-trust)
+ [

#### networkProxy 物件
](#network-proxy-object)

#### 在現有核心裝置上設定網路代理


您可以使用部署在單一核心裝置或一組核心裝置上設定網路代理。在此部署中，您會更新 [nucleus 元件](greengrass-nucleus-component.md)組態。當您更新其`networkProxy`組態時，核會重新啟動。

若要設定網路代理，請為合併下列組態更新的`aws.greengrass.Nucleus`元件[建立部署](create-deployments.md)。此組態更新包含 [networkProxy 物件](#network-proxy-object)。

```
{
  "networkProxy": {
    "noProxyAddresses": "http://192.168.0.1,www.example.com",
    "proxy": {
      "url": "https://my-proxy-server:1100"
    }
  }
}
```

下列範例會定義可設定網路代理的部署。`merge` 組態更新需要序列化 JSON 物件。

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.16.1",
      "configurationUpdate": {
        "merge": "{\"networkProxy\":{\"noProxyAddresses\":\"http://192.168.0.1,www.example.com\",\"proxy\":{\"url\":\"https://my-proxy-server:1100\",\"username\":\"Mary_Major\",\"password\":\"pass@word1357\"}}}"
      }
    }
  }
}
```

#### 在安裝期間設定網路代理


您可以在核心裝置上安裝 AWS IoT Greengrass Core 軟體時設定網路代理。使用`--init-config`安裝程式引數來設定網路代理。您可以在使用[手動佈建](manual-installation.md)、[機群佈建](fleet-provisioning.md)或[自訂佈建](custom-provisioning.md)安裝 時指定此引數。

#### 讓核心裝置信任 HTTPS 代理


當您將核心裝置設定為使用 HTTPS 代理時，必須將代理伺服器憑證鏈新增至核心裝置的 ，讓它信任 HTTPS 代理。否則，核心裝置可能會在嘗試透過代理路由流量時遇到錯誤。將代理伺服器 CA 憑證新增至核心裝置的 Amazon 根 CA 憑證檔案。

**讓核心裝置信任 HTTPS 代理**

1. 尋找核心裝置上的 Amazon 根 CA 憑證檔案。
   + 如果您使用[自動佈建](quick-installation.md)安裝 AWS IoT Greengrass Core 軟體，Amazon 根 CA 憑證檔案會存在於 `/greengrass/v2/rootCA.pem`。
   + 如果您使用[手動](manual-installation.md)或[機群佈建](fleet-provisioning.md)安裝 AWS IoT Greengrass Core 軟體，Amazon 根 CA 憑證檔案可能存在於 `/greengrass/v2/AmazonRootCA1.pem`。

   如果這些位置不存在 Amazon 根 CA 憑證，請檢查 中的 `system.rootCaPath` 屬性`/greengrass/v2/config/effectiveConfig.yaml`以尋找其位置。

1. 將代理伺服器 CA 憑證檔案的內容新增至 Amazon 根 CA 憑證檔案。

   下列範例顯示新增至 Amazon 根 CA 憑證檔案的代理伺服器 CA 憑證。

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

#### networkProxy 物件


使用 `networkProxy` 物件，指定網路代理的相關資訊。此物件包含下列資訊：

`noProxyAddresses`  
（選用） 從代理中豁免的 IP 地址或主機名稱的逗號分隔清單。

`proxy`  
要連線的代理。此物件包含下列資訊：    
`url`  
代理伺服器的 URL，格式為 `scheme://userinfo@host:port`。  <a name="nucleus-component-configuration-proxy-url-segments"></a>
+ `scheme` – 結構描述，必須是 `http`或 `https`。
**重要**  
<a name="https-proxy-greengrass-nucleus-requirement"></a>Greengrass 核心裝置必須執行 [Greengrass 核 v](greengrass-nucleus-component.md)2.5.0 或更新版本，才能使用 HTTPS 代理。  
如果您設定 HTTPS 代理，則必須將代理伺服器 CA 憑證新增至核心裝置的 Amazon 根 CA 憑證。如需詳細資訊，請參閱[讓核心裝置信任 HTTPS 代理](#https-proxy-certificate-trust)。
+ `userinfo` – （選用） 使用者名稱和密碼資訊。如果您在 中指定此資訊`url`，Greengrass 核心裝置會忽略 `username`和 `password` 欄位。
+ `host` – 代理伺服器的主機名稱或 IP 地址。
+ `port` – （選用） 連接埠號碼。如果您未指定連接埠，則 Greengrass 核心裝置會使用下列預設值：
  + `http` – 80
  + `https` – 443  
`username`  
（選用） 驗證代理伺服器的使用者名稱。  
`password`  
（選用） 驗證代理伺服器的密碼。

## 使用私有 CA 簽署的裝置憑證


如果您使用自訂私有憑證授權機構 (CA)，您必須將 Greengrass 核**greengrassDataPlaneEndpoint**設定為 **iotdata**。您可以使用**--init-config**[安裝程式引數](configure-installer.md)在部署或安裝期間設定此選項。

您可以自訂裝置連線的 Greengrass 資料平面端點。您可以將此組態選項設定為 **iotdata** ，將 Greengrass 資料平面端點設定為與 IoT 資料端點相同的端點，您可以使用 來指定**iotDataEndpoint**。

## 設定 MQTT 逾時和快取設定


在 AWS IoT Greengrass 環境中，元件可以使用 MQTT 與 通訊 AWS IoT Core。Core AWS IoT Greengrass 軟體會管理元件的 MQTT 訊息。當核心裝置失去與 的連線時 AWS 雲端，軟體會快取 MQTT 訊息，以便在連線還原時稍後重試。您可以設定訊息逾時和快取大小等設定。如需詳細資訊，請參閱 [Greengrass 核元件](greengrass-nucleus-component.md)的 `mqtt`和 `mqtt.spooler`組態參數。

AWS IoT Core 對其 MQTT 訊息代理程式強加服務配額。這些配額可能適用於您在核心裝置和 之間傳送的訊息 AWS IoT Core。如需詳細資訊，請參閱 中的[AWS IoT Core 訊息中介裝置服務配額](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits)*AWS 一般參考*。

## 在 IPv6 網路上設定 Greengrass Nucleus


 Greengrass Nucleus AWS IoT Core 透過 [Greengrass APIs](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html) 與 通訊。Greengrass APIs雙堆疊環境中支援 IPv6。

若要啟用 IPv6 的雙堆疊端點：
+  將系統屬性 `aws.useDualstackEndpoint=true`、 和 `java.net.preferIPv6Addresses=true` 新增至 `jvmOptions` 
+  將 `s3EndpointType` 設定為 `DUALSTACK` 

 在[部署](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html)期間設定此選項，或使用`--init-config`[安裝程式引數](https://docs.aws.amazon.com/greengrass/v2/developerguide/configure-installer.html)手動佈建。如需詳細資訊，請參閱[使用 Amazon S3 雙堆疊端點](https://docs.aws.amazon.com/AmazonS3/latest/API/dual-stack-endpoints.html)。

**Example 部署的程式碼：**  

```
{
    "jvmOptions": "-Daws.useDualstackEndpoint=true",
    "s3EndpointType":"DUALSTACK"
}
```

**Example `config.yaml` 透過手動佈建：**  

```
---
system:
  ...
services:
  aws.greengrass.Nucleus:
    ...
    configuration:
      ...
      jvmOptions: "-Daws.useDualstackEndpoint=true -Djava.net.preferIPv6Addresses=true"
      s3EndpointType: "DUALSTACK"
```