

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

# 開發 AWS IoT Greengrass 元件
<a name="develop-greengrass-components"></a>

您可以在 Greengrass 核心裝置上開發和測試元件。因此，您可以建立和重複您的 AWS IoT Greengrass 軟體，而無需與 互動 AWS 雲端。當您完成元件的版本時，您可以在雲端 AWS IoT Greengrass 中將其上傳至 ，以便您和您的團隊可以將元件部署到機群中的其他裝置。如需如何部署元件的詳細資訊，請參閱 [將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)。

每個元件都由*配方*和*成品*組成。
+ <a name="component-recipe-definition"></a>**配方**

  每個元件都包含配方檔案，定義其中繼資料。配方也會指定元件的組態參數、元件相依性、生命週期和平台相容性。元件生命週期會定義安裝、執行和關閉元件的命令。如需詳細資訊，請參閱[AWS IoT Greengrass 元件配方參考](component-recipe-reference.md)。

  您可以 [JSON](https://en.wikipedia.org/wiki/JSON) 或 [YAML](https://en.wikipedia.org/wiki/YAML) 格式定義配方。
+ <a name="component-artifacts-definition"></a>**成品**

  元件可以有任意數量的成品，這些成品是元件二進位檔。成品可以包含指令碼、編譯的程式碼、靜態資源，以及元件使用的任何其他檔案。元件也可以使用元件相依性的成品。

AWS IoT Greengrass 提供預先建置的元件，您可以在應用程式中使用並部署至您的裝置。例如，您可以使用串流管理員元件將資料上傳至各種 AWS 服務，或使用 CloudWatch 指標元件將自訂指標發佈至 Amazon CloudWatch。如需詳細資訊，請參閱[AWS提供的元件](public-components.md)。

AWS IoT Greengrass 策劃 Greengrass 元件的索引，稱為 Greengrass 軟體目錄。此目錄會追蹤由 Greengrass 社群開發的 Greengrass 元件。您可以從此目錄中下載、修改和部署元件，以建立 Greengrass 應用程式。如需詳細資訊，請參閱[社群元件](greengrass-software-catalog.md)。

 AWS IoT Greengrass 核心軟體會以您在核心裝置上設定的系統使用者和群組身分執行元件`ggc_group`，例如 `ggc_user`和 。這表示元件具有該系統使用者的許可。如果您使用沒有主目錄的系統使用者，則元件無法使用使用主目錄的執行命令或程式碼。這表示您無法使用 `pip install some-library --user`命令來安裝 Python 套件。如果您遵循[入門教學](getting-started.md)來設定核心裝置，則您的系統使用者沒有主目錄。如需如何設定執行元件之使用者和群組的詳細資訊，請參閱 [設定執行元件的使用者](configure-greengrass-core-v2.md#configure-component-user)。

**注意**  <a name="semver-note"></a>
<a name="semver-para"></a>AWS IoT Greengrass 使用元件的語意版本。語意版本遵循 *major*.*minor*.*patch* 號碼系統。例如，版本`1.0.0`代表元件的第一個主要版本。如需詳細資訊，請參閱[語意版本規格](https://semver.org/)。

**Topics**
+ [元件生命週期](#component-lifecycle)
+ [元件類型](#component-types)
+ [建立 AWS IoT Greengrass 元件](create-components.md)
+ [使用本機部署測試 AWS IoT Greengrass 元件](test-components.md)
+ [發佈元件以部署到您的核心裝置](publish-components.md)
+ [與 AWS 服務互動](interact-with-aws-services.md)
+ [執行 Docker 容器](run-docker-container.md)
+ [AWS IoT Greengrass 元件配方參考](component-recipe-reference.md)
+ [元件環境變數參考](component-environment-variables.md)

## 元件生命週期
<a name="component-lifecycle"></a>

*元件生命週期*定義 AWS IoT Greengrass Core 軟體用來安裝和執行元件的階段。每個階段都會定義指令碼和其他資訊，以指定元件的行為方式。例如，當您安裝元件時， AWS IoT Greengrass 核心軟體會執行該元件的`install`生命週期指令碼。核心裝置上的元件具有下列生命週期狀態：
+ `NEW` – 元件的配方和成品會載入核心裝置上，但元件並未安裝。元件進入此狀態後，會執行其[安裝指令碼](component-recipe-reference.md#install-lifecycle-definition)。
+ `INSTALLED` – 元件安裝在核心裝置上。元件會在執行其[安裝指令碼](component-recipe-reference.md#install-lifecycle-definition)後進入此狀態。
+ `STARTING` – 元件正在核心裝置上啟動。元件會在執行其[啟動指令碼](component-recipe-reference.md#startup-lifecycle-definition)時進入此狀態。如果啟動成功，元件會進入 `RUNNING` 狀態。
+ `RUNNING` – 元件正在核心裝置上執行。元件會在執行其[執行指令碼](component-recipe-reference.md#run-lifecycle-definition)，或從其啟動指令碼擁有作用中背景程序時進入此狀態。
+ `FINISHED` – 元件已成功執行並完成其執行。
+ `STOPPING` – 元件正在停止。元件會在執行其[關機指令碼](component-recipe-reference.md#shutdown-lifecycle-definition)時進入此狀態。
+ `ERRORED` – 元件發生錯誤。當元件進入此狀態時，它會執行其[復原指令碼](component-recipe-reference.md#recover-lifecycle-definition)。然後，元件會重新啟動，嘗試恢復正常使用。如果元件在未成功執行的情況下進入 `ERRORED` 狀態三次，則元件會變成 `BROKEN`。
+ `BROKEN` – 元件多次發生錯誤，無法復原。您必須再次部署元件才能修正。
+ `UNINSTALLING` – 元件在永久移除之前執行其[解除安裝指令碼](component-recipe-reference.md#uninstall-lifecycle-definition)。部署從裝置移除元件時，元件會進入此狀態。此狀態不適用於元件版本升級期間。
+ `UNINSTALLED` – 元件已完成其解除安裝生命週期步驟，並從裝置中移除。

## 元件類型
<a name="component-types"></a>

*元件類型*指定 AWS IoT Greengrass Core 軟體如何執行元件。元件可以有下列類型：
+ **Nucleus** (`aws.greengrass.nucleus`)

  Greengrass 核是提供 AWS IoT Greengrass Core 軟體最低功能的元件。如需詳細資訊，請參閱[Greengrass 核](greengrass-nucleus-component.md)。
+ **外掛程式 **(`aws.greengrass.plugin`)

  Greengrass 核心會在與核心相同的 Java 虛擬機器 (JVM) 中執行外掛程式元件。當您變更核心裝置上的外掛程式元件版本時，核心會重新啟動。若要安裝和執行外掛程式元件，您必須將 Greengrass 核設定為做為系統服務執行。如需詳細資訊，請參閱[將 Greengrass 核設定為系統服務](configure-greengrass-core-v2.md#configure-system-service)。

  提供的數個元件 AWS 是外掛程式元件，可讓它們直接與 Greengrass 核連接。外掛程式元件使用與 Greengrass 核相同的日誌檔案。如需詳細資訊，請參閱[監控 AWS IoT Greengrass 日誌](monitor-logs.md)。
+ **一般** (`aws.greengrass.generic`)

  如果元件定義生命週期，Greengrass 核會執行一般元件的生命週期指令碼。

  此類型是自訂元件的預設類型。
+ **Lambda** (`aws.greengrass.lambda`)

  Greengrass 核會使用 Lambda [啟動器元件執行 Lambda 函數元件](lambda-launcher-component.md)。

  當您從 Lambda 函數建立元件時，該元件具有此類型。如需詳細資訊，請參閱[執行 AWS Lambda 函數](run-lambda-functions.md)。

**注意**  <a name="recipe-component-type-recommendation"></a>
我們不建議您在 recipe 中指定元件類型。當您建立元件時， 會為您 AWS IoT Greengrass 設定 類型。