

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

# 使用自訂資源佈建安裝 AWS IoT Greengrass 核心軟體
<a name="custom-provisioning"></a>

此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.4.0 和更新版本。

Core AWS IoT Greengrass 軟體安裝程式提供 Java 界面，您可以在佈建必要 AWS 資源的自訂外掛程式中實作此界面。您可以開發佈建外掛程式來使用自訂 X.509 用戶端憑證，或執行其他安裝程序不支援的複雜佈建步驟。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[建立您自己的用戶端憑證](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html)。

若要在安裝 AWS IoT Greengrass Core 軟體時執行自訂佈建外掛程式，您可以建立您提供給安裝程式的 JAR 檔案。安裝程式會執行外掛程式，而外掛程式會傳回佈建組態，以定義 Greengrass 核心裝置 AWS 的資源。安裝程式會使用此資訊在裝置上設定 AWS IoT Greengrass Core 軟體。如需詳細資訊，請參閱[開發自訂佈建外掛程式](develop-custom-provisioning-plugins.md)。

**重要**  <a name="install-greengrass-core-requirements-note"></a>
下載 AWS IoT Greengrass Core 軟體之前，請檢查您的核心裝置是否符合安裝和執行 AWS IoT Greengrass Core 軟體 v2.0 [的需求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

**Topics**
+ [先決條件](#custom-provisioning-prerequisites)
+ [設定裝置環境](#set-up-device-environment)
+ [下載 AWS IoT Greengrass 核心軟體](#download-greengrass-core-v2)
+ [安裝 AWS IoT Greengrass 核心軟體](#run-greengrass-core-v2-installer-custom)
+ [開發自訂佈建外掛程式](develop-custom-provisioning-plugins.md)

## 先決條件
<a name="custom-provisioning-prerequisites"></a>

若要使用自訂佈建安裝 AWS IoT Greengrass 核心軟體，您必須具備下列項目：
+ 實作 之自訂佈建外掛程式的 JAR 檔案`DeviceIdentityInterface`。自訂佈建外掛程式必須傳回每個系統和 nucleus 組態參數的值。否則，您必須在安裝期間在組態檔案中提供這些值。如需詳細資訊，請參閱[開發自訂佈建外掛程式](develop-custom-provisioning-plugins.md)。

## 設定裝置環境
<a name="set-up-device-environment"></a>

請依照本節中的步驟設定 Linux 或 Windows 裝置，以用作您的 AWS IoT Greengrass 核心裝置。

### 設定 Linux 裝置
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**設定 的 Linux 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。下列命令說明如何在裝置上安裝 OpenJDK。
   + 針對 Debian 為基礎或 Ubuntu 為基礎的發行版本：

     ```
     sudo apt install default-jdk
     ```
   + 針對 Red Hat 為基礎的發行版本：

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 針對 Amazon Linux 2：

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 針對 Amazon Linux 2023：

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   安裝完成時，請執行下列命令來驗證 Java 是否在您的 Linux 裝置上執行。

   ```
   java -version
   ```

   命令會列印在裝置上執行的 Java 版本。例如，在 Debian 型分佈上，輸出看起來可能會類似下列範例。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. （選用） 建立在裝置上執行元件的預設系統使用者和群組。您也可以選擇讓 AWS IoT Greengrass Core 軟體安裝程式在安裝期間使用`--component-default-user`安裝程式引數建立此使用者和群組。如需詳細資訊，請參閱[安裝程式引數](configure-installer.md)。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1. 確認執行 AWS IoT Greengrass 核心軟體的使用者 （通常為 `root`) 具有使用任何使用者和任何群組執行 `sudo` 的許可。

   1. 執行下列命令以開啟 `/etc/sudoers` 檔案。

      ```
      sudo visudo
      ```

   1. 確認使用者的許可如下範例所示。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. （選用） 若要[執行容器化 Lambda 函數](run-lambda-functions.md)，您必須啟用 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1，而且必須啟用和掛載*記憶體*和*裝置* cgroups。如果您不打算執行容器化 Lambda 函數，您可以略過此步驟。

   若要啟用這些 cgroups 選項，請使用下列 Linux 核心參數啟動裝置。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   如需有關檢視和設定裝置核心參數的資訊，請參閱作業系統和開機載入器的文件。依照指示永久設定核心參數。

1. 在裝置上安裝所有其他必要的相依性，如 中的需求清單所示[裝置要求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

### 設定 Windows 裝置
<a name="set-up-windows-device-environment"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.0 和更新版本。<a name="set-up-windows-device-environment-procedure"></a>

**為 設定 Windows 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。

1. 檢查 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 系統變數上是否提供 Java，如果沒有，請新增它。LocalSystem 帳戶會執行 AWS IoT Greengrass Core 軟體，因此您必須將 Java 新增至 PATH 系統變數，而不是使用者的 PATH 使用者變數。請執行下列操作：

   1. 按 Windows 鍵開啟開始選單。

   1. 輸入 **environment variables** 以從開始功能表搜尋系統選項。

   1. 在開始功能表搜尋結果中，選擇**編輯系統環境變數**以開啟**系統屬性**視窗。

   1. 選擇**環境變數...**以開啟**環境變數**視窗。

   1. 在**系統變數**下，選取**路徑**，然後選擇**編輯**。在**編輯環境變數**視窗中，您可以檢視個別行上的每個路徑。

   1. 檢查 Java 安裝`bin`資料夾的路徑是否存在。路徑看起來可能會類似下列範例。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. 如果**路徑**中缺少 Java 安裝的`bin`資料夾，請選擇**新增**以新增，然後選擇**確定**。

1. <a name="set-up-windows-device-environment-open-cmd"></a>以管理員身分開啟 Windows 命令提示字元 (`cmd.exe`)。

1. <a name="set-up-windows-device-environment-create"></a>在 Windows 裝置上的 LocalSystem 帳戶中建立預設使用者。將*密碼*取代為安全密碼。

   ```
   net user /add ggc_user password
   ```
**提示**  <a name="windows-password-expiration-tip"></a>
根據您的 Windows 組態，使用者的密碼可能會設定為在未來的日期過期。為了確保您的 Greengrass 應用程式持續運作，請追蹤密碼過期的時間，並在過期之前更新它。您也可以將使用者的密碼設定為永不過期。  
若要檢查使用者及其密碼何時過期，請執行下列命令。  

     ```
     net user ggc_user | findstr /C:expires
     ```
若要將使用者的密碼設定為永不過期，請執行下列命令。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
如果您使用的是[`wmic`已棄用命令](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic)的 Windows 10 或更新版本，請執行下列 PowerShell 命令。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>從 Microsoft 在裝置上下載並安裝 [PsExec 公用程式](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)。

1. <a name="set-up-windows-device-credentials"></a>使用 PsExec 公用程式，將預設使用者的使用者名稱和密碼存放在 LocalSystem 帳戶的 Credential Manager 執行個體中。將*密碼*取代為您先前設定的使用者密碼。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   如果 **PsExec License Agreement** 開啟，請選擇 以**Accept**同意授權並執行 命令。
**注意**  
在 Windows 裝置上，LocalSystem 帳戶會執行 Greengrass 核，而且您必須使用 PsExec 公用程式將預設使用者資訊存放在 LocalSystem 帳戶中。使用 Credential Manager 應用程式會將此資訊存放在目前登入使用者的 Windows 帳戶中，而不是 LocalSystem 帳戶。

## 下載 AWS IoT Greengrass 核心軟體
<a name="download-greengrass-core-v2"></a>

您可以從下列位置下載最新版本的 AWS IoT Greengrass Core 軟體：
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**注意**  
您可以從下列位置下載特定版本的 AWS IoT Greengrass 核心軟體。將*版本*取代為要下載的版本。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**下載 AWS IoT Greengrass 核心軟體**

1. <a name="installation-download-ggc-software-step"></a>在您的核心裝置上，將 AWS IoT Greengrass Core 軟體下載至名為 的檔案`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

1. <a name="verify-gg-nucleus-signature"></a>（選用） 驗證 Greengrass 核軟體簽章
**注意**  
此功能適用於 Greengrass 核版本 2.9.5 和更新版本。

   1. 使用下列命令來驗證 Greengrass 核子成品的簽章：

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ PowerShell ]

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 調用會產生輸出，指出驗證的結果。

      1. 如果已簽署 Greengrass 核 zip 檔案，輸出會包含下列陳述式：

         ```
         jar verified.
         ```

      1. 如果 Greengrass 核 zip 檔案未簽署，輸出會包含下列陳述式：

         ```
         jar is unsigned.
         ```

   1. 如果您提供 Jarsigner `-certs`選項以及 `-verify`和 `-verbose`選項，輸出也會包含詳細的簽署者憑證資訊。

1. <a name="installation-unzip-ggc-software-step"></a>將 AWS IoT Greengrass Core 軟體解壓縮至裝置上的資料夾。將 *GreengrassInstaller* 取代為您要使用的資料夾。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. （選用） 執行下列命令以查看 AWS IoT Greengrass 核心軟體版本。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
如果您安裝比 v2.4.0 更舊的 Greengrass 核版本，請勿在安裝 AWS IoT Greengrass 核心軟體之後移除此資料夾。Core AWS IoT Greengrass 軟體會使用此資料夾中的檔案來執行。  
如果您下載最新版本的軟體，請安裝 v2.4.0 或更新版本，並在安裝 AWS IoT Greengrass 核心軟體後移除此資料夾。

## 安裝 AWS IoT Greengrass 核心軟體
<a name="run-greengrass-core-v2-installer-custom"></a>

使用指定下列動作的引數執行安裝程式：
+ 從指定 的部分組態檔案安裝 ，以使用您的自訂佈建外掛程式來佈建 AWS 資源。Core AWS IoT Greengrass 軟體使用組態檔案，指定裝置上每個 Greengrass 元件的組態。安裝程式會從您提供的部分組態檔案和自訂佈建外掛程式建立 AWS 的資源建立完整的組態檔案。
+ <a name="install-argument-component-default-user"></a>指定 以使用`ggc_user`系統使用者在核心裝置上執行軟體元件。在 Linux 裝置上，此命令也會指定 使用`ggc_group`系統群組，安裝程式會為您建立系統使用者和群組。
+ <a name="install-argument-system-service"></a>將 AWS IoT Greengrass Core 軟體設定為開機時執行的系統服務。在 Linux 裝置上，這需要 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 系統。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
在 Windows 核心裝置上，您必須將 AWS IoT Greengrass Core 軟體設定為系統服務。

如需可指定引數的詳細資訊，請參閱 [安裝程式引數](configure-installer.md)。

**注意**  
<a name="jvm-tuning-note"></a>如果您在記憶體有限的 AWS IoT Greengrass 裝置上執行 ，您可以控制 AWS IoT Greengrass Core 軟體使用的記憶體量。若要控制記憶體配置，您可以在核心元件的`jvmOptions`組態參數中設定 JVM 堆積大小選項。如需詳細資訊，請參閱[使用 JVM 選項控制記憶體配置](configure-greengrass-core-v2.md#jvm-tuning)。

**安裝 AWS IoT Greengrass Core 軟體 (Linux)**

1. <a name="installer-check-greengrass-core-software-version"></a>檢查 AWS IoT Greengrass Core 軟體的版本。
   + 將 *GreengrassInstaller* 取代為包含軟體之資料夾的路徑。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 使用文字編輯器來建立名為 的組態檔案`config.yaml`，以提供給安裝程式。

   <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   將下列 YAML 內容複製到 檔案。

   ```
   ---
   system:
     rootpath: "/greengrass/v2"
     # The following values are optional. Return them from the provisioning plugin or set them here.
     # certificateFilePath: ""
     # privateKeyPath: ""
     # rootCaPath: ""
     # thingName: ""
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
       configuration:
         # The following values are optional. Return them from the provisioning plugin or set them here.
         # awsRegion: ""
         # iotRoleAlias: ""
         # iotDataEndpoint: ""
         # iotCredEndpoint: ""
     com.example.CustomProvisioning:
       configuration:
         # You can specify configuration parameters to provide to your plugin.
         # pluginParameter: ""
   ```

   然後，執行下列動作：
   + 將 *2.16.1* 取代為 AWS IoT Greengrass 核心軟體版本。
   + 將 的每個執行個體取代`/greengrass/v2`為 Greengrass 根資料夾。
   + （選用） 指定系統和核組態值。如果您的佈建外掛程式不提供這些值，則必須設定這些值。
   + （選用） 指定要提供給佈建外掛程式的組態參數。
**注意**  
在此組態檔案中，您可以自訂其他組態選項，例如要使用的連接埠和網路代理，如下列範例所示。如需詳細資訊，請參閱 [Greengrass 核組態](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)。  

   ```
   ---
   system:
     rootpath: "/greengrass/v2"
     # The following values are optional. Return them from the provisioning plugin or set them here.
     # certificateFilePath: ""
     # privateKeyPath: ""
     # rootCaPath: ""
     # thingName: ""
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
       configuration:
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "http://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
         # The following values are optional. Return them from the provisioning plugin or set them here.
         # awsRegion: ""
         # iotRoleAlias: ""
         # iotDataEndpoint: ""
         # iotCredEndpoint: ""
     com.example.CustomProvisioning:
       configuration:
         # You can specify configuration parameters to provide to your plugin.
         # pluginParameter: ""
   ```

1. 執行安裝程式。指定 `--trusted-plugin`以提供您的自訂佈建外掛程式，並指定 `--init-config`提供組態檔案。
**注意**  
Windows 的路徑長度限制為 260 個字元。如果您使用的是 Windows，請使用根資料夾，例如 `C:\greengrass\v2`或 `D:\greengrass\v2` ，將 Greengrass 元件路徑保持在 260 個字元限制以下。
   + 將 `/greengrass/v2`或 *C：\$1greengrass\$1v2* 取代為 Greengrass 根資料夾。
   + 將 *GreengrassInstaller* 的每個執行個體取代為您解壓縮安裝程式的資料夾。
   + 將自訂佈建外掛程式 JAR 檔案的路徑取代為外掛程式 JAR 檔案的路徑。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin /path/to/com.example.CustomProvisioning.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --trusted-plugin /path/to/com.example.CustomProvisioning.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

------
#### [ PowerShell ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --trusted-plugin /path/to/com.example.CustomProvisioning.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

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

   <a name="installer-setup-system-service-output-message"></a>如果您指定 `--setup-system-service true`，安裝程式會在設定並執行軟體做為系統服務`Successfully set up Nucleus as a system service`時列印。否則，如果安裝程式成功安裝軟體，就不會輸出任何訊息。
**注意**  <a name="installer-deploy-dev-tools-without-provision"></a>
當您在沒有 `deploy-dev-tools`引數的情況下執行安裝程式時，無法使用 `--provision true`引數來部署本機開發工具。如需有關直接在您的裝置上部署 Greengrass CLI 的資訊，請參閱 [Greengrass 命令列界面](gg-cli.md)。

1. <a name="installer-verify-installation"></a>透過檢視根資料夾中的檔案來驗證安裝。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   如果安裝成功，根資料夾會包含數個資料夾，例如 `config`、 `packages`和 `logs`。

<a name="install-greengrass-core-run-software"></a>如果您將 AWS IoT Greengrass Core 軟體安裝為系統服務，安裝程式會為您執行軟體。否則，您必須手動執行軟體。如需詳細資訊，請參閱[執行 AWS IoT Greengrass 核心軟體](run-greengrass-core-v2.md)。

<a name="install-greengrass-core-next-steps-intro"></a>如需如何設定和使用軟體的詳細資訊 AWS IoT Greengrass，請參閱以下內容：<a name="install-greengrass-core-next-steps-links"></a>
+ [設定 AWS IoT Greengrass 核心軟體](configure-greengrass-core-v2.md)
+ [開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)
+ [將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)
+ [Greengrass 命令列界面](gg-cli.md)

# 開發自訂佈建外掛程式
<a name="develop-custom-provisioning-plugins"></a>

若要開發自訂佈建外掛程式，請建立實作`com.aws.greengrass.provisioning.DeviceIdentityInterface`界面的 Java 類別。您可以在專案中包含 Greengrass 核 JAR 檔案，以存取此界面及其類別。此界面會定義輸入外掛程式組態並輸出佈建組態的方法。佈建組態會定義系統和 [Greengrass 核元件](greengrass-nucleus-component.md)的組態。Core AWS IoT Greengrass 軟體安裝程式使用此佈建組態在裝置上設定 AWS IoT Greengrass Core 軟體。

在您開發自訂佈建外掛程式之後，將其建置為 JAR 檔案，您可以提供給 AWS IoT Greengrass Core 軟體安裝程式，以在安裝期間執行外掛程式。安裝程式會在安裝程式使用的相同 JVM 中執行自訂佈建外掛程式，因此您可以建立僅包含外掛程式程式碼的 JAR。

**注意**  
[AWS IoT 機群佈建外掛程式](fleet-provisioning.md)實作 `DeviceIdentityInterface`，以在安裝期間使用機群佈建。機群佈建外掛程式是開放原始碼，因此您可以探索其原始程式碼，以查看如何使用佈建外掛程式界面的範例。如需詳細資訊，請參閱 GitHub 上的[AWS IoT 機群佈建外掛程式](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim)。

**Topics**
+ [要求](#custom-provisioning-plugin-requirements)
+ [實作 DeviceIdentityInterface 介面](#implement-device-identity-interface)

## 要求
<a name="custom-provisioning-plugin-requirements"></a>

若要開發自訂佈建外掛程式，您必須建立符合下列要求的 Java 類別：
+ 使用`com.aws.greengrass`套件或套件內的`com.aws.greengrass`套件。
+ 具有不含任何引數的建構函數。
+ 實作 `DeviceIdentityInterface` 界面。如需詳細資訊，請參閱[實作 DeviceIdentityInterface 介面](#implement-device-identity-interface)。

## 實作 DeviceIdentityInterface 介面
<a name="implement-device-identity-interface"></a>

若要在自訂外掛程式中使用 `com.aws.greengrass.provisioning.DeviceIdentityInterface` 界面，請將 Greengrass 核新增為專案的相依性。

**在自訂佈建外掛程式專案中使用 DeviceIdentityInterface**
+ 您可以新增 Greengrass 核 JAR 檔案做為程式庫，或新增 Greengrass 核做為 Maven 相依性。執行以下任意一項：
  + 若要將 Greengrass 核 JAR 檔案新增為程式庫，請下載包含 Greengrass 核 JAR AWS IoT Greengrass 的核心軟體。您可以從下列位置下載最新版本的 AWS IoT Greengrass Core 軟體：
    + [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

    您可以在 ZIP 檔案的 `lib` 資料夾中找到 Greengrass 核 JAR 檔案 (`Greengrass.jar`)。將此 JAR 檔案新增至您的專案。
  + 若要在 Maven 專案中使用 Greengrass 核，請在 `com.aws.greengrass`群組中的`nucleus`成品上新增相依性 。您也必須新增`greengrass-common`儲存庫，因為 Maven Central Repository 中無法使用 Greengrass 核。

    ```
    <project ...>
        ...
        <repositories>
            <repository>
                <id>greengrass-common</id>
                <name>greengrass common</name>
                <url>https://d2jrmugq4soldf.cloudfront.net/snapshots</url>
            </repository>
        </repositories>
        ...
        <dependencies>
            <dependency>
                <groupId>com.aws.greengrass</groupId>
                <artifactId>nucleus</artifactId>
                <version>2.5.0-SNAPSHOT</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </project>
    ```

### DeviceIdentityInterface 介面
<a name="device-identity-interface-shape"></a>

`com.aws.greengrass.provisioning.DeviceIdentityInterface` 界面的形狀如下。

**注意**  
您也可以在 GitHub 上 [Greengrass 核原始碼](https://github.com/aws-greengrass/aws-greengrass-nucleus)的 [com.aws.greengrass.provisioning 套件](https://github.com/aws-greengrass/aws-greengrass-nucleus/tree/main/src/main/java/com/aws/greengrass/provisioning)中探索這些類別。

```
public interface com.aws.greengrass.provisioning.DeviceIdentityInterface {
    ProvisionConfiguration updateIdentityConfiguration(ProvisionContext context)
            throws RetryableProvisioningException, InterruptedException;

    // Return the name of the plugin.
    String name(); 
}

com.aws.greengrass.provisioning.ProvisionConfiguration {
    SystemConfiguration systemConfiguration;
    NucleusConfiguration nucleusConfiguration    
}

com.aws.greengrass.provisioning.ProvisionConfiguration.SystemConfiguration {
    String certificateFilePath;
    String privateKeyPath;
    String rootCAPath;
    String thingName;
}

com.aws.greengrass.provisioning.ProvisionConfiguration.NucleusConfiguration {
    String awsRegion;
    String iotCredentialsEndpoint;
    String iotDataEndpoint;
    String iotRoleAlias;
}

com.aws.greengrass.provisioning.ProvisioningContext {
    Map<String, Object> parameterMap;
    String provisioningPolicy;  // The policy is always "PROVISION_IF_NOT_PROVISIONED".
}
   
com.aws.greengrass.provisioning.exceptions.RetryableProvisioningException {}
```

`SystemConfiguration` 和 中的每個組態值`NucleusConfiguration`都需要安裝 AWS IoT Greengrass Core 軟體，但您可以傳回 `null`。如果您的自訂佈建外掛程式傳回`null`任何組態值，則必須在建立 `config.yaml` 檔案以提供給 AWS IoT Greengrass Core 軟體安裝程式時，在系統或核心組態中提供該值。如果您的自訂佈建外掛程式針對您也在 中定義的選項傳回非空值`config.yaml`，則安裝程式會將 中的值取代`config.yaml`為外掛程式傳回的值。