

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

# 教學課程：入門 AWS IoT Greengrass V2
<a name="getting-started"></a>

您可以完成此入門教學課程，了解 的基本功能 AWS IoT Greengrass V2。在此教學課程中，您將執行下列操作：

1. 在 Linux 裝置上安裝和設定 AWS IoT Greengrass Core 軟體，例如 Raspberry Pi 或 Windows 裝置。此裝置是 Greengrass 核心裝置。

1. 在 Greengrass 核心裝置上開發 Hello World 元件。元件是在 Greengrass 核心裝置上執行的軟體模組。

1. 在 AWS IoT Greengrass V2 中將該元件上傳至 AWS 雲端。

1. 將該元件從 部署 AWS 雲端 到您的 Greengrass 核心裝置。

**注意**  
本教學說明如何設定開發環境並探索 的功能 AWS IoT Greengrass。如需如何設定和設定生產裝置的詳細資訊，請參閱以下內容：  
[設定 AWS IoT Greengrass 核心裝置](setting-up.md)
[安裝 AWS IoT Greengrass Core 軟體](install-greengrass-core-v2.md)

您預計將花費 20 到 30 分鐘在本教學課程中。

**Topics**
+ [先決條件](getting-started-prerequisites.md)
+ [步驟 1：設定 AWS 帳戶](getting-started-set-up-aws-account.md)
+ [步驟 2：設定您的環境](getting-started-set-up-environment.md)
+ [步驟 3：安裝 AWS IoT Greengrass 核心軟體](install-greengrass-v2.md)
+ [步驟 4：在您的裝置上開發和測試元件](create-first-component.md)
+ [步驟 5：在 AWS IoT Greengrass 服務中建立元件](upload-first-component.md)
+ [步驟 6：部署您的元件](deploy-first-component.md)
+ [後續步驟](getting-started-next-steps.md)

# 先決條件
<a name="getting-started-prerequisites"></a>

若要完成此入門教學課程，您需要以下項目：
+  AWS 帳戶：如果您沒有帳戶，請參閱 [步驟 1：設定 AWS 帳戶](getting-started-set-up-aws-account.md)。
+ <a name="requirement-supported-region"></a>使用 [AWS 區域](https://en.wikipedia.org/wiki/Amazon_Web_Services#Availability_and_topology) 支援的 AWS IoT Greengrass V2。如需支援區域的清單，請參閱《*AWS 一般參考*》中的 [AWS IoT Greengrass V2 端點和配額](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html)。
+ 具有管理員許可的 AWS Identity and Access Management (IAM) 使用者。
+ 設定為 Greengrass 核心裝置的裝置，例如 Raspberry Pi 搭配 [Raspberry Pi 作業系統](https://www.raspberrypi.org/downloads/) （先前稱為 Raspbian) 或 Windows 10 裝置。您必須擁有此裝置的管理員許可，或能夠取得管理員權限，例如透過 `sudo`。此裝置必須具有網際網路連線。

  您也可以選擇使用符合安裝和執行 AWS IoT Greengrass Core 軟體需求的不同裝置。

  如果您的開發電腦符合這些要求，您可以在本教學課程中將其設定為 Greengrass 核心裝置。
+ 裝置上所有使用者已安裝 [Python](https://www.python.org/downloads/) 3.5 或更新版本，並已新增至`PATH`環境變數。在 Windows 上，您也必須為所有使用者安裝適用於 Windows 的 Python Launcher。
**重要**  <a name="windows-core-device-python-installation"></a>
在 Windows 中，Python 預設不會為所有使用者安裝 。安裝 Python 時，您必須自訂安裝以設定安裝， AWS IoT Greengrass 核心軟體才能執行 Python 指令碼。例如，如果您使用圖形 Python 安裝程式，請執行下列動作：  
選取**安裝所有使用者的啟動器 （建議）**。
選擇 **Customize installation**。
選擇 **Next**。
選取 **Install for all users**。
選取 **Add Python to environment variables**。
選擇 **Install (安裝)**。
如需詳細資訊，請參閱 [Python 3 文件中的在 Windows 上使用](https://docs.python.org/3/using/windows.html) *Python*。
+ AWS Command Line Interface (AWS CLI) 在您的開發電腦和裝置上安裝並設定 憑證。請務必使用相同的 AWS 區域 ， AWS CLI 在開發電腦和裝置上設定 。若要 AWS IoT Greengrass V2 搭配 使用 AWS CLI，您必須具有下列其中一個版本或更新版本：<a name="minimum-aws-cli-versions"></a>
  + Minimum AWS CLI V1 版本：1.18.197 版
  + Minimum AWS CLI V2 版本：v2.1.11
**提示**  <a name="tip-check-aws-cli-version"></a>
您可以執行下列命令來檢查您擁有的 AWS CLI 版本。  

  ```
  aws --version
  ```

  如需詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[安裝、更新和解除安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
**注意**  
如果您使用 32 位元 ARM 裝置，例如具有 32 位元作業系統的 Raspberry Pi，則 32 位元 ARM 裝置無法使用 install AWS CLI V1. AWS CLI V2。如需詳細資訊，請參閱[安裝、更新和解除安裝 AWS CLI 版本 1](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html)。

# 步驟 1：設定 AWS 帳戶
<a name="getting-started-set-up-aws-account"></a>

## 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 [https://aws.amazon.com/](https://aws.amazon.com/) 並選擇**我的帳戶**，以檢視您目前的帳戶活動並管理帳戶。

## 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

註冊 後 AWS 帳戶，請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，將管理存取權授予使用者。

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

# 步驟 2：設定您的環境
<a name="getting-started-set-up-environment"></a>

**注意**  
這些步驟不適用於 nucleus lite。

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

## 設定 Linux 裝置 (Raspberry Pi)
<a name="getting-started-set-up-raspberry-pi"></a>

這些步驟假設您使用 Raspberry Pi 搭配 Raspberry Pi 作業系統。如果您使用不同的裝置或作業系統，請參閱裝置的相關文件。

**為 設定 Raspberry Pi AWS IoT Greengrass V2**

1. 在 Raspberry Pi 上啟用 SSH 以遠端連線到它。如需詳細資訊，請參閱 *Raspberry Pi 文件*中的 [SSH （安全殼層）](https://www.raspberrypi.com/documentation/computers/remote-access.html#ssh)。

1. 尋找 Raspberry Pi 的 IP 地址，以使用 SSH 與其連線。若要這樣做，您可以在 Raspberry Pi 上執行下列命令。

   ```
   hostname -I
   ```

1. 使用 SSH 連線至 Raspberry Pi。

   在您的開發電腦上，執行下列命令。將*使用者名稱*取代為登入的使用者名稱，並將 *pi-ip-address* 取代為您在上一個步驟中找到的 IP 地址。

   ```
   ssh username@pi-ip-address
   ```
**重要**  
如果您的開發電腦使用舊版 Windows，您可能沒有 `ssh`命令，或者您可能有 ，`ssh`但無法連線到 Raspberry Pi。若要連線至 Raspberry Pi，您可以安裝和設定 [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)，這是免費的開放原始碼 SSH 用戶端。請參閱 [PuTTY 文件](https://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter2.html#gs)以連接至 Raspberry Pi。

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。在 Raspberry Pi 上，使用下列命令來安裝 Java 11。

   ```
   sudo apt install default-jdk
   ```

   安裝完成後，請執行下列命令來驗證 Java 是否在您的 Raspberry Pi 上執行。

   ```
   java -version
   ```

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

   ```
   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)
   ```

**秘訣：在 Raspberry Pi 上設定核心參數**  
如果您的裝置是 Raspberry Pi，您可以完成以下步驟來檢視和更新其 Linux 核心參數：  
開啟 `/boot/cmdline.txt` 檔案。此檔案指定要在 Raspberry Pi 開機時套用的 Linux 核心參數。  
例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來開啟 檔案。  

   ```
   sudo nano /boot/cmdline.txt
   ```
確認`/boot/cmdline.txt`檔案包含下列核心參數。`systemd.unified_cgroup_hierarchy=0` 參數指定 使用 cgroups v1 而非 cgroups v2。  

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```
如果`/boot/cmdline.txt`檔案不包含這些參數，或包含具有不同值的這些參數，請更新檔案以包含這些參數和值。
如果您更新`/boot/cmdline.txt`檔案，請重新啟動 Raspberry Pi 以套用變更。  

   ```
   sudo reboot
   ```

## 設定 Linux 裝置 （其他）
<a name="getting-started-set-up-linux"></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="getting-started-set-up-windows"></a><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 帳戶。

# 步驟 3：安裝 AWS IoT Greengrass 核心軟體
<a name="install-greengrass-v2"></a>

**提示**  
我們建議您試用 [AWS IoT Greengrass AI Agents Context Pack](https://github.com/aws-greengrass/greengrass-agent-context-pack)，以快速設定和實驗 AWS IoT Greengrass。代理程式內容套件可讓 AI 代理程式設定 Greengrassucleus 和 Nucleus Lite、部署元件，以及疑難排解常見問題。

請依照本節中的步驟，將 Raspberry Pi 設定為可用於本機開發 AWS IoT Greengrass 的核心裝置。在本節中，您會下載並執行安裝程式，執行下列動作來設定裝置的 AWS IoT Greengrass Core 軟體：
+ 安裝 Greengrass 核元件。核心是強制性元件，也是在裝置上執行 AWS IoT Greengrass Core 軟體的最低需求。如需詳細資訊，請參閱 [Greengrass 核元件](greengrass-nucleus-component.md)。
+ 將裝置註冊為 AWS IoT 物件，並下載允許裝置連線的數位憑證 AWS。如需詳細資訊，請參閱[的裝置身分驗證和授權 AWS IoT Greengrass](device-auth.md)。
+ 將裝置的 AWS IoT 物件新增至物件群組，即物件群組或機群 AWS IoT 。物件群組可讓您管理 Greengrass 核心裝置的機群。將軟體元件部署至裝置時，您可以選擇部署至個別裝置或裝置群組。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[使用 管理裝置 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-thing-management.html)。
+ 建立允許 Greengrass 核心裝置與 AWS 服務互動的 IAM 角色。根據預設，此角色可讓您的裝置與 互動 AWS IoT ，並將日誌傳送至 Amazon CloudWatch Logs。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。
+ 安裝 AWS IoT Greengrass 命令列界面 (`greengrass-cli`)，可用來測試您在核心裝置上開發的自訂元件。如需詳細資訊，請參閱[Greengrass 命令列界面](gg-cli.md)。

# 安裝 AWS IoT Greengrass Core 軟體 （主控台）
<a name="install-greengrass-v2-console"></a>

1. 登入 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)。

1. 在**開始使用 Greengrass** 下，選擇**設定核心裝置**。

1. 在**步驟 1：註冊 Greengrass 核心裝置**，在 **Core 裝置名稱**中，輸入 Greengrass 核心裝置的 AWS IoT 物件名稱。如果物件不存在，安裝程式會建立它。

1. 在**步驟 2：新增至物件群組以套用連續部署**，對於**物件群組**，選擇您要新增核心裝置的 AWS IoT 物件群組。
   + 如果您選取**輸入新的群組名稱**，然後在**物件群組名稱**中，輸入要建立的新群組名稱。安裝程式會為您建立新的群組。
   + 如果您選取**選取現有群組**，請在**物件群組名稱**中選擇您要使用的現有群組。
   + 如果您選取**無群組**，則安裝程式不會將核心裝置新增至物件群組。

1. 在**步驟 3：安裝 Greengrass Core 軟體**下，完成下列步驟。

------
#### [ Nucleus classic ]

   1. 選擇**「Nucleus Classic**」作為核心裝置的軟體執行時間。

   1. 選擇核心裝置的作業系統：**Linux** 或 **Windows**。

   1. <a name="installer-export-aws-credentials"></a>將 AWS 登入資料提供給裝置，讓安裝程式可以為您的核心裝置佈建 AWS IoT 和 IAM 資源。為了提高安全性，我們建議您取得 IAM 角色的臨時憑證，該角色僅允許佈建所需的最低許可。如需詳細資訊，請參閱[安裝程式佈建資源的最低 IAM 政策](provision-minimal-iam-policy.md)。
**注意**  
安裝程式不會儲存或存放您的登入資料。

      在您的裝置上，執行下列其中一項作業來擷取憑證，並將其提供給 AWS IoT Greengrass Core 軟體安裝程式：
      + （建議） 使用來自 的臨時登入資料 AWS IAM Identity Center

        1. 從 IAM Identity Center 提供存取金鑰 ID、私密存取金鑰和工作階段權杖。如需詳細資訊，請參閱《*IAM Identity Center 使用者指南*》中的[取得和重新整理臨時憑證](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html#how-to-get-temp-credentials)》中的**手動憑證重新整理**。

        1. 執行下列命令，將登入資料提供給 AWS IoT Greengrass Core 軟體。

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

           ```
           export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
           export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
           export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
           ```

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

           ```
           set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
           set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
           set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
           ```

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

           ```
           $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
           $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
           $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
           ```

------
      + 使用來自 IAM 角色的臨時安全登入資料：

        1. 提供您擔任之 IAM 角色的存取金鑰 ID、私密存取金鑰和工作階段權杖。如需如何擷取這些登入資料的詳細資訊，請參閱《*IAM 使用者指南*》中的[請求臨時安全登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)資料。

        1. 執行下列命令，將登入資料提供給 AWS IoT Greengrass Core 軟體。

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

           ```
           export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
           export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
           export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
           ```

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

           ```
           set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
           set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
           set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
           ```

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

           ```
           $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
           $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
           $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
           ```

------
      + 使用來自 IAM 使用者的長期登入資料：

        1. 為您的 IAM 使用者提供存取金鑰 ID 和私密存取金鑰。您可以建立 IAM 使用者來佈建您稍後刪除的項目。如需提供使用者的 IAM 政策，請參閱 [安裝程式佈建資源的最低 IAM 政策](provision-minimal-iam-policy.md)。如需如何擷取長期憑證的詳細資訊，請參閱《[IAM 使用者指南》中的管理 IAM 使用者的存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。 **

        1. 執行下列命令，將登入資料提供給 AWS IoT Greengrass Core 軟體。

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

           ```
           export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
           export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
           ```

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

           ```
           set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
           set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
           ```

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

           ```
           $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
           $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
           ```

------

        1. （選用） 如果您建立 IAM 使用者來佈建 Greengrass 裝置，請刪除該使用者。

        1. （選用） 如果您使用現有 IAM 使用者的存取金鑰 ID 和私密存取金鑰，請更新使用者的金鑰，使其不再有效。如需詳細資訊，請參閱 *AWS Identity and Access Management 使用者指南*中的[更新存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey)。

   1. 在**執行安裝程式下**，完成下列步驟。

      1. 在**下載安裝程式下**，選擇**複製**，並在核心裝置上執行複製的命令。此命令會下載最新版本的 AWS IoT Greengrass Core 軟體，並在您的裝置上解壓縮該軟體。

      1. 在**執行安裝程式下**，選擇**複製**，然後在核心裝置上執行複製的命令。此命令會使用您先前指定的 AWS IoT 物件和物件群組名稱，來執行 AWS IoT Greengrass Core 軟體安裝程式，並為核心裝置設定 AWS 資源。

         此命令也會執行下列動作：
         + <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 軟體設定為系統服務。
         + <a name="install-argument-dev-tools"></a>部署 [AWS IoT Greengrass CLI 元件](gg-cli.md)，這是一種命令列工具，可讓您在核心裝置上開發自訂 Greengrass 元件。
         + <a name="install-argument-component-default-user"></a>指定 使用`ggc_user`系統使用者在核心裝置上執行軟體元件。在 Linux 裝置上，此命令也會指定 使用`ggc_group`系統群組，而安裝程式會為您建立系統使用者和群組。

         當您執行此命令時，您應該會看到下列訊息，指出安裝程式已成功執行。

         ```
         Successfully configured Nucleus with provisioned resource details!
         Configured Nucleus to deploy aws.greengrass.Cli component
         Successfully set up Nucleus as a system service
         ```
**注意**  <a name="installer-linux-no-systemd-message"></a>
如果您有 Linux 裝置且尚未[系統化](https://en.wikipedia.org/wiki/Systemd)，安裝程式不會將軟體設定為系統服務，也不會看到將 核設定為系統服務的成功訊息。

------
#### [ Nucleus lite ]

   1. 選擇 **Nucleus lite** 做為核心裝置的軟體執行時間。

   1. 選取您的裝置設定方法，將您的裝置佈建至 Greengrass 核心裝置。

   **選項 1：使用套件下載設定裝置 （約 1MB)**

   1. 建立 Greengrass 的 AWS IoT 物件和角色。

   1. 下載 zip 檔案，其中包含您的裝置需要連線 AWS IoT 的資源 AWS IoT：
      + 使用 憑證授權單位產生的 AWS IoT憑證和私有金鑰。
      + 為您的裝置啟動 Greengrass 安裝的結構描述檔案。

   1. 下載將安裝最新 Greengrass Nucleus lite 執行期到 Raspberry Pi 的套件。

   1. 將您的裝置佈建為 AWS IoT Greengrass Core 裝置，並將其連接至 AWS IoT：

      1. a. 使用 USB 隨身碟、SCP/FTP 或 SD 卡，將 Greengrass 套件和連線套件傳輸至您的裝置。

      1. b. 在裝置的 /GreengrassInstaller 目錄中解壓縮 greengrass-package.zip 檔案。

      1. c. 在裝置的 /directory 中解壓縮連線套件 zip 檔案。

      1. d. 在裝置上執行提供的命令以安裝 AWS IoT Greengrass

   1. 然後選擇**檢視核心裝置**。

   **選項 2：使用預先設定的全磁碟範例映像下載來設定裝置 （約 100MB)**

   1. 建立 Greengrass 的 AWS IoT 物件和角色。

   1. 下載 zip 檔案，其中包含您的裝置需要連線 AWS IoT 的資源 AWS IoT：
      + 使用 憑證授權單位產生的 AWS IoT憑證和私有金鑰。
      + 為您的裝置啟動 Greengrass 安裝的結構描述檔案。

   1. 下載包含 Greengrass 和作業系統的預先設定全磁碟範例映像。

      1. 若要將連線套件傳輸並刷新映像到您的裝置上，請遵循隨映像下載的讀我檔案。

      1. 若要啟動 Greengrass 安裝，請開啟並從閃爍的映像中開機裝置

   1. 然後，選擇**檢視核心裝置**。

   **選項 3：使用您自己的自訂建置設定裝置**

   1. 建立 Greengrass 的 AWS IoT 物件和角色。

   1. 下載 zip 檔案，其中包含您的裝置需要連線 AWS IoT 的資源 AWS IoT：
      + 使用 憑證授權單位產生的 AWS IoT憑證和私有金鑰。
      + 為您的裝置啟動 Greengrass 安裝的結構描述檔案。

   1. 若要使用來源程式碼中的 Yocto 自訂和建置您自己的映像，然後使用連線套件安裝 nucleus lite，請遵循 GitHub 上的指示。

      1. 然後，選擇**檢視核心裝置**。

------

# 安裝 AWS IoT Greengrass 核心軟體 (CLI)
<a name="install-greengrass-v2-cli"></a>

**注意**  
這些步驟不適用於 nucleus lite。

**安裝和設定 AWS IoT Greengrass Core 軟體**

1. 在您的 Greengrass 核心裝置上，執行下列命令以切換到主目錄。

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

   ```
   cd ~
   ```

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

   ```
   cd %USERPROFILE%
   ```

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

   ```
   cd ~
   ```

------

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="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 Core 軟體安裝程式。此命令會執行下列動作：
   + <a name="install-argument-aws-resources"></a>建立核心裝置操作所需的 AWS 資源。
   + <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 軟體設定為系統服務。
   + <a name="install-argument-dev-tools"></a>部署 [AWS IoT Greengrass CLI 元件](gg-cli.md)，這是一種命令列工具，可讓您在核心裝置上開發自訂 Greengrass 元件。
   + <a name="install-argument-component-default-user"></a>指定 使用`ggc_user`系統使用者在核心裝置上執行軟體元件。在 Linux 裝置上，此命令也會指定 使用`ggc_group`系統群組，而安裝程式會為您建立系統使用者和群組。

   如下所示取代命令中的引數值。<a name="installer-replace-arguments"></a>

   1. `/greengrass/v2` 或 *C：\$1greengrass\$1v2*：用來安裝 AWS IoT Greengrass Core 軟體的根資料夾路徑。

   1. *GreengrassInstaller*。解壓縮 AWS IoT Greengrass Core 軟體安裝程式的資料夾路徑。

   1. *區域*。尋找或建立資源 AWS 區域 的 。

   1. *MyGreengrassCore*。Greengrass 核心裝置的 AWS IoT 物件名稱。如果物件不存在，安裝程式會建立它。安裝程式會下載憑證以驗證 做為 AWS IoT 物件。如需詳細資訊，請參閱[的裝置身分驗證和授權 AWS IoT Greengrass](device-auth.md)。
**注意**  <a name="install-argument-thing-name-constraint"></a>
物件名稱不能包含冒號 (`:`) 字元。

   1. *MyGreengrassCoreGroup*。Greengrass 核心裝置的 AWS IoT 物件群組名稱。如果物件群組不存在，安裝程式會建立該物件並將其新增至該物件。如果物件群組存在且具有作用中部署，核心裝置會下載並執行部署指定的軟體。
**注意**  <a name="install-argument-thing-group-name-constraint"></a>
物件群組名稱不能包含冒號 (`:`) 字元。

   1. *GreengrassV2IoTThingPolicy*。允許 Greengrass 核心裝置與 AWS IoT 和 通訊 AWS IoT 的政策名稱 AWS IoT Greengrass。如果 AWS IoT 政策不存在，安裝程式會使用此名稱建立寬鬆 AWS IoT 政策。您可以限制此政策的使用案例許可。如需詳細資訊，請參閱[AWS IoT Greengrass V2 核心裝置的最低 AWS IoT 政策](device-auth.md#greengrass-core-minimal-iot-policy)。

   1. *GreengrassV2TokenExchangeRole*。允許 Greengrass 核心裝置取得臨時 AWS 憑證的 IAM 角色名稱。如果角色不存在，安裝程式會建立該角色，並建立和連接名為 的政策`GreengrassV2TokenExchangeRoleAccess`。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

   1. *GreengrassCoreTokenExchangeRoleAlias*。IAM 角色的別名，允許 Greengrass 核心裝置稍後取得臨時憑證。如果角色別名不存在，安裝程式會建立它，並將其指向您指定的 IAM 角色。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

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

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --setup-system-service true \
     --deploy-dev-tools true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --aws-region region ^
     --thing-name MyGreengrassCore ^
     --thing-group-name MyGreengrassCoreGroup ^
     --thing-policy-name GreengrassV2IoTThingPolicy ^
     --tes-role-name GreengrassV2TokenExchangeRole ^
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias ^
     --component-default-user ggc_user ^
     --provision true ^
     --setup-system-service true ^
     --deploy-dev-tools true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --aws-region region `
     --thing-name MyGreengrassCore `
     --thing-group-name MyGreengrassCoreGroup `
     --thing-policy-name GreengrassV2IoTThingPolicy `
     --tes-role-name GreengrassV2TokenExchangeRole `
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias `
     --component-default-user ggc_user `
     --provision true `
     --setup-system-service true `
     --deploy-dev-tools true
   ```

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

   當您執行此命令時，您應該會看到下列訊息，指出安裝程式已成功執行。

   ```
   Successfully configured Nucleus with provisioned resource details!
   Configured Nucleus to deploy aws.greengrass.Cli component
   Successfully set up Nucleus as a system service
   ```
**注意**  <a name="installer-linux-no-systemd-message"></a>
如果您有 Linux 裝置且尚未[系統化](https://en.wikipedia.org/wiki/Systemd)，安裝程式不會將軟體設定為系統服務，也不會看到將 核設定為系統服務的成功訊息。

# （選用） 執行 Greengrass 軟體 (Linux)
<a name="run-the-software"></a>

**注意**  
這些步驟不適用於 nucleus lite。

如果您將軟體安裝為系統服務，安裝程式會為您執行軟體。否則，您必須執行軟體。若要查看安裝程式是否將軟體設定為系統服務，請在安裝程式輸出中尋找下列行。

```
Successfully set up Nucleus as a system service
```

如果您沒有看到此訊息，請執行下列動作來執行軟體：

1. 執行下列命令來執行軟體。

   ```
   sudo /greengrass/v2/alts/current/distro/bin/loader
   ```

   如果成功啟動，軟體會列印下列訊息。

   ```
   Launched Nucleus successfully.
   ```

1. 您必須讓目前的命令 shell 保持開啟狀態，才能讓 AWS IoT Greengrass Core 軟體保持執行狀態。如果您使用 SSH 連線到核心裝置，請在開發電腦上執行下列命令，以開啟第二個 SSH 工作階段，供您在核心裝置上執行其他命令。將*使用者名稱*取代為登入的使用者名稱，並將 *pi-ip-address* 取代為裝置的 IP 地址。

   ```
   ssh username@pi-ip-address
   ```

如需如何與 Greengrass 系統服務互動的詳細資訊，請參閱 [將 Greengrass 核設定為系統服務](configure-greengrass-core-v2.md#configure-system-service)。

# 在裝置上驗證 Greengrass CLI 安裝
<a name="verify-local-development-tools"></a>

**注意**  
這些步驟不適用於 nucleus lite。

Greengrass CLI 最多可能需要一分鐘的時間才能部署。執行下列命令來檢查部署的狀態。以核心裝置的名稱取代 *MyGreengrassCore*。

```
aws greengrassv2 list-effective-deployments --core-device-thing-name MyGreengrassCore
```

`coreDeviceExecutionStatus` 指出核心裝置的部署狀態。當狀態為 時`SUCCEEDED`，請執行下列命令，以確認 Greengrass CLI 已安裝並執行。`/greengrass/v2` 將 取代為根資料夾的路徑。

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

```
/greengrass/v2/bin/greengrass-cli help
```

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

```
C:\greengrass\v2\bin\greengrass-cli help
```

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

```
C:\greengrass\v2\bin\greengrass-cli help
```

------

命令輸出 Greengrass CLI 的說明資訊。如果`greengrass-cli`找不到 ，則部署可能已無法安裝 Greengrass CLI。如需詳細資訊，請參閱[故障診斷 AWS IoT Greengrass V2](troubleshooting.md)。

您也可以執行下列命令，將 AWS IoT Greengrass CLI 手動部署至您的裝置。
+ 將*區域*取代 AWS 區域 為您使用的 。請確定您使用 AWS 區域 與 AWS CLI 在裝置上設定 相同的 。
+ 將 *account-id* 取代為您的 AWS 帳戶 ID。
+ 以核心裝置的名稱取代 *MyGreengrassCore*。

------
#### [ Linux, macOS, or Unix ]

```
aws greengrassv2 create-deployment \
  --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" \
  --components '{
    "aws.greengrass.Cli": {
      "componentVersion": "2.16.1"
    }
  }'
```

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

```
aws greengrassv2 create-deployment ^
  --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ^
  --components "{\"aws.greengrass.Cli\":{\"componentVersion\":\"2.16.1\"}}"
```

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

```
aws greengrassv2 create-deployment `
  --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" `
  --components '{\"aws.greengrass.Cli\":{\"componentVersion\":\"2.16.1\"}}'
```

------

**提示**  
您可以將 `/greengrass/v2/bin`(Linux) 或 `C:\greengrass\v2\bin`(Windows) 新增至`PATH`環境變數，以便在沒有絕對路徑`greengrass-cli`的情況下執行。

 AWS IoT Greengrass 核心軟體和本機開發工具會在您的裝置上執行。接下來，您可以在裝置上開發 Hello World AWS IoT Greengrass 元件。

# 步驟 4：在您的裝置上開發和測試元件
<a name="create-first-component"></a>

元件是在 AWS IoT Greengrass 核心裝置上執行的軟體模組。元件可讓您將複雜的應用程式建立和管理為分散的建置區塊，以便從一個 Greengrass 核心裝置重複使用。每個元件都由*配方*和*成品*組成。
+ <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，您可以使用 Greengrass CLI 在 Greengrass 核心裝置上於本機開發和測試元件，而無需與 AWS 雲端互動。當您完成本機元件時，您可以使用元件配方和成品在 AWS 雲端的 AWS IoT Greengrass 服務中建立該元件，然後將其部署到所有 Greengrass 核心裝置。如需元件的詳細資訊，請參閱 [開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)。

在本節中，您將了解如何在核心裝置上於本機建立和執行基本 Hello World 元件。

**在裝置上開發 Hello World 元件**

1. <a name="create-component-recipes-artifacts-folder-step"></a>使用配方和成品的子資料夾為您的元件建立資料夾。在 Greengrass 核心裝置上執行下列命令，以建立這些資料夾並變更為元件資料夾。將 *\$1/greengrassv2* 或 *%USERPROFILE%\$1greengrassv2* 取代為用於本機開發的資料夾路徑。

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

   ```
   mkdir -p ~/greengrassv2/{recipes,artifacts}
   cd ~/greengrassv2
   ```

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

   ```
   mkdir %USERPROFILE%\greengrassv2\\recipes, %USERPROFILE%\greengrassv2\\artifacts
   cd %USERPROFILE%\greengrassv2
   ```

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

   ```
   mkdir ~/greengrassv2/recipes, ~/greengrassv2/artifacts
   cd ~/greengrassv2
   ```

------

1. <a name="create-component-recipe-file-step"></a>使用文字編輯器來建立配方檔案，定義元件的中繼資料、參數、相依性、生命週期和平台功能。在配方檔案名稱中包含元件版本，讓您可以識別哪個配方會反映哪個元件版本。您可以為您的配方選擇 YAML 或 JSON 格式。

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

------
#### [ JSON ]

   ```
   nano recipes/com.example.HelloWorld-1.0.0.json
   ```

------
#### [ YAML ]

   ```
   nano recipes/com.example.HelloWorld-1.0.0.yaml
   ```

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

1. 將下列配方貼到 檔案中。

------
#### [ JSON ]

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.HelloWorld",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "My first AWS IoT Greengrass component.",
     "ComponentPublisher": "Amazon",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "world"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "run": "python3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
         }
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "run": "py -3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
         }
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.HelloWorld
   ComponentVersion: '1.0.0'
   ComponentDescription: My first AWS IoT Greengrass component.
   ComponentPublisher: Amazon
   ComponentConfiguration:
     DefaultConfiguration:
       Message: world
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         run: |
           python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
     - Platform:
         os: windows
       Lifecycle:
         run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
   ```

------

   此配方的 `ComponentConfiguration` 區段定義 參數 `Message`，預設為 `world`。`Manifests` 區段定義資訊*清單*，這是一組平台的生命週期指示和成品。您可以定義多個資訊清單，以指定各種平台的不同安裝指示，例如 。在資訊清單中， `Lifecycle`區段會指示 Greengrass 核心裝置以`Message`參數值做為引數來執行 Hello World 指令碼。

1. 執行下列命令來建立元件成品的資料夾。

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

   ```
   mkdir -p artifacts/com.example.HelloWorld/1.0.0
   ```

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

   ```
   mkdir artifacts\com.example.HelloWorld\1.0.0
   ```

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

   ```
   mkdir artifacts\com.example.HelloWorld\1.0.0
   ```

------
**重要**  <a name="local-artifact-folder-name-requirements"></a>
您必須針對成品資料夾路徑使用下列格式。包含您在配方中指定的元件名稱和版本。  

   ```
   artifacts/componentName/componentVersion/
   ```

1. 使用文字編輯器為您的 Hello World 元件建立 Python 指令碼成品檔案。

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

   ```
   nano artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   將下列 Python 指令碼複製並貼到 檔案中。

   ```
   import sys
   
   message = "Hello, %s!" % sys.argv[1]
   
   # Print the message to stdout, which Greengrass saves in a log file.
   print(message)
   ```

1. 使用本機 AWS IoT Greengrass CLI 來管理 Greengrass 核心裝置上的元件。

   執行下列命令，將元件部署至 AWS IoT Greengrass 核心。將 `/greengrass/v2`或 *C：\$1greengrass\$1v2* 取代為您的 AWS IoT Greengrass V2 根資料夾，並將 *\$1/greengrassv2* 或 *%USERPROFILE%\$1greengrassv2* 取代為您的元件開發資料夾。

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create \
     --recipeDir ~/greengrassv2/recipes \
     --artifactDir ~/greengrassv2/artifacts \
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create ^
     --recipeDir %USERPROFILE%\greengrassv2\recipes ^
     --artifactDir %USERPROFILE%\greengrassv2\artifacts ^
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create `
     --recipeDir ~/greengrassv2/recipes `
     --artifactDir ~/greengrassv2/artifacts `
     --merge "com.example.HelloWorld=1.0.0"
   ```

------

   此命令會新增在 中使用配方的元件，`recipes`以及在 中使用 Python 指令碼的元件`artifacts`。`--merge` 選項會新增或更新您指定的元件和版本。

1. Core AWS IoT Greengrass 軟體會將 stdout 從元件程序儲存至 `logs` 資料夾中的日誌檔案。執行下列命令來驗證 Hello World 元件是否執行並列印訊息。

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\logs\com.example.HelloWorld.log
   ```

   <a name="windows-cmd-type-observe-logs"></a>`type` 命令會將檔案的內容寫入終端機。多次執行此命令，以觀察 檔案中的變更。

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

   ```
   gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   您應該會看到類似下列範例的訊息。

   ```
   Hello, world!
   ```
**注意**  
如果檔案不存在，則本機部署可能尚未完成。如果檔案在 15 秒內不存在，則部署可能會失敗。例如，如果您的配方無效，就可能會發生這種情況。執行下列命令來檢視 AWS IoT Greengrass 核心日誌檔案。此檔案包含 Greengrass 核心裝置部署服務的日誌。  

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   ```
   type C:\greengrass\v2\logs\greengrass.log
   ```
<a name="windows-cmd-type-observe-logs"></a>`type` 命令會將檔案的內容寫入終端機。多次執行此命令，以觀察 檔案中的變更。

   ```
   gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
   ```

1. 修改本機元件以反覆執行和測試程式碼。在文字編輯器`hello_world.py`中開啟 ，並在第 4 行新增下列程式碼，以編輯 AWS IoT Greengrass 核心記錄的訊息。

   ```
   message += " Greetings from your first Greengrass component."
   ```

   `hello_world.py` 指令碼現在應具有下列內容。

   ```
   import sys
   
   message = "Hello, %s!" % sys.argv[1]
   message += " Greetings from your first Greengrass component."
   
   # Print the message to stdout, which Greengrass saves in a log file.
   print(message)
   ```

1. 執行下列命令，以您的變更更新元件。

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create \
     --recipeDir ~/greengrassv2/recipes \
     --artifactDir ~/greengrassv2/artifacts \
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create ^
     --recipeDir %USERPROFILE%\greengrassv2\recipes ^
     --artifactDir %USERPROFILE%\greengrassv2\artifacts ^
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create `
     --recipeDir ~/greengrassv2/recipes `
     --artifactDir ~/greengrassv2/artifacts `
     --merge "com.example.HelloWorld=1.0.0"
   ```

------

   此命令會使用最新的 Hello World 成品更新`com.example.HelloWorld`元件。

1. 執行下列命令以重新啟動元件。當您重新啟動元件時，核心裝置會使用最新的變更。

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli component restart \
     --names "com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component restart ^
     --names "com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component restart `
     --names "com.example.HelloWorld"
   ```

------

1. 再次檢查日誌，確認 Hello World 元件列印新訊息。

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\logs\com.example.HelloWorld.log
   ```

   <a name="windows-cmd-type-observe-logs"></a>`type` 命令會將檔案的內容寫入終端機。多次執行此命令，以觀察 檔案中的變更。

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

   ```
   gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   您應該會看到類似下列範例的訊息。

   ```
   Hello, world! Greetings from your first Greengrass component.
   ```

1. 您可以更新元件的組態參數，以測試不同的組態。部署元件時，您可以指定*組態更新*，以定義如何修改核心裝置上的元件組態。您可以指定要重設為預設值的組態值，以及要合併至核心裝置的新組態值。如需詳細資訊，請參閱[更新元件組態](update-component-configurations.md)。

   請執行下列操作：

   1. 使用文字編輯器來建立名為 的檔案`hello-world-config-update.json`，以包含組態更新

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

      ```
      nano hello-world-config-update.json
      ```

   1. 將下列 JSON 物件複製並貼入 檔案。此 JSON 物件會定義組態更新，將值合併`friend`至 `Message` 參數以更新其值。此組態更新不會指定任何要重設的值。您不需要重設 `Message` 參數，因為合併更新會取代現有的值。

      ```
      {
        "com.example.HelloWorld": {
          "MERGE": {
            "Message": "friend"
          }
        }
      }
      ```

   1. 執行下列命令，將組態更新部署到 Hello World 元件。

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

      ```
      sudo /greengrass/v2/bin/greengrass-cli deployment create \
        --merge "com.example.HelloWorld=1.0.0" \
        --update-config hello-world-config-update.json
      ```

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

      ```
      C:\greengrass\v2\bin\greengrass-cli deployment create ^
        --merge "com.example.HelloWorld=1.0.0" ^
        --update-config hello-world-config-update.json
      ```

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

      ```
      C:\greengrass\v2\bin\greengrass-cli deployment create `
        --merge "com.example.HelloWorld=1.0.0" `
        --update-config hello-world-config-update.json
      ```

------

   1. 再次檢查日誌，確認 Hello World 元件輸出新訊息。

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

      ```
      sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
      ```

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

      ```
      type C:\greengrass\v2\logs\com.example.HelloWorld.log
      ```

      <a name="windows-cmd-type-observe-logs"></a>`type` 命令會將檔案的內容寫入終端機。多次執行此命令，以觀察 檔案中的變更。

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

      ```
      gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
      ```

------

      您應該會看到類似下列範例的訊息。

      ```
      Hello, friend! Greetings from your first Greengrass component.
      ```

1. 完成元件測試後，請將其從核心裝置中移除。執行下列命令。

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

------
**重要**  
上傳元件到 之後，您需要此步驟，才能將元件部署回核心裝置 AWS IoT Greengrass。否則，部署會失敗並出現版本相容性錯誤，因為本機部署會指定不同版本的元件。

   執行下列命令，並確認`com.example.HelloWorld`元件未出現在裝置上的元件清單中。

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli component list
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component list
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component list
   ```

------

您的 Hello World 元件已完成，您現在可以將其上傳至 AWS IoT Greengrass 雲端服務。然後，您可以將元件部署到 Greengrass 核心裝置。

# 步驟 5：在 AWS IoT Greengrass 服務中建立元件
<a name="upload-first-component"></a>

當您在核心裝置上完成元件的開發時，您可以將其 AWS IoT Greengrass 上傳至 中的 服務 AWS 雲端。您也可以直接在 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)中建立元件。 AWS IoT Greengrass 提供元件管理服務，可託管您的元件，以便將元件部署到個別裝置或裝置機群。若要將元件上傳至 AWS IoT Greengrass 服務，請完成下列步驟：
+ 將元件成品上傳至 S3 儲存貯體。
+ 將每個成品的 Amazon Simple Storage Service (Amazon S3) URI 新增至元件配方。
+  AWS IoT Greengrass 從元件配方在 中建立元件。

在本節中，您可以在 Greengrass 核心裝置上完成這些步驟，將 Hello World 元件上傳至 AWS IoT Greengrass 服務。

## 在 AWS IoT Greengrass （主控台） 中建立元件
<a name="upload-first-component-console"></a>

1. 使用您 AWS 帳戶中的 S3 儲存貯體來託管 AWS IoT Greengrass 元件成品。當您將元件部署到核心裝置時，裝置會從儲存貯體下載元件的成品。

   您可以使用現有的 S3 儲存貯體，也可以建立新的儲存貯體。

   1. 在 [Amazon S3 主控台](https://console.aws.amazon.com/s3)的**儲存貯**體下，選擇**建立儲存貯**體。

   1. 針對**儲存貯體名稱**，輸入唯一的儲存貯體名稱。例如，您可以使用 **greengrass-component-artifacts-*region*-*123456789012***. 將 *123456789012* 取代 AWS 區域 為您在本教學課程中使用的 AWS 帳戶 ID 和*區域*。

   1. 針對**AWS 區域**，選取您用於本教學課程 AWS 的區域。

   1. 選擇**建立儲存貯體**。

   1. 在**儲存貯**體下，選擇您建立的儲存貯體，將`hello_world.py`指令碼上傳至儲存貯體中的`artifacts/com.example.HelloWorld/1.0.0`資料夾。如需將物件上傳至 S3 儲存貯體的資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[上傳物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。

   1. 複製 S3 儲存貯體中`hello_world.py`物件的 S3 URI。此 URI 看起來應該類似下列範例。將 amzn-s3-demo-bucket 取代為 S3 儲存貯體的名稱。

      ```
      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
      ```

1. <a name="core-device-allow-s3-bucket-access-console"></a><a name="core-device-allow-s3-bucket-access-console-intro-1"></a>允許核心裝置存取 S3 儲存貯體中的元件成品。

   <a name="core-device-allow-s3-bucket-access-console-intro-2"></a>每個核心裝置都有一個[核心裝置 IAM 角色](device-service-role.md)，允許它與 互動 AWS IoT 並將日誌傳送到 AWS 雲端。根據預設，此裝置角色不允許存取 S3 儲存貯體，因此您必須建立並連接允許核心裝置從 S3 儲存貯體擷取元件成品的政策。

   <a name="core-device-allow-s3-bucket-access-console-intro-3"></a>如果您裝置的角色已允許存取 S3 儲存貯體，您可以略過此步驟。否則，請建立允許存取的 IAM 政策，並將其連接到角色，如下所示：

   1. <a name="core-device-allow-s3-bucket-access-console-step-1"></a>在 [IAM 主控台](https://console.aws.amazon.com/iam)導覽功能表中，選擇**政策**，然後選擇**建立政策**。

   1. <a name="core-device-allow-s3-bucket-access-console-step-2"></a>在 **JSON** 標籤上，用以下政策取代預留位置內容。將 amzn-s3-demo-bucket 取代為 S3 儲存貯體的名稱，其中包含要下載的核心裝置元件成品。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
          }
        ]
      }
      ```

   1. <a name="core-device-allow-s3-bucket-access-console-step-3"></a>選擇**下一步**。

   1. <a name="core-device-allow-s3-bucket-access-console-step-4"></a>在**政策詳細資訊區段**中，針對**名稱**輸入 **MyGreengrassV2ComponentArtifactPolicy**。

   1. <a name="core-device-allow-s3-bucket-access-console-step-5"></a>選擇**建立政策**。

   1. <a name="core-device-allow-s3-bucket-access-console-step-6"></a>在 [IAM 主控台](https://console.aws.amazon.com/iam)導覽功能表中，選擇**角色**，然後選擇核心裝置的角色名稱。您在安裝 AWS IoT Greengrass 核心軟體時指定了此角色名稱。如果您未指定名稱，則預設值為 `GreengrassV2TokenExchangeRole`。

   1. <a name="core-device-allow-s3-bucket-access-console-step-7"></a>在**許可**下，選擇**新增許可**，然後選擇**連接政策**。

   1. <a name="core-device-allow-s3-bucket-access-console-step-8"></a>在**新增許可**頁面上，選取您建立`MyGreengrassV2ComponentArtifactPolicy`的政策旁的核取方塊，然後選擇**新增許可**。

1. 使用元件配方在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)中建立元件。

   1. 在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)導覽功能表中，選擇**元件**，然後選擇**建立元件**。

   1. 在**元件資訊**下，選擇將**配方輸入為 JSON**。預留位置配方看起來應該類似下列範例。

      ```
      {
        "RecipeFormatVersion": "2020-01-25",
        "ComponentName": "com.example.HelloWorld",
        "ComponentVersion": "1.0.0",
        "ComponentDescription": "My first AWS IoT Greengrass component.",
        "ComponentPublisher": "Amazon",
        "ComponentConfiguration": {
          "DefaultConfiguration": {
            "Message": "world"
          }
        },
        "Manifests": [
          {
            "Platform": {
              "os": "linux"
            },
            "Lifecycle": {
              "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          },
          {
            "Platform": {
              "os": "windows"
            },
            "Lifecycle": {
              "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          }
        ]
      }
      ```

   1. 將每個`Artifacts`區段中的預留位置 URI 取代為`hello_world.py`物件的 S3 URI。

   1. 選擇**建立元件**。

   1. 在 **com.example.HelloWorld** 元件頁面上，確認元件**的狀態**為**可部署**。

## 在 AWS IoT Greengrass (AWS CLI) 中建立元件
<a name="upload-first-component-cli"></a>

**上傳您的 Hello World 元件**

1. 在 中使用 S3 儲存貯體 AWS 帳戶 來託管 AWS IoT Greengrass 元件成品。當您將元件部署到核心裝置時，裝置會從儲存貯體下載元件的成品。

   您可以使用現有的 S3 儲存貯體，或執行下列命令來建立儲存貯體。此命令會使用您的 AWS 帳戶 ID 和 建立儲存貯體 AWS 區域 ，以形成唯一的儲存貯體名稱。將 *123456789012* 取代為您在本教學課程中使用的 AWS 帳戶 ID AWS 區域 和*區域*。

   ```
   aws s3 mb s3://greengrass-component-artifacts-123456789012-region
   ```

   如果請求成功，命令會輸出下列資訊。

   ```
   make_bucket: greengrass-component-artifacts-123456789012-region
   ```

1. <a name="core-device-allow-s3-bucket-access-cli"></a>允許核心裝置存取 S3 儲存貯體中的元件成品。

   每個核心裝置都有一個[核心裝置 IAM 角色](device-service-role.md)，允許它與 互動 AWS IoT 並將日誌傳送到 AWS 雲端。根據預設，此裝置角色不允許存取 S3 儲存貯體，因此您必須建立並連接允許核心裝置從 S3 儲存貯體擷取元件成品的政策。

   如果核心裝置的角色已允許存取 S3 儲存貯體，您可以略過此步驟。否則，請建立允許存取的 IAM 政策，並將其連接到角色，如下所示：

   1. 建立名為 的檔案`component-artifact-policy.json`，並將下列 JSON 複製到 檔案。此政策允許存取 S3 儲存貯體中的所有檔案。將 amzn-s3-demo-bucket 取代為 S3 儲存貯體的名稱。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
          }
        ]
      }
      ```

   1. 執行下列命令，從 中的政策文件建立政策`component-artifact-policy.json`。

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

      ```
      aws iam create-policy \\
        --policy-name MyGreengrassV2ComponentArtifactPolicy \\
        --policy-document file://component-artifact-policy.json
      ```

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

      ```
      aws iam create-policy ^
        --policy-name MyGreengrassV2ComponentArtifactPolicy ^
        --policy-document file://component-artifact-policy.json
      ```

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

      ```
      aws iam create-policy `
        --policy-name MyGreengrassV2ComponentArtifactPolicy `
        --policy-document file://component-artifact-policy.json
      ```

------

      從輸出中的政策中繼資料複製政策 Amazon Resource Name (ARN)。您可以在下一個步驟中使用此 ARN 將此政策連接至核心裝置角色。

   1. 執行下列命令，將政策連接至核心裝置角色。以核心裝置的角色名稱取代 *GreengrassV2TokenExchangeRole*。您在安裝 AWS IoT Greengrass 核心軟體時指定了此角色名稱。將政策 ARN 取代為上一個步驟的 ARN。

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

      ```
      aws iam attach-role-policy \\
        --role-name GreengrassV2TokenExchangeRole \\
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

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

      ```
      aws iam attach-role-policy ^
        --role-name GreengrassV2TokenExchangeRole ^
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

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

      ```
      aws iam attach-role-policy `
        --role-name GreengrassV2TokenExchangeRole `
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

------

      如果命令沒有輸出，表示成功。核心裝置現在可以存取您上傳至此 S3 儲存貯體的成品。

1. 將 Hello World Python 指令碼成品上傳至 S3 儲存貯體。

   執行下列命令，將指令碼上傳至您 AWS IoT Greengrass 核心上存在指令碼的 儲存貯體中的相同路徑。將 amzn-s3-demo-bucket 取代為 S3 儲存貯體的名稱。

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

   ```
   aws s3 cp \
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py \
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

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

   ```
   aws s3 cp ^
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py ^
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

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

   ```
   aws s3 cp `
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py `
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

   如果請求成功，命令`upload:`會輸出以 開頭的行。

1. 將成品的 Amazon S3 URI 新增至元件配方。

   Amazon S3 URI 由儲存貯體名稱和儲存貯體中成品物件的路徑組成。指令碼成品的 Amazon S3 URI 是您在上一個步驟中上傳成品的 URI。此 URI 看起來應該類似下列範例。將 amzn-s3-demo-bucket 取代為 S3 儲存貯體的名稱。

   ```
   s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   若要將成品新增至配方，請新增包含具有 `Artifacts` Amazon S3 URI 結構的 清單。

------
#### [ JSON ]

   ```
   "Artifacts": [
     {
       "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
     }
   ]
   ```

   在文字編輯器中開啟配方檔案。

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

   ```
   nano recipes/com.example.HelloWorld-1.0.0.json
   ```

   將成品新增至配方。您的配方檔案看起來應該類似下列範例。

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.HelloWorld",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "My first AWS IoT Greengrass component.",
     "ComponentPublisher": "Amazon",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "world"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   Artifacts:
     - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   在文字編輯器中開啟配方檔案。

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

   ```
   nano recipes/com.example.HelloWorld-1.0.0.yaml
   ```

   將成品新增至配方。您的配方檔案看起來應該類似下列範例。

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.HelloWorld
   ComponentVersion: '1.0.0'
   ComponentDescription: My first AWS IoT Greengrass component.
   ComponentPublisher: Amazon
   ComponentConfiguration:
     DefaultConfiguration:
       Message: world
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         Run: |
           python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
     - Platform:
         os: windows
       Lifecycle:
         Run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

1.  AWS IoT Greengrass 從配方在 中建立元件資源。執行下列命令，從您提供的二進位檔案配方建立 元件。

------
#### [ JSON ]

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.json
   ```

------
#### [ YAML ]

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.yaml
   ```

------

   如果請求成功，回應看起來與下列範例類似。

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "Mon Nov 30 09:04:05 UTC 2020",
     "status": {
       "componentState": "REQUESTED",
       "message": "NONE",
       "errors": {}
     }
   }
   ```

   `arn` 從輸出複製 ，以在下一個步驟中檢查元件的狀態。
**注意**  
您也可以在 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)的 元件頁面上看到 Hello World **元件**。

1. 確認元件已建立並準備好部署。當您建立元件時，其狀態為 `REQUESTED`。然後， AWS IoT Greengrass 驗證元件可部署。您可以執行下列命令來查詢元件狀態，並確認元件可部署。將 取代`arn`為上一個步驟的 ARN。

   ```
   aws greengrassv2 describe-component --arn "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0"
   ```

   如果元件驗證，回應會指出元件狀態為 `DEPLOYABLE`。

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "2020-11-30T18:04:05.823Z",
     "publisher": "Amazon",
     "description": "My first Greengrass component.",
     "status": {
       "componentState": "DEPLOYABLE",
       "message": "NONE",
       "errors": {}
     },
     "platforms": [
       {
         "os": "linux",
         "architecture": "all"
       }
     ]
   }
   ```

您的 Hello World 元件現在可在 中使用 AWS IoT Greengrass。您可以將其部署回此 Greengrass 核心裝置或其他核心裝置。

# 步驟 6：部署您的元件
<a name="deploy-first-component"></a>

使用 AWS IoT Greengrass，您可以將元件部署到個別裝置或裝置群組。當您部署元件時， 會在每個目標裝置上 AWS IoT Greengrass 安裝並執行該元件的軟體。您可以指定要部署的元件，以及要為每個元件部署的組態更新。您也可以控制部署如何推展到部署目標的裝置。如需詳細資訊，請參閱[將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)。

在本節中，您將 Hello World 元件部署回 Greengrass 核心裝置。

## 部署您的元件 （主控台）
<a name="deploy-first-component-console"></a>

1. 在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)導覽功能表中，選擇**元件**。

1. 在**元件**頁面上的**我的元件**索引標籤上，選擇 **com.example.HelloWorld**。

1. 在 **com.example.HelloWorld** 頁面中，選擇**部署**。

1. 從**新增至部署**，選擇**建立新部署**，然後選擇**下一步**。

1. 在**指定目標**頁面上，執行下列作業：

   1. 在 **Name** (名稱) 方塊中，輸入 **Deployment for MyGreengrassCore**。

   1. 針對**部署目標**，選擇**核心裝置**，以及核心裝置的 AWS IoT 物件名稱。本教學課程中的預設值為 *MyGreengrassCore*。

   1. 選擇 **Next (下一步)**。

1. 在**選取元件**頁面的**我的元件**下，確認已選取**com.example.HelloWorld**元件，然後選擇**下一步**。

1. 在**設定元件**頁面上，選擇 **com.example.HelloWorld**，然後執行下列動作：

   1. 選擇**設定元件**。

   1. 在**組態更新**下的**要合併的組態**中，輸入下列組態。

      ```
      {
        "Message": "universe"
      }
      ```

      此組態更新會將 Hello World `Message` 參數`universe`設定為此部署中裝置的 。

   1. 選擇**確認**。

   1. 選擇 **Next (下一步)**。

1. 在**設定進階設定**頁面上，保留預設組態設定，然後選擇 **下一步**。

1. 在 **Review (檢閱)** 頁面，選擇 **Deploy (部署)**。

1. <a name="getting-started-verify-cloud-deployment-step"></a>確認部署已成功完成。可能需要幾分鐘才能完成部署。檢查 Hello World 日誌以驗證變更。在 Greengrass 核心裝置上執行下列命令。

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\\logs\\com.example.HelloWorld.log
   ```

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

   ```
   gc C:\greengrass\v2\\logs\\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   您應該會看到類似下列範例的訊息。

   ```
   Hello, universe! Greetings from your first Greengrass component.
   ```
**注意**  
如果日誌訊息未變更，則部署會失敗或無法連線到核心裝置。如果您的核心裝置未連線至網際網路，或沒有從 S3 儲存貯體擷取成品的許可，就可能發生這種情況。在核心裝置上執行下列命令，以檢視 AWS IoT Greengrass 核心軟體日誌檔案。此檔案包含 Greengrass 核心裝置的部署服務日誌。  

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   ```
   type C:\greengrass\v2\\logs\\greengrass.log
   ```
<a name="windows-cmd-type-observe-logs"></a>`type` 命令會將檔案的內容寫入終端機。執行此命令多次，以觀察 檔案中的變更。

   ```
   gc C:\greengrass\v2\\logs\\greengrass.log -Tail 10 -Wait
   ```
如需詳細資訊，請參閱[故障診斷 AWS IoT Greengrass V2](troubleshooting.md)。

## 部署您的元件 (AWS CLI)
<a name="deploy-first-component-cli"></a>

**部署 Hello World 元件**

1. 在您的開發電腦上，建立名為 的檔案，`hello-world-deployment.json`並將下列 JSON 複製到 檔案。此檔案定義要部署的元件和組態。

   ```
   {
     "components": {
       "com.example.HelloWorld": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"Message\":\"universe\"}"
         }
       }
     }
   }
   ```

   此組態檔案會指定 部署您在先前程序中開發和發佈`1.0.0`的 Hello World 元件版本。`configurationUpdate` 指定在 JSON 編碼字串中合併元件組態。此組態更新會將 Hello World `Message` 參數設定為此部署中裝置的 `universe` 。

1. 執行下列命令，將元件部署到您的 Greengrass 核心裝置。您可以部署到物件，也就是個別裝置，或是物件群組，也就是裝置群組。將 *MyGreengrassCore* 取代為核心裝置的 AWS IoT 物件名稱。

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

   ```
   aws greengrassv2 create-deployment \
     --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" \
     --cli-input-json file://hello-world-deployment.json
   ```

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

   ```
   aws greengrassv2 create-deployment ^
     --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ^
     --cli-input-json file://hello-world-deployment.json
   ```

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

   ```
   aws greengrassv2 create-deployment `
     --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" `
     --cli-input-json file://hello-world-deployment.json
   ```

------

   命令會輸出類似下列範例的回應。

   ```
   {
     "deploymentId": "deb69c37-314a-4369-a6a1-3dff9fce73a9",
     "iotJobId": "b5d92151-6348-4941-8603-bdbfb3e02b75",
     "iotJobArn": "arn:aws:iot:region:account-id:job/b5d92151-6348-4941-8603-bdbfb3e02b75"
   }
   ```

1. <a name="getting-started-verify-cloud-deployment-step"></a>確認部署已成功完成。可能需要幾分鐘才能完成部署。檢查 Hello World 日誌以驗證變更。在 Greengrass 核心裝置上執行下列命令。

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\\logs\\com.example.HelloWorld.log
   ```

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

   ```
   gc C:\greengrass\v2\\logs\\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   您應該會看到類似下列範例的訊息。

   ```
   Hello, universe! Greetings from your first Greengrass component.
   ```
**注意**  
如果日誌訊息未變更，則部署會失敗或無法連線到核心裝置。如果您的核心裝置未連線至網際網路，或沒有從 S3 儲存貯體擷取成品的許可，就可能發生這種情況。在核心裝置上執行下列命令，以檢視 AWS IoT Greengrass 核心軟體日誌檔案。此檔案包含 Greengrass 核心裝置的部署服務日誌。  

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   ```
   type C:\greengrass\v2\\logs\\greengrass.log
   ```
<a name="windows-cmd-type-observe-logs"></a>`type` 命令會將檔案的內容寫入終端機。執行此命令多次，以觀察 檔案中的變更。

   ```
   gc C:\greengrass\v2\\logs\\greengrass.log -Tail 10 -Wait
   ```
如需詳細資訊，請參閱[故障診斷 AWS IoT Greengrass V2](troubleshooting.md)。

# 後續步驟
<a name="getting-started-next-steps"></a>

您已完成本教學課程。 AWS IoT Greengrass 核心軟體和您的 Hello World 元件會在您的裝置上執行。此外，您的 Hello World 元件可在 AWS IoT Greengrass 雲端服務中部署到其他裝置。如需本教學課程探索主題的詳細資訊，請參閱以下內容：
+ [建立 AWS IoT Greengrass 元件](create-components.md)
+ [發佈元件以部署到您的核心裝置](publish-components.md)
+ [將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)