

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

# AWS IoT Core 教學課程入門
<a name="iot-gs"></a>

無論您是初次使用 IoT 還是擁有多年經驗，這些資源都會介紹可協助您開始使用的 AWS IoT 概念和術語 AWS IoT。
+ **在** 中查看內部 AWS IoT 及其元件[AWS IoT 運作方式](aws-iot-how-it-works.md)。
+ 從我們的培訓教材和影片集中[進一步**了解**AWS IoT](aws-iot-learn-more.md)。本主題也包含 AWS IoT 可以連線的服務清單、社交媒體連結，以及通訊協定規格的連結。
+ **[將您的第一個裝置連接至 AWS IoT Core](#aws-iot-get-started)**.
+ 透過 [連線至 AWS IoT Core](connect-to-iot.md) 並探索 [AWS IoT 教學課程](iot-tutorials.md) 來**開發**您的 IoT 解決方案。
+ 使用 [Device Advisor](device-advisor.md) 來**測試並驗證**您的 IoT 裝置，以進行安全可靠的通訊。
+ 使用 AWS IoT Core 管理服務 (例如 [機群索引](iot-indexing.md)、[AWS IoT 任務](iot-jobs.md) 和 [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html)) 來**管理**您的解決方案。
+ 使用 [AWS IoT 資料服務](aws-iot-how-it-works.md#aws-iot-components-data) 來**分析**來自您裝置的資料。

## 將您的第一個裝置連接至 AWS IoT Core
<a name="aws-iot-get-started"></a>

AWS IoT Core 服務會將 IoT 裝置連接到 AWS IoT 服務和其他 AWS 服務。 AWS IoT Core 包含裝置閘道和訊息中介裝置，可連接和處理 IoT 裝置和雲端之間的訊息。

以下是您可以開始使用 AWS IoT Core 和 的方式 AWS IoT。

![\[AWS IoT Core 入門導覽地圖。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/iot-gs-tour-map.png)


本節提供 的導覽 AWS IoT Core ，介紹其金鑰服務，並提供數個範例，說明如何將裝置連線至 AWS IoT Core 並在裝置之間傳遞訊息。在裝置和雲端之間傳遞訊息是每個 IoT 解決方案的基礎，也是您的裝置與其他 AWS 服務互動的方式。
+ 

**[設定 AWS 帳戶](setting-up.md)**  
您必須先設定 ，才能使用 AWS IoT 服務 AWS 帳戶。如果您已經有 AWS 帳戶 和 IAM 使用者，您可以使用它們並略過此步驟。
+ 

**[嘗試快速連接教學課程](iot-quick-start.md)**  
如果您想要快速開始使用 AWS IoT ，並查看它在有限情況下的運作方式，則本教學最好。在本教學課程中，您將需要裝置，並在它上安裝一些 AWS IoT 軟體。如果沒有 IoT 裝置，您可以使用 Windows、Linux 或 macOS 個人電腦，作為本教學課程的裝置。如果您想要嘗試 AWS IoT，但沒有裝置，請嘗試下一個選項。
+ 

**[嘗試互動式教學課程](interactive-demo.md)**  
如果您想要查看基本 AWS IoT 解決方案可以做什麼，而無需連接裝置或下載任何軟體，則此示範是最佳的。互動式教學課程提供以 AWS IoT Core 服務建置的模擬解決方案，說明其互動方式。
+ 

**[使用實作教學探索 AWS IoT Core 服務](iot-gs-first-thing.md)**  
本教學課程最適合想要開始使用 的開發人員 AWS IoT ，讓他們可以繼續探索其他 AWS IoT Core 功能，例如規則引擎和陰影。本教學課程遵循類似於快速連接教學課程的程序，但在每個步驟上提供更多詳細資訊，以便可以更順暢地轉換至其他進階教學課程。
+ 

**[使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)**  
了解如何使用 MQTT 測試用戶端，觀看您的第一部裝置將 MQTT 訊息發佈至 AWS IoT。MQTT 測試用戶端是監控和疑難排解裝置連線的實用工具。

**注意**  
如果想要嘗試其中一個以上的入門教學課程或重複相同的教學課程，您應該先刪除從先前教學課程建立的物件，然後再啟動另一個物件。如果未從先早的教學課程中刪除物件，您需要對後續教學課程使用不同的物件名稱。這是因為物件名稱在您的帳戶和 AWS 區域中必須是唯一的。

如需 的詳細資訊 AWS IoT Core，請參閱[什麼是 AWS IoT Core](what-is-aws-iot.md)？

# 設定 AWS 帳戶
<a name="setting-up"></a>

 AWS IoT Core 第一次使用 之前，請先完成下列任務：

**Topics**
+ [註冊 AWS 帳戶](#sign-up-for-aws)
+ [建立具有管理存取權的使用者](#create-an-admin)
+ [開啟 AWS IoT 主控台](#iot-console-signin)

## 註冊 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)。
+ [開啟 AWS IoT 主控台](#iot-console-signin)

如果您已經有 AWS 帳戶 和自己的使用者，您可以使用它們並直接跳到 [開啟 AWS IoT 主控台](#iot-console-signin)。

## 開啟 AWS IoT 主控台
<a name="iot-console-signin"></a>

本節中的大多數主控台導向主題都從 AWS IoT 主控台開始。如果您尚未登入 AWS 帳戶，請登入，然後開啟[AWS IoT 主控台](https://console.aws.amazon.com//iot/home)並繼續前往下一節以繼續開始使用 AWS IoT。

# 互動式教學課程
<a name="interactive-demo"></a>

互動式教學課程會顯示 AWS IoT上建置之簡易IoT解決方案的元件。本教學課程示範 IoT 裝置如何與 AWS IoT Core 服務互動。本主題提供 AWS IoT Core 互動式教學課程的預覽。

**注意**  
主控台中的影像包含未出現在此教學課程中影像的動畫。

若要執行示範，您必須先 [設定 AWS 帳戶](setting-up.md)。不過，本教學課程不需要任何 AWS IoT 資源、其他軟體或任何編碼。

本示範預計大約需時 5-10 分鐘。請預留 10 分鐘，讓自己有充裕的時間來理解每一個步驟。

**執行 AWS IoT Core 互動式教學課程**

1. 在 AWS IoT 主控台中開啟 [AWS IoT 首頁](https://console.aws.amazon.com//iot/home#/home)。

   在 **AWS IoT  首頁**上，於**學習資源**視窗窗格中選擇**開始教學課程**。  
![\[這是 AWS IoT 主控台首頁。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-home-demo.png)

1. 在**AWS IoT  主控台教學課程**頁面中，檢閱教學課程的各個章節，然後在您準備好繼續進行時，選擇**開始**章節。

**下列各節說明 **AWS IoT 主控台教學課程**如何呈現這些 AWS IoT Core 功能：**
+ [連線 IoT 裝置](#interactive-demo-part1)
+ [儲存裝置離線狀態](#interactive-demo-part2)
+ [將裝置資料路由到服務](#interactive-demo-part3)

## 連線 IoT 裝置
<a name="interactive-demo-part1"></a>

了解 IoT 裝置如何與 通訊 AWS IoT Core。

![\[這是 AWS IoT 互動式教學課程的第一步。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-demo-step-1.png)


此步驟中的動畫顯示左側的控制器和右側房子中的智慧燈如何 AWS IoT Core 在雲端連接和通訊。動畫顯示裝置與其接收的訊息通訊 AWS IoT Core 和做出反應。

如需將裝置連線至 的詳細資訊 AWS IoT Core，請參閱 [連線至 AWS IoT Core](connect-to-iot.md)。

## 儲存裝置離線狀態
<a name="interactive-demo-part2"></a>

了解 如何在裝置或應用程式離線時 AWS IoT Core 儲存裝置狀態。

![\[這是 AWS IoT 互動式教學課程的第二個步驟。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-demo-step-2.png)


此步驟中的動畫顯示 中的 Device Shadow 服務如何 AWS IoT Core 儲存控制裝置和智慧燈的裝置狀態資訊。智慧燈離線時，裝置影子會儲存來自控制器的命令。

當智慧燈重新連線時 AWS IoT Core，它會擷取這些命令。當控制器離線時，裝置影子會從智慧燈中儲存狀態信息。當控制器重新連接時，它會擷取智慧燈最新的狀態以更新其顯示內容。

如需裝置影子的詳細資訊，請參閱 [AWS IoT Device Shadow 服務](iot-device-shadows.md)。

## 將裝置資料路由到服務
<a name="interactive-demo-part3"></a>

了解如何 AWS IoT Core 將裝置狀態傳送至其他 AWS 服務。

![\[這是 AWS IoT 互動式教學課程的第三個步驟。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-demo-step-3.png)


此步驟中的動畫說明如何使用 AWS IoT rule. AWS IoT rules 訂閱來自裝置的特定訊息、解譯這些訊息中的資料，並將解譯的資料路由至其他服務， AWS 以將資料從裝置 AWS IoT Core 傳送至其他服務。在此範例中， AWS IoT 規則會從動作感應器解譯資料，並將命令傳送至 Device Shadow，然後將它們傳送至智慧燈泡。與先前的範例一樣，裝置影子存放控制器的裝置狀態資訊。

如需 AWS IoT 規則的詳細資訊，請參閱 [的規則 AWS IoT](iot-rules.md)。

# 嘗試 AWS IoT Core 快速連線教學課程
<a name="iot-quick-start"></a>

在本教學課程中，您將建立第一個物件、將裝置連接至其中，並觀看它傳送 MQTT 訊息。

您可以預期在本教學課程上花費 15-20 分鐘。

本教學課程最適合想要快速開始使用 的人 AWS IoT ，以了解它在有限情況下的運作方式。如果您正在尋找讓您入門的範例，以便可以探索更多功能和服務，請嘗試 [在實作教學 AWS IoT Core 中探索](iot-gs-first-thing.md)。

在本教學課程中，您將在連線至 中*物件資源*的裝置上下載並執行軟體， AWS IoT Core 做為極小型 IoT 解決方案的一部分。裝置可以是 IoT 裝置 (例如 Raspberry Pi)，也可以是正在執行 Linux、OS 和 OSX，或 Windows 的電腦。如果您想要將長距離 WAN (LoRaWAN) 裝置連接到 AWS IoT，請參閱教學 [>將裝置和閘道連接到 AWS IoT Core for LoRaWAN](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/lorawan-getting-started.html)。

如果您的裝置支援可以執行 [AWS IoT 主控台](https://console.aws.amazon.com//iot/home)的瀏覽器，我們建議您在該裝置上完成本教學課程。

**注意**  
如果您的裝置沒有相容的瀏覽器，請在電腦上遵循本教學課程。當程序要求您下載檔案時，請將它下載到您的電腦，然後使用安全複製 (SCP) 或類似程序，將下載的檔案傳輸到您的裝置。

本教學課程需要您的 IoT 裝置，才能在 AWS 帳戶裝置的資料端點上與 8443 埠通訊。若要測試其是否可以存取該連接，請嘗試 [測試與裝置資料端點的連線](iot-quick-start-test-connection.md) 中的操作程序。

## 步驟 1. 開始教學課程
<a name="iot-quick-start-connect"></a>

如果可能，請在您的裝置上完成此程序；否則，請準備好稍後在此程序中將檔案傳輸到您的裝置。

若要開始進行教學課程，請登入 [AWS IoT  主控台](https://console.aws.amazon.com//iot/home)。在 AWS IoT 主控台首頁的左側，選擇**連線**，然後選擇**連線一個裝置**。

![\[此 AWS IoT 主控台首頁說明如何連接一個裝置。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-quick-connect.PNG)


## 步驟 2. 建立物件
<a name="iot-quick-start-configure"></a>

1. 在 **Prepare your device** (準備您的裝置) 區段中，依照畫面上的指示，準備您的裝置以連線至 AWS IoT。  
![\[如何在 AWS IoT 主控台中準備裝置。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-prepare-device.png)

1. 在 **Register and secure your device** (註冊並保護您的裝置) 區段中，選擇 **Create a new thing** (建立新的物件) 或者 **Choose an existing thing** (選擇現有物件)。在 **Thing name** (物件名稱) 欄位中，為您的物件輸入名稱。在這個範例中使用的物件名稱為 **TutorialTestThing**。
**重要**  
繼續之前，請仔細檢查您的物件名稱。  
建立物件之後，無法變更物件名稱。如果想要變更物件名稱，您必須建立物件名稱正確的新物件，然後刪除名稱不正確的物件。

   在 **Additional configurations** (其他組態) 區段中，使用列出的選用組態進一步自訂物件資源。

   為物件提供名稱並選取任何其他組態後，請選擇 **Next** (下一步)。  
![\[使用 AWS IoT 主控台註冊並保護您的裝置。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-register-and-secure-your-device.png)

1. 在**選擇平台和軟體開發套件**區段中，選擇您要使用的平台和 AWS IoT 裝置軟體開發套件語言。這個範例會使用 Linux/OSX 平台和 Python SDK。請確保在目標裝置上安裝了 python3 和 pip3，再繼續下一步。
**注意**  
請務必在主控台頁面底部檢查所選 SDK 所需的必要軟體清單。  
您必須在目標電腦上安裝必要的軟體，然後才能繼續下一個步驟。

   在您選擇平台和裝置 SDK 語言之後，請選擇 **Next** (下一步)。  
![\[使用 AWS IoT 主控台選擇平台和 SDK。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-choose-platform-and-SDK.png)

## 步驟 3。將檔案下載到您的裝置
<a name="iot-quick-start-name"></a>

此頁面會在 AWS IoT 建立連線套件後出現，其中包含您的裝置所需的下列檔案和資源：
+ 物件的憑證檔案，用來驗證裝置
+ 政策資源，用來授權您的物件可與 AWS IoT互動
+ 下載 AWS 裝置 SDK 並在裝置上執行範例程式的指令碼

1. 當您準備好繼續時，請選擇 **Download connection kit for** (下載連線套件) 按鈕，為您先前選擇的平台下載適用的連線套件。  
![\[這是 AWS IoT 主控台下載憑證檔案的頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-download-connection-kit_1.png)

1. 如果您是在裝置上執行此程序，請將連線套件檔案儲存到可以從中執行命令列命令的目錄。

   如果您不是在裝置上執行此程序，請將連線套件檔案儲存至本機目錄，然後將檔案傳輸至您的裝置。

1. 在 **Unzip connection kit on your device** (解壓縮裝置上的連線套件) 區段中，輸入連線套件檔案所在目錄中的 **unzip connect\$1device\$1package.zip**。

   如果您是使用 Windows PowerShell 視窗，而且 **unzip** 命令無法運作，請將 **unzip** 取代為 **expand-archive**，然後再次嘗試命令列。

1. 在裝置上具有連線套件檔案之後，請選擇 **Next** (下一步) 來繼續教學課程。  
![\[AWS IoT 連線套件下載後的主控台憑證檔案下載頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-download-connection-kit_2.png)

## 步驟 4. 執行範例
<a name="iot-quick-start-install-run"></a>

您可以在裝置上的終端機或命令視窗中執行此程序，同時遵循主控台中顯示的指示。您在主控台中看見的命令是適用於 [步驟 2. 建立物件](#iot-quick-start-configure) 中所選作業系統的命令。這裡顯示的命令適用於 Linux/OSX 作業系統。

1. 在您裝置上的終端機或命令視窗中，在具有連線套件檔案的 目錄中，執行 AWS IoT 主控台中顯示的步驟。  
![\[AWS IoT 主控台快速入門安裝和執行頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-run-connection-kit.png)

1. 在裝置的終端機或命令視窗中，於您輸入來自主控台中 **Step 2** (步驟 2) 的命令之後，您應該會看到如下的輸出。此輸出來自程式傳送到 AWS IoT Core，然後從中收回的訊息。  
![\[AWS IoT 主控台快速入門範例程式輸出。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-connect-console-output-python_updated.png)

   當範例程式正在執行時，也會出現測試訊息 `Hello World!`。測試訊息會顯示在終端機或裝置上的命令視窗中。
**注意**  
如需有關主題訂閱和發佈的詳細資訊，請參閱所選 SDK 的範例程式碼。

1. 您可以在此程序的主控台中重複來自 **Step 2** (步驟 2) 的命令，以再次執行範例程式。

1. （選用） 如果您想要在[AWS IoT 主控台](https://console.aws.amazon.com//iot/home)中查看來自 IoT 用戶端的訊息，請在 AWS IoT 主控台的測試頁面上開啟 [MQTT 測試用戶端](https://console.aws.amazon.com//iot/home#/test)。 ****如果您選擇 Python SDK，則在 **MQTT test client** (MQTT 測試用戶端) 的 **Topic filter** (主題篩選條件) 中，輸入主題，例如 **sdk/test/*python*** 以訂閱裝置上的訊息。主題篩選條件區分大小寫，且取決於 **Step 1** (步驟 1) 中所選 SDK 的程式設計語言。如需有關主題訂閱和發佈的詳細資訊，請參閱所選 SDK 的程式碼範例。

1. 訂閱測試主題後，請在您的裝置上執行 **./start.sh**。如需詳細資訊，請參閱[使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)。

   執行 **./start.sh** 之後，訊息會顯示在 MQTT 用戶端中，內容與下列相似：

   ```
   {
     "message": "Hello World!" [1]
   }
   ```

   每次收到新的 `Hello World!` 訊息，以 `[]` 括住的 `sequence` 號碼就會增加 1，並在您結束程式時停止。

1. 若要完成教學課程並查看摘要，請在 AWS IoT 主控台中選擇**繼續**。  
![\[AWS IoT 主控台快速入門完成頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-connect-complete_updated1.png)

1. 現在會顯示 AWS IoT 快速連線教學課程的摘要。  
![\[AWS IoT 主控台快速入門摘要頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/aws-iot-learn-device-is-connected.png)

## 步驟 5. 深入探索
<a name="iot-quick-start-test"></a>

以下是在您完成快速入門後要 AWS IoT 進一步探索的一些想法。
+ 

**[在 MQTT 測試用戶端中檢視 MQTT 訊息](https://console.aws.amazon.com/iot/home#/test)**  
從 [AWS IoT 主控台中](https://console.aws.amazon.com//iot/home)，您可以在 AWS IoT 主控台的 **Test (測試)** 頁面上開啟 [MQTT 用戶端](https://console.aws.amazon.com//iot/home#/test)。在 **MQTT test client** (MQTT 測試用戶端) 中，訂閱 **\$1**，然後在裝置上執行程式 **./start.sh**，如前一個步驟所述。如需詳細資訊，請參閱[使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)。
+ 

**在您的裝置上，透過 [Device Advisor](https://docs.aws.amazon.com//iot/latest/developerguide/device-advisor.html) 執行測試**  
使用 Device Advisor 測試您的裝置是否可以安全可靠地連線至 並與之互動 AWS IoT。
+ 

**[互動式教學課程](interactive-demo.md)**  
若要開始互動式教學課程，請從 AWS IoT 主控台的**學習**頁面，在**查看運作方式 AWS IoT **圖磚中，選擇**開始教學課程**。
+ 

**[準備好探索其他教學課程](iot-gs-first-thing.md)**  
此快速入門僅提供 的範例 AWS IoT。如果您想要 AWS IoT 進一步探索並了解讓它成為強大 IoT 解決方案平台的功能，請透過 開始準備您的開發平台[在實作教學 AWS IoT Core 中探索](iot-gs-first-thing.md)。

# 測試與裝置資料端點的連線
<a name="iot-quick-start-test-connection"></a>

本主題會描述如何測試裝置與您帳戶的*裝置資料端點*連線，也就是您的 IoT 裝置用於連接到 AWS IoT的端點。

在要測試的裝置上執行這些程序，或使用連結到要測試裝置的 SSH 終端階段作業。

**Topics**
+ [尋找您的裝置資料端點](#iot-quick-start-test-connection-endpoint)
+ [快速測試連線](#iot-quick-start-test-connection-ping)
+ [取得應用程式，以測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-app)
+ [若要測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-test)

## 尋找您的裝置資料端點
<a name="iot-quick-start-test-connection-endpoint"></a>

此程序說明如何在 [AWS IoT 主控台](https://console.aws.amazon.com//iot/home)中尋找您的裝置資料端點，以測試 IoT 裝置的連線。

**若要尋找您的裝置資料端點**

1. 在 [AWS IoT 主控台](https://console.aws.amazon.com//iot/home)的 **Connect** 區段中，前往**網域組態**。

1. 在**網域組態**頁面中，前往**網域組態**容器，然後複製**網域名稱**。您的端點值對 是唯一的 AWS 帳戶 ，類似於此範例：`a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com`。

1. 

   儲存您的裝置資料端點，以便在下列程序中使用。

## 快速測試連線
<a name="iot-quick-start-test-connection-ping"></a>

此程序會測試與裝置資料端點的一般連線，但不測試您的裝置會使用的特定通訊埠。此測試會使用一般程式，通常足以知道您的裝置是否可以連線到 AWS IoT。

如果要測試與裝置將使用的特定通訊埠連線，請跳過此程序並繼續 [取得應用程式，以測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-app)。

**若要快速測試裝置資料端點**

1. 在裝置上的終端或命令列視窗中，將範例裝置資料端點 (`a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com`) 替換為帳戶的裝置資料端點，然後輸入此命令。

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

   ```
   ping -c 5 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
   ```

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

   ```
   ping -n 5 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
   ```

------

1. 如果 `ping` 顯示類似於以下內容的輸出，則其已成功連結到您的裝置資料端點。雖然它不 AWS IoT 直接與 通訊，但它確實找到 伺服器，並且可能可以透過此端點 AWS IoT 使用 。

   ```
   PING a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com (xx.xx.xxx.xxx) 56(84) bytes of data.
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=1 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=2 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=3 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=4 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=5 ttl=231 time=127 ms
   ```

   如果您對此結果滿意，可以在此處停止測試。

   如果要測試與 AWS IoT所使用之特定通訊埠的連線，請繼續進行 [取得應用程式，以測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-app)。

1. 如果 `ping` 沒有傳回成功的輸出，請檢查終端值，以確保您具有正確的端點，並檢查裝置與網際網路的連線。

## 取得應用程式，以測試與裝置資料端點和通訊埠的連線
<a name="iot-quick-start-test-connection-app"></a>

更徹底的連線測試可以通過使用 `nmap` 來執行。此程序會進行測試，以檢查 `nmap` 是否已安裝在您的裝置上。

**若要檢查裝置上的 `nmap`**

1. 在要測試的裝置上的終端或命令行列視窗中，輸入此命令列，以查看 `nmap` 是否已安裝。

   ```
   nmap --version
   ```

1. 如果您看到類似下列的輸出，代表 `nmap` 已安裝，且您可以繼續 [若要測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-test)。

   ```
   Nmap version 6.40 ( http://nmap.org )
   Platform: x86_64-koji-linux-gnu
   Compiled with: nmap-liblua-5.2.2 openssl-1.0.2k libpcre-8.32 libpcap-1.5.3 nmap-libdnet-1.12 ipv6
   Compiled without:
   Available nsock engines: epoll poll select
   ```

1. 如果您沒有看到類似上述步驟中顯示的回覆，您必須在裝置上安裝 `nmap`。選擇適用於裝置作業系統的程序。

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

此程序需要您在電腦上安裝軟體的權限。

**若要在 Linux 電腦上安裝 nmap**

1. 在裝置上的終端或命令列視窗中，輸入與其執行的 Linux 版本相對應的命令。

   1. Debian 或 Ubunt：

      ```
      sudo apt install nmap
      ```

   1. CentOS 或 RHEL：

      ```
      sudo yum install nmap
      ```

1. 使用以下命令測試安裝：

   ```
   nmap --version
   ```

1. 如果您看到類似下列的輸出，代表已安裝 `nmap`，且您可以繼續 [若要測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-test)。

   ```
   Nmap version 6.40 ( http://nmap.org )
   Platform: x86_64-koji-linux-gnu
   Compiled with: nmap-liblua-5.2.2 openssl-1.0.2k libpcre-8.32 libpcap-1.5.3 nmap-libdnet-1.12 ipv6
   Compiled without:
   Available nsock engines: epoll poll select
   ```

------
#### [ macOS ]

此程序需要您在電腦上安裝軟體的權限。

**在 macOS 電腦上安裝 nmap**

1. 在瀏覽器中，開啟 [https://nmap.org/download\$1macosx](https://nmap.org/download#macosx)，並下載**最新穩定的**安裝程式。

   出現提示時，請選取 **Open with DiskImageInstaller** (透過 DiskImageInstaller 開啟)。

1. 在安裝視窗中，將套件移動到 **Applications** (應用程式) 資料夾。

1. 在 **Finder** 中尋找 `nmap-xxxx-mpkg` 套件在 **Applications (應用程式)** 資料夾中的位置。在套件上 **Ctrl-click**，並選取 **Open (開啟)** 以開啟套件。

1. 檢閱安全對話方塊。如果您已準備好安裝 **nmap**，請選擇 **Open** (開啟) 以安裝 **nmap**。

1. 在 **Terminal** 中，使用此命令測試安裝。

   ```
   nmap --version
   ```

1. 如果您看到類似下列的輸出，代表已安裝 `nmap`，且您可以繼續 [若要測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-test)。

   ```
   Nmap version 7.92 ( https://nmap.org )
   Platform: x86_64-apple-darwin17.7.0
   Compiled with: nmap-liblua-5.3.5 openssl-1.1.1k nmap-libssh2-1.9.0 libz-1.2.11 nmap-libpcre-7.6 nmap-libpcap-1.9.1 nmap-libdnet-1.12 ipv6 Compiled without:
   Available nsock engines: kqueue poll select
   ```

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

此程序需要您在電腦上安裝軟體的權限。

**若要在 Windows 電腦上安裝 nmap**

1. 在瀏覽器中，開啟[https://nmap.org/download\$1windows](https://nmap.org/download#windows)並下載安裝程式的**最新穩定**版本。

   出現提示時，選擇 **Save file** (儲存檔案)。下載檔案後，從下載文件夾中將其打開。

1.  安裝檔案下載完成後，打開下載的 **nmap-xxxx-setup.exe** 以安裝應用程式。

1.  程式安裝時，接受預設設定。

   您不需要 Npcap 應用程式即可進行此測試。如果您不想安裝，可以取消選擇此選項。

1. 在 **Command** 中，使用此命令測試安裝。

   ```
   nmap --version
   ```

1. 如果您看到類似下列的輸出，代表已安裝 `nmap`，且您可以繼續 [若要測試與裝置資料端點和通訊埠的連線](#iot-quick-start-test-connection-test)。

   ```
   Nmap version 7.92 ( https://nmap.org )
   Platform: i686-pc-windows-windows
   Compiled with: nmap-liblua-5.3.5 openssl-1.1.1k nmap-libssh2-1.9.0 nmap-libz-1.2.11 nmap-libpcre-7.6 Npcap-1.50 nmap-libdnet-1.12 ipv6
   Compiled without:
   Available nsock engines: iocp poll select
   ```

------

## 若要測試與裝置資料端點和通訊埠的連線
<a name="iot-quick-start-test-connection-test"></a>

此程序會使用您選取的連接埠，測試 IoT 裝置與裝置資料端點的連線。

**若要測試裝置資料端點和通訊埠**

1. 在裝置上的終端或命令列視窗中，將範例裝置資料端點 (`a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com`) 替換為帳戶的裝置資料端點，然後輸入此命令。

   ```
   nmap -p 8443 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
   ```

1. 如果 `nmap` 會顯示類似下列內容的輸出，`nmap` 能夠在選定的通訊埠成功連結到您的裝置資料端點。

   ```
   Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-18 16:23 Pacific Standard Time
   Nmap scan report for a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com (xx.xxx.147.160)
   Host is up (0.036s latency).
   Other addresses for a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com (not scanned): xx.xxx.134.144 xx.xxx.55.139 xx.xxx.110.235 xx.xxx.174.233 xx.xxx.74.65 xx.xxx.122.179 xx.xxx.127.126
   rDNS record for xx.xxx.147.160: ec2-EXAMPLE-160.eu-west-1.compute.amazonaws.com
   
   PORT     STATE SERVICE
   8443/tcp open  https-alt
   MAC Address: 00:11:22:33:44:55 (Cimsys)
   
   Nmap done: 1 IP address (1 host up) scanned in 0.91 seconds
   ```

1. 如果 `nmap` 沒有傳回成功的輸出，請檢查端點值，以確保您的端點正確，並檢查裝置與網際網路的連線。

您可以測試裝置資料端點上的其他通訊埠，例如 443 通訊埠 (主要的 HTTPS 通訊埠)，只要將步驟 1 (`8443`) 中使用的通訊埠替換為您要測試的通訊埠即可。

# 在實作教學 AWS IoT Core 中探索
<a name="iot-gs-first-thing"></a>

在本教學課程中，您將安裝軟體，並建立將裝置連線至 所需的 AWS IoT 資源， AWS IoT Core 讓裝置可以使用 傳送和接收 MQTT 訊息 AWS IoT Core。您會在 AWS IoT 主控台的 MQTT 用戶端中看到訊息。

您可以預期在本教學課程上花費 20-30 分鐘。當您使用 IoT 裝置或 Raspberry Pi 時，例如，如果您需要安裝作業系統並設定裝置，本教學課程可能需要更長的時間。

![\[AWS IoT Core 頁面入門。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/iot-getting-started.png)


本教學課程最適合想要開始使用 的開發人員 AWS IoT Core ，讓他們可以繼續探索更進階的功能，例如[規則引擎](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rules.html)和[影子](https://docs.aws.amazon.com//iot/latest/developerguide/iot-device-shadows.html)。本教學課程透過比[快速入門教學](iot-quick-start.md)更詳細地解釋步驟，讓您準備好繼續了解 AWS IoT Core 及其與其他 AWS 服務的互動方式。如果您只是尋找快速的 *Hello World* 體驗，請嘗試 [嘗試 AWS IoT Core 快速連線教學課程](iot-quick-start.md)。

設定 AWS 帳戶 和 AWS IoT 主控台後，您將遵循下列步驟，了解如何連接裝置並使其傳送訊息 AWS IoT Core。

**後續步驟**
+ [選擇最適合您的裝置選項](#choosing-a-gs-system)
+ 如果您不打算使用 Amazon EC2 建立虛擬裝置，請 [建立 AWS IoT 資源](create-iot-resources.md)。
+ [設定您的裝置](configure-device.md)
+ [使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)

如需 的詳細資訊 AWS IoT Core，請參閱[什麼是 AWS IoT Core](what-is-aws-iot.md)？

## 哪種裝置選項最適合您？
<a name="choosing-a-gs-system"></a>

如果您不確定要挑選哪個選項，請使用下列各選項的優缺點清單，協助您決定哪個選項最適合您。


| 選項 | 這可能是一個好選項，如果： | 這可能不是一個好選項，如果： | 
| --- | --- | --- | 
| [使用 Amazon EC2 建立虛擬裝置](creating-a-virtual-thing.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/iot-gs-first-thing.html)  | 
| [使用您的 Windows 或 Linux PC 或 Mac 做為 AWS IoT 裝置](using-laptop-as-device.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/iot-gs-first-thing.html)  | 
| [連接 Raspberry Pi 或其他裝置](connecting-to-existing-device.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/iot-gs-first-thing.html)  | 

# 建立 AWS IoT 資源
<a name="create-iot-resources"></a>

在本教學課程中，您將建立裝置連線 AWS IoT Core 和交換訊息所需的 AWS IoT 資源。

![\[建立 AWS IoT 資源頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/iot-gs-create-resources.png)


1. 建立 AWS IoT 政策文件，其會授權您的裝置與 AWS IoT 服務互動。

1. 在 AWS IoT 及其 X.509 裝置憑證中建立物件，然後連接政策文件。物件是登錄 AWS IoT 檔中裝置的虛擬表示法。憑證會對您的裝置進行身分驗證 AWS IoT Core，而政策文件會授權您的裝置與之互動 AWS IoT。
**注意**  
若您打算 [使用 Amazon EC2 建立虛擬裝置](creating-a-virtual-thing.md)，則可跳過本頁，並繼續 [設定您的裝置](configure-device.md)。建立您的虛擬物件時，您將建立這些資源。

本教學課程使用 AWS IoT 主控台來建立 AWS IoT 資源。如果您的裝置支援網頁瀏覽器，在裝置的網頁瀏覽器上執行此程序可能會比較容易，因為您可以直接將憑證檔案下載到您的裝置。如果您在其他電腦上執行此程序，則必須先將憑證檔案複製到您的裝置，然後範例應用程式才能使用這些檔案。

## 建立 AWS IoT 政策
<a name="create-iot-policy"></a>

裝置使用 X.509 憑證進行身分驗證。 AWS IoT Core憑證已連接 AWS IoT 政策。這些政策決定了裝置可執行哪些 AWS IoT 操作 (例如訂購或發佈至 MQTT 主題)。您的裝置會在連線並傳送訊息時顯示其憑證 AWS IoT Core。

遵循這些步驟，以建立一個政策，讓您的裝置執行 AWS IoT 執行範例程式所需的作業。您必須先建立 AWS IoT 政策，才能將其附加到之後會建立的裝置憑證中。

**建立 AWS IoT 政策**

1. 在 [AWS IoT  主控台](https://console.aws.amazon.com//iot/home)的左側選單中，選擇**安全**，然後選擇**政策**。

1. 請在 **You don't have a policy yet** (尚無任何政策) 頁面上，選擇 **Create a policy** (建立政策)。

   如果您的帳戶已有現有政策，請選擇**建立政策**。

1. 在 **Create policy** (建立政策) 頁面上：

   1. 在 **Policy properties** (政策內容) 區段的 **Policy name** (政策名稱) 欄位中，輸入政策名稱 (例如 **My\$1Iot\$1Policy**)。請勿在政策名稱中使用個人識別資訊。

   1. 在 **Policy document** (政策文件) 區段中，建立可授予或拒絕授予 AWS IoT Core 作業資源存取權的政策陳述式。若要建立政策陳述式，授予所有用戶端執行 ****iot:Connect****，請執行這些步驟：
      + 在 **Policy effect** (政策效果) 欄位中，選擇**允許**。這允許已將此政策附加至其憑證的所有用戶端執行 **Policy action** (政策動作) 欄位中列出的動作。
      + 在 **Policy action** (政策動作) 欄位中，選擇政策操作 (例如 ****iot:Connect****)。政策動作是您的裝置從裝置 SDK 執行範例程式時，需要許可才能執行的動作。
      + 在 **Policy resource** (政策資源) 欄位中，輸入資源 Amazon Resource Name (ARN) 或 **\$1**。一個 **\$1** 以選擇任何用戶端 (裝置)。

      若要建立 ****iot:Receive****、****iot:Publish****以及 ****iot:Subscribe**** 的政策陳述式，請選擇 **Add new statement (新增陳述式)** 並重複這些步驟。  
![\[建立政策的頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/gs-create-policy-new.png)
**注意**  
在這個快速入門中，萬用字元 (\$1) 字元是為了簡單起見而使用。如需更高的安全性，您應該指定用戶端 ARN，而非將萬用字元指定為資源，以限制哪些用戶端 (裝置) 可以連接和發佈訊息。用戶端 ARN 遵循以下格式：`arn:aws:iot:your-region:your-aws-account:client/my-client-id`。  
不過，您必須先建立資源 (例如用戶端裝置，或物件影子)，然後才能將其 ARN 指配給政策。如需詳細資訊，請參閱 [AWS IoT Core 動作資源](https://docs.aws.amazon.com//iot/latest/developerguide/iot-action-resources.html)。

1. 政策相關資訊輸入完畢後，請選擇 **Create** (建立)。

如需詳細資訊，請參閱[AWS IoT 如何使用 IAM](security_iam_service-with-iam.md)。

## 建立物件
<a name="create-aws-thing"></a>

連接到 的裝置 AWS IoT Core 由 AWS IoT 登錄檔中的*物件*表示。「物件」**代表特定的裝置或邏輯實體。它可以是實體裝置或感應器 (例如燈泡或牆上的燈光開關)。它也可以是邏輯實體，例如未連線 AWS IoT但與其他裝置 （例如具有引擎感應器或控制面板的汽車） 相關的應用程式或實體實體執行個體。

**在 AWS IoT 主控台中建立物件**

1. 在 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)的左側選單中，選擇**所有裝置**，然後選擇**物件**。

1. 在 **Things** (物件) 頁面上，選擇 **Create things** (建立物件)。

1. 在 **Create things** (建立物件) 頁面上，選擇 **Create a single thing** (建立單一物件)，然後選擇 **Next** (下一步)。

1. 在 **Specify thing properties** (指定物件屬性) 頁面上，針對 **Thing name** (物件名稱)，輸入您的物件名稱，例如 **MyIotThing**。

   請小心選擇物件名稱，因為您之後就無法變更物件名稱。

   要變更物件的名稱，您必須建立一個新的物件並為它命名，然後刪除舊的物件。
**注意**  
請勿在物件名稱中使用個人識別資訊。物件名稱可以出現在未加密的通訊和報告中。

1. 將此頁面上的其餘欄位保持空白。選擇**下一步**。

1. 在 **Configure device certificate - *optional*** (設定裝置憑證 - 選用) 頁面上，選擇 **Auto-generate a new certificate (recommended)** (自動產生新憑證 (建議動作))。選擇**下一步**。

1. 在 **Attach policies to certificate - *optional*** (將策略連接到憑證 - 選用) 頁面上，選取您在上節所建立的政策。在該節中，政策已命名為 **My\$1Iot\$1Policy**。選擇 **Create thing** (建立物件)。

1. 在 **Download certificates and keys** (下載憑證和金鑰) 頁面上：

   1. 下載每個憑證和金鑰檔案，並儲存它們以供稍後使用。您必須在裝置上安裝這些檔案。

      當您儲存憑證檔案時，請給與它們下表中的名稱。這些是稍後範例中使用的檔案名稱。  
**憑證檔案名稱**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/create-iot-resources.html)

   1. 若要下載這些檔案的根 CA 檔案，請選擇根 CA 憑證檔案的 **Download** (下載) 連結，此憑證檔案對應於資料端點類型以及您正在使用的密碼套件。在本教學課程中，選擇 **RSA 2048 bit key: Amazon Root CA 1** (RSA 2048 位元金鑰：Amazon 根 CA 1) 右側的 **Download** (下載)，然後下載 **RSA 2048 bit key: Amazon Root CA 1** (RSA 2048 位元金鑰：Amazon 根 CA 1) 憑證檔案。
**重要**  
您必須先儲存憑證檔案，然後才能離開此頁面。在主控台中離開此頁面之後，您再也不能存取憑證檔案。  
如果忘了下載在此步驟中所建立的憑證檔案，您必須結束此主控台畫面、移至主控台中的物件清單、刪除您建立的物件，然後從頭重新啟動此程序。

   1.  選擇 **Done (完成)**。

完成此程序之後，您應該會在物件清單中看到新的物件。

# 設定您的裝置
<a name="configure-device"></a>

本節描述如何設定您的裝置以連接至 AWS IoT Core。如果您想要開始使用 AWS IoT Core 但還沒有裝置，您可以使用 Amazon EC2 建立虛擬裝置，也可以使用 Windows PC 或 Mac 做為 IoT 裝置。

選取要嘗試的最佳裝置選項 AWS IoT Core。當然，您可以嘗試它們全部，但一次只能嘗試一個。如果您不確定哪個裝置選項最適合您，請閱讀如何選擇[哪個是最好的裝置選項](iot-gs-first-thing.md#choosing-a-gs-system)，然後返回此頁面。

**裝置選項**
+ [使用 Amazon EC2 建立虛擬裝置](creating-a-virtual-thing.md)
+ [使用您的 Windows 或 Linux PC 或 Mac 做為 AWS IoT 裝置](using-laptop-as-device.md)
+ [連接 Raspberry Pi 或其他裝置](connecting-to-existing-device.md)

# 使用 Amazon EC2 建立虛擬裝置
<a name="creating-a-virtual-thing"></a>

在本教學課程中，您將建立 Amazon EC2 執行個體，充當雲端中的虛擬裝置。

若要完成本教學課程，您需要 AWS 帳戶。若您沒有帳戶，請完成 [設定 AWS 帳戶](setting-up.md) 所述的步驟，然後再繼續。

**Topics**
+ [設定 Amazon EC2 執行個體](#set-up-ec2)
+ [安裝 Git、Node.js 並設定 AWS CLI](#install-git-node)
+ [為您的虛擬裝置建立 AWS IoT 資源](#ec2-create-certificate)
+ [安裝適用於 JavaScript 的 AWS IoT 裝置 SDK](#ec2-sdk)
+ [執行範例應用程式](#ec2-run-app)
+ [在 AWS IoT 主控台中檢視來自範例應用程式的訊息](#ec2-view-msg)

## 設定 Amazon EC2 執行個體
<a name="set-up-ec2"></a>

下列步驟顯示如何建立 Amazon EC2 執行個體，其將充當您的虛擬裝置取代實體裝置。

如果您是第一次建立 Amazon EC2 執行個體，[開始使用 Amazon EC2Linux 執行個體](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/EC2_GetStarted.html)中的相關指示可能會更有幫助。

**啟動執行個體**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 從左側的主控台功能表展開 **Instances** (執行個體) 區段，然後選擇 **Instances** (執行個體)。在 **Instances** (執行個體) 儀表板中，選擇右側的 **Launch instances** (啟動執行個體) 以顯示基本組態清單。

1. 在 **Name and tags** (名稱和標籤) 區段中，輸入執行個體的名稱，並選擇性地新增標籤。

1. 在 **Application in OS Images (Amazon Machine Image)** (應用程式和作業系統映像) 區段中選擇執行個體的 AMI 範本，例如 *Amazon Linux 2 AMI (HVM)*。請注意，此 AMI 會標示為 "Free tier eligible." (符合免費方案。)

1. 在 **Instance Type** (執行個體類型) 頁面中，您可以選取您執行個體的硬體組態。選取 `t2.micro` 類型，其預設為選取。請注意，此執行個體類型符合免費方案資格。

1. 在 **Key pair (login)** (金鑰對 (登入)) 區段中，從下拉式清單中選擇金鑰對名稱，或選擇 **Create a new key pair** (建立新金鑰對) 以建立新的金鑰對。建立新金鑰對時，請務必下載私密金鑰檔案並將其儲存在安全的地方，因為這是您下載並儲存的唯一機會。每次您連線至執行個體來啟動執行個體與對應的私有金鑰時，都需要提供您的金鑰對名稱。
**警告**  
不要選取 **Proceed without a key pair** (不使用金鑰對而繼續) 選項。如果不使用金鑰對而啟動執行個體，就無法與它連線。

1. 在 **Network settings** (網路設定) 區段和 **Configure storage** (設定儲存區) 區段中，您可以保留預設設定。當您就緒後，選擇 **Launch Instances** (啟動執行個體)。

1. 會有確認頁面讓您知道您的執行個體正在啟動。選擇 **View Instances** (檢視執行個體) 關閉確認頁面並返回主控台。

1. 您可以在 **Instances (執行個體)** 畫面中檢視啟動狀態。啟動執行個體無須費時。當您啟動執行個體時，其初始狀態是 `pending`。在執行個體啟動後，其狀態會變更為 `running`，並得到公有的 DNS 名稱。(如果隱藏 **Public DNS (IPv4) (公有 DNS (IPv4))** 欄，請選擇頁面右上角的 **Show/Hide Columns (顯示/隱藏欄)** (齒輪狀圖示)，然後選取 **Public DNS (IPv4) (公有 DNS (IPv4))**。)

1. 執行個體可能需要幾分鐘的時間準備就緒讓您連線。確認您的執行個體是否已通過狀態檢查，您可以在 **Status Checks (狀態檢查)** 欄檢視此資訊。

   在新的執行個體通過其狀態檢查之後，請繼續下一個程序並連接至該執行個體。

**連結到您的執行個體**

您可以從 Amazon EC2 主控台選取執行個體，並選擇使用 Amazon EC2 Instance Connect 來進行連線，以使用瀏覽器型用戶端連接至執行個體。Instance Connect 會處理許可並提供成功的連線。

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側選單中，選擇 **Instances** (執行個體)。

1. 選取執行個體，然後選取 **Connect (連線)**。

1. 選擇 **Amazon EC2 Instance Connect**，**Connect** (連線)。

您現在應該具有已登入新 Amazon EC2 執行個體的 **Amazon EC2 Instance Connect** 視窗。

## 安裝 Git、Node.js 並設定 AWS CLI
<a name="install-git-node"></a>

在本節中，您會在 Linux 執行個體上安裝 Git 和 Node.js。

**安裝 Git**

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用下列命令更新您的執行個體。

   ```
   sudo yum update -y
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用下列命令安裝 Git。

   ```
   sudo yum install git -y
   ```

1. 若要檢查 Git 是否已安裝，以及 Git 的目前版本，請執行下列命令：

   ```
   git --version
   ```

**安裝 Node.js**

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用下列命令安裝 Node Version Manager (NVM)。

   ```
   curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
   ```

   nvm 可以安裝多種 Node.js 版本且允許您在各版本間進行切換，因此我們會使用 nvm 安裝 Node.js。

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用此命令啟用 nvm。

   ```
   . ~/.nvm/nvm.sh
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用 nvm 來透過使用此命令安裝最新版本的 Node.js。

   ```
   nvm install 16
   ```
**注意**  
這會安裝 Node.js 的最新 LTS 版本。

   安裝 Node.js 時，系統會一併安裝節點套件管理工具 (npm)，您可以視需要安裝額外的模組。

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用此命令來測試是否已安裝並正確地執行 Node.js。

   ```
   node -e "console.log('Running Node.js ' + process.version)"
   ```

    本教學課程需要 Node v10.0 或更新版本。如需詳細資訊，請參閱 [Tutorial: Setting Up Node.js on an Amazon EC2 Instance](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html) (教學課程：在 Amazon EC2 執行個體上設定 Node.js)。

**設定 AWS CLI**

您的 Amazon EC2 執行個體已預先載入 AWS CLI。不過，您必須完成您的 AWS CLI 設定檔。如需如何設定 CLI 的詳細資訊，請參閱[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

1. 下列範例顯示範本值。將它們取代為您自己的值。您可以在 [AWS 主控台中於您在 **My Security Credentials**](https://console.aws.amazon.com//iam/home#/security_credentials) (我的安全憑證) 下的帳戶資訊中找到這些值。

   在您的 **Amazon EC2 Instance Connect** 視窗中，輸入此命令：

   ```
   aws configure
   ```

   然後在顯示的提示中輸入來自您帳戶的值。

   ```
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-west-2
   Default output format [None]: json
   ```

1. 您可以使用此命令測試您的 AWS CLI 組態：

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

   如果您的 AWS CLI 設定正確，命令應該會從 傳回端點地址 AWS 帳戶。

## 為您的虛擬裝置建立 AWS IoT 資源
<a name="ec2-create-certificate"></a>

本節說明如何使用 AWS CLI 直接在虛擬裝置上建立物件物件及其憑證檔案。這是直接在裝置上完成，以避免從另一台電腦將它們複製到裝置時可能造成的潛在複雜性。在本節中，您將為虛擬裝置建立下列資源：
+ 代表虛擬裝置所在的物件 AWS IoT。
+ 要驗證虛擬裝置的憑證。
+ 政策文件，用來授權虛擬裝置連接至 AWS IoT，以及用來發佈、接收和訂閱訊息。

**在 Linux 執行個體中建立 AWS IoT 物件**

連接到 的裝置 AWS IoT 由 AWS IoT 登錄檔中的*物件*表示。「物件」**代表特定的裝置或邏輯實體。在此案例中，您的「物件」**將代表您的虛擬裝置，即 Amazon EC2 執行個體。

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，執行下列命令來建立您的物件。

   ```
   aws iot create-thing --thing-name "MyIotThing"
   ```

1. JSON 回應應該如下所示：

   ```
   {
       "thingArn": "arn:aws:iot:your-region:your-aws-account:thing/MyIotThing", 
       "thingName": "MyIotThing",
       "thingId": "6cf922a8-d8ea-4136-f3401EXAMPLE"
   }
   ```

**在 Linux 執行個體中建立和連接 AWS IoT 金鑰和憑證**

**[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** 命令會建立由 Amazon 根憑證授權機構簽署的用戶端憑證。此憑證用來驗證虛擬裝置的身分。

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，建立目錄以存放您的憑證和金鑰檔案。

   ```
   mkdir ~/certs
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用此命令下載 Amazon 憑證授權機構 (CA) 憑證的副本。

   ```
   curl -o ~/certs/Amazon-root-CA-1.pem \
       https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，執行下列命令來建立您的私有金鑰、公有金鑰，以及 X.509 憑證檔案。此命令也會向 註冊和啟用憑證 AWS IoT。

   ```
   aws iot create-keys-and-certificate \
       --set-as-active \
       --certificate-pem-outfile "~/certs/device.pem.crt" \
       --public-key-outfile "~/certs/public.pem.key" \
       --private-key-outfile "~/certs/private.pem.key"
   ```

   回傳的結果如下所示。儲存 `certificateArn`，以便您可以在後續命令中使用它。您需要它，將您的憑證連接到您的物件，並在稍後的步驟中將政策連接到憑證。

   ```
   {
       "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
       "certificateId": "9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
       "certificatePem": "
   -----BEGIN CERTIFICATE-----
   MIICiTCCEXAMPLE6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
   VVMxCzAJBgNVBAgEXAMPLEAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
   b24xFDASBgNVBAsTC0lBTSEXAMPLE2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
   BgkqhkiG9w0BCQEWEG5vb25lQGFtYEXAMPLEb20wHhcNMTEwNDI1MjA0NTIxWhcN
   MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCEXAMPLEJBgNVBAgTAldBMRAwDgYD
   VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDAEXAMPLEsTC0lBTSBDb25z
   b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEXAMPLE25lQGFt
   YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+aEXAMPLE
   EXAMPLEfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
   rDHudUZEXAMPLELG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
   Ibb3OhjZnzcvQAEXAMPLEWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
   nUhVVxYUntneD9+h8Mg9qEXAMPLEyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
   FFBjvSfpJIlJ00zbhNYS5f6GuoEDEXAMPLEBHjJnyp378OD8uTs7fLvjx79LjSTb
   NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=
   -----END CERTIFICATE-----\n",
       "keyPair": {
           "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n",
           "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n"
       }
   }
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，將您的物件連接到您剛建立的憑證，方法是使用下列命令，以及來自前一個命令之回應中的 *certificateArn*。

   ```
   aws iot attach-thing-principal \
       --thing-name "MyIotThing" \
       --principal "certificateArn"
   ```

   如果成功，此命令不會顯示任何輸出。

**建立並連接政策**

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，複製此策略文件並將其貼到名為 **\$1/policy.json** 的檔案來建立政策檔案。

   如果您沒有最愛的 Linux 編輯器，則可以使用此命令開啟 **nano**。

   ```
   nano ~/policy.json
   ```

   將 `policy.json` 的政策文件貼入其中。輸入 ctrl-x 以結束 **nano** 編輯器並儲存檔案。

   `policy.json` 的政策文件內容  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Subscribe",
                   "iot:Receive",
                   "iot:Connect"
               ],
               "Resource": [
                   "*"
               ]
           }
       ]
   }
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用下列命令建立您的政策。

   ```
   aws iot create-policy \
       --policy-name "MyIotThingPolicy" \
       --policy-document "file://~/policy.json"
   ```

   輸出：  
****  

   ```
   {
       "policyName": "MyIotThingPolicy",
       "policyArn": "arn:aws:iot:us-east-1:your-aws-account:policy/MyIotThingPolicy",
       "policyDocument": "{
           \"Version\": \"2012-10-17\",
           \"Statement\": [
               {
                   \"Effect\": \"Allow\",
                   \"Action\": [
                       \"iot:Publish\",
                       \"iot:Receive\",
                       \"iot:Subscribe\",
                       \"iot:Connect\"
                   ],
                   \"Resource\": [
                       \"*\"
                   ]
           }
           ]
       }",
       "policyVersionId": "1"
   }
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用下列命令將政策連接至虛擬裝置的憑證。

   ```
   aws iot attach-policy \
       --policy-name "MyIotThingPolicy" \
       --target "certificateArn"
   ```

   如果成功，此命令不會顯示任何輸出。

## 安裝適用於 JavaScript 的 AWS IoT 裝置 SDK
<a name="ec2-sdk"></a>

在本節中，您將安裝適用於 JavaScript 的 AWS IoT 裝置開發套件，其中包含應用程式可用來與 AWS IoT 和範例程式通訊的程式碼。如需詳細資訊，請參閱[適用於 JavaScript GitHub 儲存庫的AWS IoT SDK](https://github.com/aws/aws-iot-device-sdk-js-v2)。

**在 Linux 執行個體上安裝適用於 JavaScript 的 AWS IoT 裝置 SDK**

1. 在 **Amazon EC2 Instance Connect** 視窗中，使用此命令將適用於 JavaScript 的 AWS IoT 裝置 SDK 儲存庫複製到主目錄的 `aws-iot-device-sdk-js-v2` 目錄中。

   ```
   cd ~
   git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
   ```

1. 導覽至您在上述步驟中建立的 `aws-iot-device-sdk-js-v2` 目錄。

   ```
   cd aws-iot-device-sdk-js-v2
   ```

1. 使用 npm 來安裝 SDK。

   ```
   npm install
   ```

## 執行範例應用程式
<a name="ec2-run-app"></a>

 以下各節命令假設您的金鑰和憑證檔案存放在虛擬裝置上，如下表所示。


**憑證檔案名稱**  

|  檔案  |  檔案路徑  | 
| --- | --- | 
|  私有金鑰  |  `~/certs/private.pem.key`  | 
|  裝置憑證  |  `~/certs/device.pem.crt`  | 
|  根 CA 憑證  |  `~/certs/Amazon-root-CA-1.pem`  | 

在本節中，您將安裝並執行可在適用於 JavaScript 的 AWS IoT 裝置 SDK `aws-iot-device-sdk-js-v2/samples/node`目錄中找到`pub-sub.js`的範例應用程式。此應用程式顯示裝置 (您的 Amazon EC2 執行個體) 如何使用 MQTT 程式庫來發佈和訂閱 MQTT 訊息。`pub-sub.js` 範例應用程式會訂閱主題 `topic_1`、將 10 則訊息發佈至該主題，以及在從訊息代理程式接收訊息時顯示這些訊息。

**安裝並執行範例應用程式**

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，導覽至 SDK 已建立的 `aws-iot-device-sdk-js-v2/samples/node/pub_sub` 目錄，並使用這些命令安裝範例應用程式。

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   npm install
   ```

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，使用此命令 AWS IoT 從 取得*your-iot-endpoint*。

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

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，依指示插入 *your-iot-endpoint* 並執行此命令。

   ```
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

範例應用程式：

1. 連線至 AWS IoT Core 您帳戶的 。

1. 訂閱訊息主題 **topic\$11**，並顯示其收到關於該主題的訊息。

1. 將 10 則訊息發佈至主題 **topic\$11**。

1. 顯示類似下列內容的輸出：

   ```
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":1}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":2}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":3}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":4}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":5}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":6}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":7}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":8}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":9}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":10}
   ```

若在執行範例應用程式時發生問題，請檢閱 [對範例應用程式的問題進行故障診斷](gs-device-troubleshoot.md)。

您也可以將 `--verbosity debug` 參數新增至命令列，以便範例應用程式顯示有關其正在做什麼的詳細訊息。這些資訊可能會提供您更正問題所需的協助。

## 在 AWS IoT 主控台中檢視來自範例應用程式的訊息
<a name="ec2-view-msg"></a>

您可以在範例應用程式的訊息透過訊息代理程式傳遞時看到這些訊臮，方法為使用 **AWS IoT 主控台**中的 **MQTT test client** (MQTT 測試用戶端)。

**檢視範例應用程式所發佈的 MQTT 訊息**

1. 檢閱 [使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)。這有助於您了解如何使用 **AWS IoT 主控台**中的 **MQTT 測試用戶端**，在 MQTT 訊息通過訊息代理程式時，檢視訊息。

1. 在 **AWS IoT 主控台**中開啟 **MQTT 測試用戶端**。

1. 在**Subscribe to a topic** (訂閱主題)中，訂閱主題，**topic\$11**。

1. 在您的 **Amazon EC2 Instance Connect** 視窗中，再次執行範例應用程式，並在 **AWS IoT 主控台**的 **MQTT test client** (MQTT 測試用戶端) 中觀看訊息。

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

如需 MQTT 和 如何 AWS IoT Core 支援通訊協定的詳細資訊，請參閱 [MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html)。

# 使用您的 Windows 或 Linux PC 或 Mac 做為 AWS IoT 裝置
<a name="using-laptop-as-device"></a>

在本教學課程中，您將設定個人電腦以搭配 使用 AWS IoT。這些指示支援 Windows 和 Linux PC 以及 Mac。若要完成此目的，您需要在電腦上安裝一些軟體。如果您不想要在電腦上安裝軟體，則可以嘗試 [使用 Amazon EC2 建立虛擬裝置](creating-a-virtual-thing.md)，它會在虛擬機器上安裝所有軟體。

**Topics**
+ [設定您的個人電腦](#gs-pc-prereqs)
+ [安裝 Git、Python 和適用於 Python AWS IoT 的裝置 SDK](#gs-pc-sdk-node)
+ [設定政策和執行範例應用程式](#gs-pc-python-app-run)
+ [在 AWS IoT 主控台中檢視來自範例應用程式的訊息](#gs-pc-view-msg)
+ [在 Python 中執行共享訂閱範例](#gs-pc-shared-subscription-example)

## 設定您的個人電腦
<a name="gs-pc-prereqs"></a>

若要完成本教學課程，您需要一部 Windows 或 Linux PC，或是一部可連接到網際網路的 Mac。

繼續下一個步驟之前，請確定您可以在電腦上開啟命令列視窗。在 Windows PC 上使用 **cmd.exe**。在 Linux PC 或 Mac 上，使用 **Terminal**。

## 安裝 Git、Python 和適用於 Python AWS IoT 的裝置 SDK
<a name="gs-pc-sdk-node"></a>

在本節中，您將在電腦上安裝 Python 和適用於 Python 的 AWS IoT 裝置 SDK。

### 安裝最新版本的 Git 和 Python
<a name="gs-pc-node-runtime"></a>

此程序說明如何在個人電腦上安裝最新版本的 Git 和 Python。

**在您的電腦上下載並安裝 Git 和 Python**

1. 查看您的電腦上是否已安裝 Git。在命令列中輸入此命令。

   ```
   git --version
   ```

   如果命令顯示 Git 版本，表示已安裝 Git，而且您可以繼續進行下一個步驟。

   如果命令顯示錯誤，請開啟 [https://git-scm.com/download](https://git-scm.com/download) 並為您的電腦安裝 Git。

1. 查看您是否已安裝 Python。在命令列中輸入此命令。

   ```
   python -V
   ```
**注意**  
如果此命令提供錯誤：`Python was not found`，原因可能是您的作業系統呼叫 Python v3.x 可執行檔作為 `Python3`。在此情況下，將 `python` 的所有執行個體取代為 `python3`，並繼續進行本教學課程的其餘部分。

   如果命令顯示 Python 版本，則表示已安裝 Python。本教學課程需要 Python v3.7 或更新版本。

1. 如果已安裝 Python，則可以跳過本節的其餘步驟。如果未安裝，請繼續。

1. 開啟 [https://www.python.org/downloads/](https://www.python.org/downloads/)，並下載適用於您電腦的安裝程式。

1. 如果下載未自動開始安裝，請執行下載的程式來安裝 Python。

1. 驗證 Python 的安裝。

   ```
   python -V
   ```

   確認命令顯示 Python 版本。如果未顯示 Python 版本，請嘗試再次下載並安裝 Python。

### 安裝適用於 Python 的 AWS IoT 裝置 SDK
<a name="gs-pc-python-intall-sdk"></a>

**在電腦上安裝適用於 Python 的 AWS IoT 裝置 SDK**

1. 安裝適用於 Python 的 AWS IoT 裝置 SDK v2。

   ```
   python3 -m pip install awsiotsdk
   ```

1. 將適用於 Python 的 AWS IoT 裝置 SDK 儲存庫複製到主目錄的 aws-iot-device-sdk-python-v2 目錄中。此程序會將所安裝檔案的目錄稱為 *home*。

   *home* 目錄的實際位置取決於您的作業系統。

------
#### [ Linux/macOS ]

   在 macOS 和 Linux 中，*home* 目錄為 `~`。

   ```
   cd ~ 
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

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

   在 Windows 中，您可以在 `cmd` 視窗中執行此命令，來尋找 *home* 目錄路徑。

   ```
   echo %USERPROFILE%
   cd %USERPROFILE%
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
**注意**  
如果您是使用 Windows PowerShell，而不是 **cmd.exe**，則會使用下列命令。  

   ```
   echo $home
   ```

如需詳細資訊，請參閱[適用於 Python GitHub 儲存庫的AWS IoT 裝置 SDK](https://github.com/aws/aws-iot-device-sdk-python-v2)。

### 準備執行範例應用程式
<a name="gs-pc-python-config-app"></a>

**準備您的系統以執行範例應用程式**
+ 建立 `certs` 目錄。將下列項目複製至 `certs` 目錄：私有金鑰、裝置憑證，以及您在 [建立 AWS IoT 資源](create-iot-resources.md) 建立和註冊物件時所儲存的根憑證授權機構憑證檔案。目的地目錄中每個檔案的檔案名稱應與表格中的檔案名稱相符。

   下節命令假設您的金鑰和憑證檔案儲存在您的裝置上，如下表所示。

------
#### [ Linux/macOS ]

  執行此命令來建立 `certs` 子目錄，您會在執行範例應用程式時使用這個子目錄。

  ```
  mkdir ~/certs
  ```

  在新的子目錄中，將檔案複製到下表所示的目的地檔案路徑。  
**憑證檔案名稱**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/using-laptop-as-device.html)

  執行此命令來列出 `certs` 目錄中的檔案，並將其與表格中列出的檔案進行比較。

  ```
  ls -l ~/certs
  ```

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

  執行此命令來建立 `certs` 子目錄，您會在執行範例應用程式時使用這個子目錄。

  ```
  mkdir %USERPROFILE%\certs
  ```

  在新的子目錄中，將檔案複製到下表所示的目的地檔案路徑。  
**憑證檔案名稱**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/using-laptop-as-device.html)

  執行此命令來列出 `certs` 目錄中的檔案，並將其與表格中列出的檔案進行比較。

  ```
  dir %USERPROFILE%\certs
  ```

------

## 設定政策和執行範例應用程式
<a name="gs-pc-python-app-run"></a>

在本節中，您會設定政策，並執行 `pubsub.py` 範例指令碼，其位於 適用於 Python 的 AWS IoT Device SDK的 `aws-iot-device-sdk-python-v2/samples` 目錄中。此指令碼顯示您的裝置如何使用 MQTT 程式庫來發佈和訂閱 MQTT 訊息。

`pubsub.py` 範例應用程式會訂閱主題 `test/topic`、將 10 則訊息發佈至該主題，以及在從訊息代理程式接收訊息時顯示這些訊息。

若要執行 `pubsub.py` 範例指令碼，您需要以下資訊：


**應用程式參數值**  

|  參數  |  可在哪裡找到值  | 
| --- | --- | 
| your-iot-endpoint |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/using-laptop-as-device.html)  | 

*your-iot-endpoint* 值的格式為：`endpoint_id-ats.iot.region.amazonaws.com`，例如 `a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`。

執行指令碼之前，請確定您物件的政策許可範例指令碼連接、訂閱、發佈和接收。

**尋找並檢閱物件資源的政策文件**

1. 在 [AWS IoT 主控台](https://console.aws.amazon.com//iot/home#/thinghub)的 **Things** (物件) 清單中，尋找代表您裝置的資源。

1. 選擇代表您裝置物件資源的 **Name** (名稱) 連結，以開啟 **Thing details** (物件詳細資訊) 頁面。

1. 在 **Thing details** (物件詳細資訊) 頁面中的 **Certificates** (憑證) 索引標籤上，選擇與物件資源相連的憑證。清單中應該只有一個憑證。如果有一個以上的憑證，請選擇其檔案已安裝在裝置上且將用來連接至 AWS IoT Core的憑證。

   於 **Certificate** (憑證) 詳細資訊頁面的 **Policies** (政策) 索引標籤中，選擇與憑證相連的政策。其中應只有一個政策。如果有多個政策，請針對每個政策重複下一個步驟，以確保至少有一個政策授予必要的存取權。

1. 在 **Policy** (政策) 概觀頁面中，找到 JSON 編輯器並選擇 **Edit policy document** (編輯政策文件)，視需要檢閱和編輯政策文件。

1. 政策 JSON 會顯示在下列範例中。在 `"Resource"`元素中，將 取代`region:account`為每個`Resource`值 AWS 帳戶 中的 AWS 區域 和 。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Receive"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topic/test/topic"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Subscribe"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topicfilter/test/topic"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Connect"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:client/test-*"
               ]
           }
       ]
   }
   ```

------
#### [ Linux/macOS ]

**在 Linux/macOS 上執行範本指令碼**

1. 在命令列視窗中，導覽至 SDK 使用這些命令所建立的 `~/aws-iot-device-sdk-python-v2/samples/node/pub_sub` 目錄。

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   ```

1. 在您的命令列視窗中，按照指示取代 *your-iot-endpoint* 並執行此命令。

   ```
   python3 pubsub.py --endpoint your-iot-endpoint --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key
   ```

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

**在 Windows PC 上執行範例應用程式**

1. 在命令列視窗中，導覽至 SDK 所建立的 `%USERPROFILE%\aws-iot-device-sdk-python-v2\samples` 目錄，然後使用這些命令來安裝範例應用程式。

   ```
   cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
   ```

1. 在您的命令列視窗中，按照指示取代 *your-iot-endpoint* 並執行此命令。

   ```
   python3 pubsub.py --endpoint your-iot-endpoint --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key
   ```

------

範例指令碼：

1. 連線至 AWS IoT Core 您帳戶的 。

1. 訂閱訊息主題 **test/topic**，並顯示其收到關於該主題的訊息。

1. 將 10 則訊息發佈至主題 **test/topic**。

1. 顯示類似下列內容的輸出：

```
Connected!
Subscribing to topic 'test/topic'...
Subscribed with QoS.AT_LEAST_ONCE
Sending 10 message(s)
Publishing message to topic 'test/topic': Hello World! [1]
Received message from topic 'test/topic': b'"Hello World! [1]"'
Publishing message to topic 'test/topic': Hello World! [2]
Received message from topic 'test/topic': b'"Hello World! [2]"'
Publishing message to topic 'test/topic': Hello World! [3]
Received message from topic 'test/topic': b'"Hello World! [3]"'
Publishing message to topic 'test/topic': Hello World! [4]
Received message from topic 'test/topic': b'"Hello World! [4]"'
Publishing message to topic 'test/topic': Hello World! [5]
Received message from topic 'test/topic': b'"Hello World! [5]"'
Publishing message to topic 'test/topic': Hello World! [6]
Received message from topic 'test/topic': b'"Hello World! [6]"'
Publishing message to topic 'test/topic': Hello World! [7]
Received message from topic 'test/topic': b'"Hello World! [7]"'
Publishing message to topic 'test/topic': Hello World! [8]
Received message from topic 'test/topic': b'"Hello World! [8]"'
Publishing message to topic 'test/topic': Hello World! [9]
Received message from topic 'test/topic': b'"Hello World! [9]"'
Publishing message to topic 'test/topic': Hello World! [10]
Received message from topic 'test/topic': b'"Hello World! [10]"'
10 message(s) received.
Disconnecting...
Disconnected!
```

若在執行範例應用程式時發生問題，請檢閱 [對範例應用程式的問題進行故障診斷](gs-device-troubleshoot.md)。

您也可以將 `--verbosity Debug` 參數新增至命令列，以便範例應用程式顯示有關其正在做什麼的詳細訊息。該資訊可能會協助您更正問題。

## 在 AWS IoT 主控台中檢視來自範例應用程式的訊息
<a name="gs-pc-view-msg"></a>

您可以在範例應用程式的訊息透過訊息代理程式傳遞時看到這些訊臮，方法為使用 **AWS IoT 主控台**中的 **MQTT test client** (MQTT 測試用戶端)。

**檢視範例應用程式所發佈的 MQTT 訊息**

1. 檢閱 [使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)。這有助於您了解如何使用 **AWS IoT 主控台**中的 **MQTT 測試用戶端**，在 MQTT 訊息通過訊息代理程式時，檢視訊息。

1. 在 **AWS IoT 主控台**中開啟 **MQTT 測試用戶端**。

1. 在 **Subscribe to a topic** (訂閱主題) 中，訂閱主題 **test/topic**。

1. 在您的命令列視窗中，再次執行範例應用程式，並在 **AWS IoT 主控台**的 **MQTT client** (MQTT 用戶端) 中觀看訊息。

------
#### [ Linux/macOS ]

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic test/topic --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

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

   ```
   cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
   python3 pubsub.py --topic test/topic --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key --endpoint your-iot-endpoint
   ```

------

如需 MQTT 和 如何 AWS IoT Core 支援通訊協定的詳細資訊，請參閱 [MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html)。

## 在 Python 中執行共享訂閱範例
<a name="gs-pc-shared-subscription-example"></a>

AWS IoT Core 同時支援 MQTT 3 和 MQTT 5 [的共用訂閱](mqtt.md#mqtt5-shared-subscription)。共享訂閱允許多個用戶端共享一個主題的訂閱，而且只有一個用戶端會使用隨機分佈接收發佈至該主題的訊息。若要使用共享訂閱，用戶端會訂閱共享訂閱的[主題篩選條件](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters)：`$share/{ShareName}/{TopicFilter}`。

**設定政策並執行共享訂閱範例**

1. 若要執行共享訂閱範例，您必須依照 [MQTT 5 共享訂閱](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/main/samples/mqtt5_shared_subscription.md#mqtt5-shared-subscription)中所述來設定物件的政策。

1. 若要執行共享訂閱，請執行下列命令。

------
#### [ Linux/macOS ]

**在 Linux/macOS 上執行範本指令碼**

   1. 在命令列視窗中，導覽至 SDK 使用這些命令所建立的 `~/aws-iot-device-sdk-python-v2/samples` 目錄。

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples
      ```

   1. 在您的命令列視窗中，按照指示取代 *your-iot-endpoint* 並執行此命令。

      ```
      python3 mqtt5_shared_subscription.py --endpoint your-iot-endpoint --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --group_identifier consumer
      ```

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

**在 Windows PC 上執行範例應用程式**

   1. 在命令列視窗中，導覽至 SDK 所建立的 `%USERPROFILE%\aws-iot-device-sdk-python-v2\samples` 目錄，然後使用這些命令來安裝範例應用程式。

      ```
      cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
      ```

   1. 在您的命令列視窗中，按照指示取代 *your-iot-endpoint* 並執行此命令。

      ```
      python3 mqtt5_shared_subscription.py --endpoint your-iot-endpoint --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key --group_identifier consumer
      ```

------
**注意**  
執行範例 (例如 `--group_identifier consumer`) 時，您可以根據需求選擇性地指定群組識別碼。如果您沒有指定一個，則 `python-sample` 是預設群組識別碼。

1. 此命令列的輸出如下所示：

   ```
   Publisher]: Lifecycle Connection Success
   [Publisher]: Connected
   Subscriber One]: Lifecycle Connection Success
   [Subscriber One]: Connected
   Subscriber Two]: Lifecycle Connection Success
   [Subscriber Two]: Connected
   [Subscriber One]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber One]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>]
   [Subscriber Two]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber Two]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>]
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [1]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [2]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [3]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [4]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [5]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [6]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [7]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [8]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [9]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [10]"'
   [Subscriber One]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber One]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code: [<UnsubackReasonCode.SUCCESS: 0>]
   [Subscriber Two]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber Two]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code [<UnsubackReasonCode.SUCCESS: 0>]
   Publisher]: Lifecycle Disconnected
   [Publisher]: Lifecycle Stopped
   [Publisher]: Fully stopped
   Subscriber One]: Lifecycle Disconnected
   [Subscriber One]: Lifecycle Stopped
   [Subscriber One]: Fully stopped
   Subscriber Two]: Lifecycle Disconnected
   [Subscriber Two]: Lifecycle Stopped
   [Subscriber Two]: Fully stopped
   Complete!
   ```

1. 在 **AWS IoT 主控台**中開啟 **MQTT 測試用戶端**。在**訂閱主題**中，訂閱共享訂閱的主題，例如：`$share/consumer/test/topic`。執行範例 (例如 `--group_identifier consumer`) 時，您可以根據需求指定群組識別碼。如果您未指定群組識別碼，則預設值為 `python-sample`。如需詳細資訊，請參閱來自《AWS IoT Core 開發人員指南》**中的 [MQTT 5 共享訂閱 Python 範例](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/main/samples/mqtt5_shared_subscription.md#mqtt5-shared-subscription)和[共享訂閱](mqtt.md#mqtt5-shared-subscription)。

   在您的命令列視窗中，再次執行範例應用程式，並在 **AWS IoT 主控台**的 **MQTT 測試用戶端**，以及命令列中觀看訊息的分佈。  
![\[共用訂閱輸出頁面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/shared-subscription-output.png)

# 連接 Raspberry Pi 或其他裝置
<a name="connecting-to-existing-device"></a>

在本節中，我們將設定 Raspberry Pi 以搭配 使用 AWS IoT。如果您有另一個想要連接的裝置，Raspberry Pi 的指示會包括參考資料，其可以協助您調整這些指示以適用您的裝置。

這通常約需 20 分鐘，但是如果您有許多要安裝的系統軟體升級，則所需時間會更長。

**Topics**
+ [設定您的裝置](#gs-device-prereqs)
+ [安裝 AWS IoT 裝置 SDK 所需的工具和程式庫](#gs-device-sdk-tools)
+ [安裝 AWS IoT 裝置 SDK](#gs-device-install-sdk)
+ [安裝並執行範例應用程式](#gs-device-node-app-run)
+ [在 AWS IoT 主控台中檢視來自範例應用程式的訊息](#gs-device-view-msg)

**重要**  
調整這些指示以適用其他裝置和作業系統可能是一項艱鉅的挑戰。您必須充分了解您的裝置，才能解譯這些指示並將其套用至您的裝置。  
如果您在設定裝置時遇到困難 AWS IoT，可以嘗試其他裝置選項做為替代方案，例如 [使用 Amazon EC2 建立虛擬裝置](creating-a-virtual-thing.md)或 [使用您的 Windows 或 Linux PC 或 Mac 做為 AWS IoT 裝置](using-laptop-as-device.md)。

## 設定您的裝置
<a name="gs-device-prereqs"></a>

此步驟的目標就是收集您設定裝置所需的資訊，使其可以啟動作業系統 (OS)、連接至網際網路，並可讓您在命令列界面與其互動。

為了完成本教學，您需要以下項目：
+  AWS 帳戶。若您沒有帳戶，請完成 [設定 AWS 帳戶](setting-up.md) 所述的步驟，然後再繼續。
+ [Raspberry Pi 3 代 B 型](https://www.raspberrypi.com/products/)或更新的型號。這可能適用於較早版本的 Raspberry Pi，但尚未對其進行測試。
+ [Raspberry Pi OS (32 位元)](https://www.raspberrypi.com/software/operating-systems/) 或更新版本。我們建議您使用最新版本的 Raspberry Pi 作業系統。較早版本的 OS 可能適用，但尚未對其進行測試。

  若要執行此範例，您不需要安裝具有圖形使用者界面 (GUI) 的桌面；但是，如果您是初次使用 Raspberry Pi，而且您的 Raspberry Pi 支援它，使用具有 GUI 的桌面可能會更輕鬆。
+ 乙太網路或 Wi-Fi 連線。
+ 裝置所需的鍵盤、滑鼠、顯示器、纜線、電源供應器和其他硬體。

**重要**  
在您繼續下一個步驟之前，您的裝置必須已安裝、設定和執行作業系統。裝置必須連接至網際網路，而且您必須能夠使用其命令列界面存取裝置。可以透過直接連接的鍵盤、滑鼠和顯示器，或透過 SSH 終端機遠端界面存取命令列。

 如果您是在具有圖形使用者界面 (GUI) 的 Raspberry Pi 上執行作業系統，請在裝置上開啟終端機視窗，並在該視窗中執行下列指示。否則，如果您是使用遠端終端機 (例如 PuTTY) 連接到您的裝置，請開啟您裝置的遠端終端機並使用該終端機。

## 安裝 AWS IoT 裝置 SDK 所需的工具和程式庫
<a name="gs-device-sdk-tools"></a>

安裝 AWS IoT 裝置 SDK 和範本程式碼之前，請確定您的系統是最新的，並具有安裝 SDKs所需的工具和程式庫。

1. 

**更新作業系統並安裝必要的程式庫**  
安裝 AWS IoT 裝置 SDK 之前，請在裝置上的終端機視窗中執行這些命令，以更新作業系統並安裝所需的程式庫。

   ```
   sudo apt-get update
   ```

   ```
   sudo apt-get upgrade
   ```

   ```
   sudo apt-get install cmake
   ```

   ```
   sudo apt-get install libssl-dev
   ```

1. 

**安裝 Git**  
如果您裝置的作業系統未安裝 Git，您必須安裝它才能安裝適用於 JavaScript 的 AWS IoT 裝置 SDK。

   1. 執行此命令來測試看看是否已安裝 Git。

      ```
      git --version
      ```

   1. 如果上一個命令傳回 Git 版本，表示已安裝 Git，而且您可以跳到步驟 3。

   1. 若在執行 **git** 命令時顯示錯誤，請執行此命令來安裝 Git。

      ```
      sudo apt-get install git
      ```

   1. 執行此命令來再次測試看看是否已安裝 Git。

      ```
      git --version
      ```

   1. 如果已安裝 Git，請繼續進行下一節。如果未安裝，請在繼續之前疑難排解並更正錯誤。您需要 Git 才能安裝適用於 JavaScript 的 AWS IoT 裝置 SDK。

## 安裝 AWS IoT 裝置 SDK
<a name="gs-device-install-sdk"></a>

安裝 AWS IoT 裝置 SDK。

------
#### [ Python ]

在本節中，您將在裝置上安裝 Python、其開發工具和適用於 Python 的 AWS IoT 裝置 SDK。這些指示適用於執行最新 Raspberry Pi OS 的 Raspberry Pi。若有其他裝置或正在使用其他作業系統，您可能需要調整這些指示以適用您的裝置。

1. 

**安裝 Python 及其開發工具**  
適用於 Python 的 AWS IoT 裝置 SDK 需要在 Raspberry Pi 上安裝 Python v3.5 或更新版本。

   在裝置的終端機視窗中，執行這些命令。

   1. 執行此命令以判定您裝置上安裝的 Python 版本。

      ```
      python3 --version
      ```

      如果已安裝 Python，會顯示其版本。

   1. 如果顯示的版本為 `Python 3.5` 或更新版本，您可以跳到步驟 2。

   1. 如果顯示的版本小於 `Python 3.5`，您可以執行此命令來安裝正確的版本。

      ```
      sudo apt install python3
      ```

   1. 執行此命令以確認現在已安裝正確版本的 Python。

      ```
      python3 --version
      ```

1. 

**測試 pip3**  
在裝置的終端機視窗中，執行這些命令。

   1. 執行此命令以查看是否已安裝 **pip3**。

      ```
      pip3 --version
      ```

   1. 如果命令傳回版本編號，表示已安裝 **pip3**，而且您可以跳到步驟 3。

   1. 如果上一個命令傳回錯誤，請執行此命令來安裝 **pip3**。

      ```
      sudo apt install python3-pip
      ```

   1. 執行此命令以查看是否已安裝 **pip3**。

      ```
      pip3 --version
      ```

1. 

**安裝適用於 Python 的目前 AWS IoT 裝置 SDK**  
安裝適用於 Python 的 AWS IoT 裝置 SDK，並將範例應用程式下載至您的裝置。

   在您的裝置上，執行這些命令。

   ```
   cd ~
   python3 -m pip install awsiotsdk
   ```

   ```
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
#### [ JavaScript ]

在本節中，您將在裝置上安裝 Node.js、npm 套件管理員和適用於 JavaScript 的 AWS IoT 裝置開發套件。這些指示適用於執行 Raspberry Pi OS 的 Raspberry Pi。若有其他裝置或正在使用其他作業系統，您可能需要調整這些指示以適用您的裝置。

1. 

**安裝最新版本的 Node.js**  
適用於 JavaScript 的 AWS IoT 裝置 SDK 需要將 Node.js 和 npm 套件管理員安裝在 Raspberry Pi 上。

   1. 輸入此命令，下載最新版本的 Node 儲存庫。

      ```
      cd ~
      curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
      ```

   1. 安裝 Node 和 npm。

      ```
      sudo apt-get install -y nodejs
      ```

   1. 驗證 Node 的安裝。

      ```
      node -v
      ```

      確認命令顯示 Node 版本。本教學課程需要 Node v10.0 或更新版本。如果未顯示 Node 版本，請嘗試再次下載 Node 儲存庫。

   1. 驗證 npm 的安裝。

      ```
      npm -v
      ```

      確認命令顯示 npm 版本。如果未顯示 npm 版本，請嘗試再次安裝 Node 和 npm。

   1. 重新啟動裝置。

      ```
      sudo shutdown -r 0
      ```

      在裝置重新啟動之後繼續。

1. 

**安裝適用於 JavaScript 的 AWS IoT 裝置 SDK**  
在 Raspberry Pi 上安裝適用於 JavaScript 的 AWS IoT 裝置 SDK。

   1. 將適用於 JavaScript 的 AWS IoT 裝置 SDK 儲存庫複製到*主*`aws-iot-device-sdk-js-v2`目錄的 目錄中。在 Raspberry Pi 上，*home* 目錄是 `~/`，用作下列命令中的 *home* 目錄。如果您的裝置對 *home* 目錄使用不同的路徑，您必須在下列命令中將 `~/` 取代為您裝置的正確路徑。

      這些命令會建立 `~/aws-iot-device-sdk-js-v2` 目錄並將 SDK 程式碼複製到其中。

      ```
      cd ~
      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
      ```

   1. 變更為您在上述步驟中建立的 `aws-iot-device-sdk-js-v2` 目錄，並執行 `npm install` 以安裝 SDK。命令 `npm install` 將會呼叫 `aws-crt` 程式庫建置，可能需要幾分鐘時間才能完成。

      ```
      cd ~/aws-iot-device-sdk-js-v2
      npm install
      ```

------

## 安裝並執行範例應用程式
<a name="gs-device-node-app-run"></a>

在本節中，您將安裝並執行 AWS IoT 裝置開發套件中找到`pubsub`的範例應用程式。此應用程式顯示您的裝置如何使用 MQTT 程式庫來發佈和訂閱 MQTT 訊息。範例應用程式會訂閱主題 `topic_1`、將 10 則訊息發佈至該主題，以及在從訊息代理程式接收訊息時顯示這些訊息。

**安裝憑證檔案**  
範例應用程式需要驗證裝置是否安裝在裝置上的憑證檔案。

**安裝範例應用程式的裝置憑證檔案**

1. 執行這些命令，在您的 *home* 目錄中建立 `certs` 子目錄。

   ```
   cd ~
   mkdir certs
   ```

1. 將私有金鑰、裝置憑證，以及您先前在 [建立 AWS IoT 資源](create-iot-resources.md) 中建立的根憑證授權機構憑證複製到 `~/certs` 目錄中。

   將憑證檔案複製到裝置的方式取決於裝置和作業系統，此處不會加以描述。不過，如果您的裝置支援圖形使用者界面 (GUI) 且具有網頁瀏覽器，您可以從裝置的網頁瀏覽器執行 [建立 AWS IoT 資源](create-iot-resources.md) 中所述的程序，將產生的檔案直接下載到您的裝置。

   下節命令假設您的金鑰和憑證檔案儲存在裝置上，如下表所示。  
**憑證檔案名稱**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/connecting-to-existing-device.html)

若要執行範例應用程式，您需要以下資訊：


**應用程式參數值**  

|  參數  |  可在哪裡找到值  | 
| --- | --- | 
| your-iot-endpoint |  於 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中，依序選擇 **Manage** (管理) 和 **Things** (物件)。 在選單的設定**** AWS IoT 頁面上。您的端點會顯示在 **Device data endpoint** (裝置資料端點) 區段中。  | 

*your-iot-endpoint* 值的格式為：`endpoint_id-ats.iot.region.amazonaws.com`，例如 `a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`。

------
#### [ Python ]

**安裝並執行範例應用程式**

1. 導覽至範例應用程式目錄。

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   ```

1. 在命令列視窗中，按照指示取代 *your-iot-endpoint* 並執行此命令。

   ```
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. 請注意，範例應用程式：

   1. 連線至您帳戶的 AWS IoT 服務。

   1. 訂閱訊息主題 **topic\$11**，並顯示其收到關於該主題的訊息。

   1. 將 10 則訊息發佈至主題 **topic\$11**。

   1. 顯示類似下列內容的輸出：

   ```
   Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'...
   Connected!
   Subscribing to topic 'topic_1'...
   Subscribed with QoS.AT_LEAST_ONCE
   Sending 10 message(s)
   Publishing message to topic 'topic_1': Hello World! [1]
   Received message from topic 'topic_1': b'Hello World! [1]'
   Publishing message to topic 'topic_1': Hello World! [2]
   Received message from topic 'topic_1': b'Hello World! [2]'
   Publishing message to topic 'topic_1': Hello World! [3]
   Received message from topic 'topic_1': b'Hello World! [3]'
   Publishing message to topic 'topic_1': Hello World! [4]
   Received message from topic 'topic_1': b'Hello World! [4]'
   Publishing message to topic 'topic_1': Hello World! [5]
   Received message from topic 'topic_1': b'Hello World! [5]'
   Publishing message to topic 'topic_1': Hello World! [6]
   Received message from topic 'topic_1': b'Hello World! [6]'
   Publishing message to topic 'topic_1': Hello World! [7]
   Received message from topic 'topic_1': b'Hello World! [7]'
   Publishing message to topic 'topic_1': Hello World! [8]
   Received message from topic 'topic_1': b'Hello World! [8]'
   Publishing message to topic 'topic_1': Hello World! [9]
   Received message from topic 'topic_1': b'Hello World! [9]'
   Publishing message to topic 'topic_1': Hello World! [10]
   Received message from topic 'topic_1': b'Hello World! [10]'
   10 message(s) received.
   Disconnecting...
   Disconnected!
   ```

   若在執行範例應用程式時發生問題，請檢閱 [對範例應用程式的問題進行故障診斷](gs-device-troubleshoot.md)。

   您也可以將 `--verbosity Debug` 參數新增至命令列，以便範例應用程式顯示有關其正在做什麼的詳細訊息。這些資訊可能會提供您更正問題所需的協助。

------
#### [ JavaScript ]

**安裝並執行範例應用程式**

1. 在命令列視窗中，導覽至 SDK 所建立的 `~/aws-iot-device-sdk-js-v2/samples/node/pub_sub` 目錄，然後使用這些命令來安裝範例應用程式。命令 `npm install` 將會呼叫 `aws-crt` 程式庫建置，可能需要幾分鐘時間才能完成。

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   npm install
   ```

1. 在命令列視窗中，按照指示取代 *your-iot-endpoint* 並執行此命令。

   ```
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. 請注意，範例應用程式：

   1. 連線至您帳戶的 AWS IoT 服務。

   1. 訂閱訊息主題 **topic\$11**，並顯示其收到關於該主題的訊息。

   1. 將 10 則訊息發佈至主題 **topic\$11**。

   1. 顯示類似下列內容的輸出：

   ```
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":1}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":2}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":3}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":4}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":5}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":6}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":7}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":8}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":9}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":10}
   ```

   若在執行範例應用程式時發生問題，請檢閱 [對範例應用程式的問題進行故障診斷](gs-device-troubleshoot.md)。

   您也可以將 `--verbosity Debug` 參數新增至命令列，以便範例應用程式顯示有關其正在做什麼的詳細訊息。這些資訊可能會提供您更正問題所需的協助。

------

## 在 AWS IoT 主控台中檢視來自範例應用程式的訊息
<a name="gs-device-view-msg"></a>

您可以在範例應用程式的訊息透過訊息代理程式傳遞時看到這些訊臮，方法為使用 **AWS IoT 主控台**中的 **MQTT test client** (MQTT 測試用戶端)。

**檢視範例應用程式所發佈的 MQTT 訊息**

1. 檢閱 [使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)。這有助於您了解如何使用 **AWS IoT 主控台**中的 **MQTT 測試用戶端**，在 MQTT 訊息通過訊息代理程式時，檢視訊息。

1. 在 **AWS IoT 主控台**中開啟 **MQTT 測試用戶端**。

1. 訂閱主題 **topic\$11**。

1. 在您的命令列視窗中，再次執行範例應用程式，並在 **AWS IoT 主控台**的 **MQTT client** (MQTT 用戶端) 中觀看訊息。

------
#### [ Python ]

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------
#### [ JavaScript ]

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------

# 對範例應用程式的問題進行故障診斷
<a name="gs-device-troubleshoot"></a>

如果您在嘗試執行範例應用程式時遇到錯誤，以下是一些需要檢查的事項。

## 檢查憑證
<a name="gs-device-ts-step-1"></a>

如果憑證未處於作用中狀態， AWS IoT 將不會接受任何用於授權的連線嘗試。建立憑證時，很容易忽略 **Activate** (啟用) 按鈕。幸好，您可以從 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)啟用憑證。

**檢查您的憑證是否啟用**

1. 在 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home) 的左側選單中，依序選擇 **Secure** (安全) 和 **Certificates** (憑證)。

1. 在憑證清單中，找出您為練習建立的憑證，並在 **Status** (狀態) 欄位中檢查其狀態。

   如果您不記得憑證的名稱，請檢查是否有任何為 **Inactive** (非作用中) 的憑證，以查看它們是否可能是您正在使用的憑證。

   選擇清單中的憑證來開啟其詳細資訊頁面。在詳細資訊頁面中，您可以看到其 **Create date** (建立日期) 來協助您識別憑證。

1. **若要啟動非作用中的憑證**，請從憑證的詳細資訊頁面中，選擇 **Actions** (動作)，然後選擇 **Activate** (啟用)。

如果您找到正確的憑證且為作用中，但執行範例應用程式時仍有問題，請檢查其政策，如下一個步驟所述。

您也可以嘗試遵循 [建立物件](create-iot-resources.md#create-aws-thing) 中的步驟，建立新的物件和新的憑證。如果建立新的物件，您需要給它新的物件名稱，並將新的憑證檔案下載到您的裝置。

## 檢查連接至憑證的政策
<a name="gs-device-ts-step-2"></a>

政策授權 中的動作 AWS IoT。如果用來連接至 AWS IoT 的憑證沒有政策，或者沒有允許它連接的政策，則即使憑證處於作用中狀態，連線也會遭到拒絕。

**檢查連接至憑證的政策**

1. 按照上一個項目中所述尋找憑證，並開啟其詳細資訊頁面。

1. 於憑證詳細資訊頁面的左側選單中，選擇 **Policies (政策)**，查看連接至憑證的政策。

1. 如果沒有任何政策連接至憑證，請選擇 **Actions** (動作) 選單，然後選擇 **Attach policy** (連接政策) 來新增一個政策。

   選擇您先前在[建立 AWS IoT 資源](create-iot-resources.md)中建立的政策。

1. 若有連接的政策，請選擇政策圖標來開啟其詳細資訊頁面。

   在詳細資訊頁面中，檢閱 **Policy document** (政策文件)，以確定它與您在 [建立 AWS IoT 政策](create-iot-resources.md#create-iot-policy) 中建立的政策包含相同的資訊。

## 檢查命令列
<a name="gs-device-ts-step-3"></a>

確定您已針對系統使用正確的命令列。在 Linux 和 macOS 系統上使用的命令通常與在 Windows 系統上使用的命令不同。

## 檢查端點地址
<a name="gs-device-ts-step-4"></a>

檢閱您輸入的命令，然後仔細檢查命令中的端點地址是否為 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中的端點地址。

## 檢查憑證檔案的檔案名稱
<a name="gs-device-ts-step-5"></a>

將您輸入至命令中的檔案名稱與 `certs` 目錄中的憑證檔案名稱進行比較。

有些系統可能需要以引號括住檔案名稱才能正常運作。

## 檢查 SDK 安裝
<a name="gs-device-ts-step-6"></a>

確定您的 SDK 安裝完成且正確。

如有疑問，請在裝置上重新安裝 SDK。在大多數情況下，尋找名為**安裝適用於 **SDK 語言**的 AWS IoT 裝置 SDK** 教學課程章節並再次遵循程序至關重要。

如果您是使用**適用於 JavaScript 的AWS IoT 裝置 SDK**，請記住先安裝範例應用程式，然後再嘗試執行它們。安裝 SDK 不會自動安裝範例應用程式。在安裝了 SDK 之後必須手動安裝範例應用程式。

# 使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息
<a name="view-mqtt-messages"></a>

本節說明如何在 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中使用 AWS IoT MQTT 測試用戶端來監看由 傳送和接收的 MQTT 訊息 AWS IoT。本節中使用的範例與 [AWS IoT Core 教學課程入門](iot-gs.md) 中使用的範例相關；不過，您可以將範例中使用的 *topicName* 取代為 IoT 解決方案所使用的任何[主題名稱或主題篩選條件](topics.md)。

裝置會發佈[主題](topics.md)識別的 MQTT 訊息，以向其傳達其狀態 AWS IoT，並 AWS IoT 發佈 MQTT 訊息，以通知裝置和應用程式變更和事件。您可以使用 MQTT 用戶端來訂閱這些主題，並在發生訊息時觀看它們。您也可以使用 MQTT 測試用戶端，將 MQTT 訊息發佈至 中的訂閱裝置和服務 AWS 帳戶。

**Topics**
+ [在 MQTT 用戶端中檢視 MQTT 訊息](#view-mqtt-subscribe)
+ [從 MQTT 用戶端發佈 MQTT 訊息](#view-mqtt-publish)
+ [在 MQTT 用戶端中測試共享訂閱](#view-mqtt-shared-subscriptions)

## 在 MQTT 用戶端中檢視 MQTT 訊息
<a name="view-mqtt-subscribe"></a>

下列程序說明如何訂閱裝置發佈訊息的特定 MQTT 主題，並在 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中檢視這些訊息。

**在 MQTT 測試用戶端中檢視 MQTT 訊息**

1. 在 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中的左側選單中，依序選擇 **Test** (測試) 和 **MQTT test client** (MQTT 測試用戶端)。  
![\[從左側導覽的主控台功能表中選擇 MQTT 測試用戶端。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/choose-test.png)

1. 在 **Subscribe to a topic** (訂閱主題) 索引標籤中，輸入 *topicName* 來訂閱裝置發佈的主題。如需入門範例應用程式，請訂閱 **\$1**，其會訂閱所有訊息主題。

   繼續入門範例，在 **Subscribe to a topic** (訂閱主題) 標籤的 **Topic filter** (主題篩選條件) 欄位中，輸入 **\$1**，然後選擇 **Subscribe** (訂閱)。  
![\[訂閱主題索引標籤。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/subscribe-button-topic.png)

   主題訊息日誌頁面 **\$1** 即會開啟，而且 **\$1** 會出現在 **Subscriptions** (訂閱) 清單中。如果您在 中設定的裝置[設定您的裝置](configure-device.md)正在執行範例程式，您應該會在 **\$1** 訊息日誌 AWS IoT 中看到傳送至 的訊息。收到具有訂閱主題的訊息時，訊息日誌項目會出現在**發佈**區段下方 AWS IoT。  
![\[顯示主題的 區段已成功訂閱。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/subscribed-button-topic.png)

1. 在 **\$1** 訊息日誌頁面上，您也可以將訊息發佈至主題，但您必須指定主題名稱。您無法發佈至 **\$1** 主題。

   發佈至已訂閱主題的訊息會在收到時出現在訊息日誌中，最近的訊息首先出現。

### 疑難排解 MQTT 訊息
<a name="view-mqtt-trouble"></a>

**使用萬用字元主題篩選條件**  
如果您的訊息未如預期般顯示在訊息日誌中，請嘗試訂閱萬用字元主題篩選條件，如 [主題名稱篩選條件](topics.md#topicfilters) 中所述。MQTT 多層萬用字元主題篩選條件是雜湊或井號 (`#`)，並且可以用作 **Subscription topic** (訂閱主題) 欄位中的主題篩選條件。

訂閱 `#` 主題篩選條件會訂閱訊息代理程式接收的每個主題。您可以縮小篩選範圍，方法是將主題篩選條件路徑的元素取代為 `#` 多層萬用字元或 '\$1' 單層萬用字元。

**在主題篩選條件中使用萬用字元時**
+ 多層萬用字元必須是主題篩選條件中的最後一個字元。
+ 主題篩選條件路徑的每個主題層只能有一個單層萬用字元。

例如：


|  主題篩選條件  |  顯示訊息與  | 
| --- | --- | 
|   `#`   |   任何主題名稱   | 
|   `topic_1/#`   |   開頭為 `topic_1/` 的主題名稱  | 
|   `topic_1/level_2/#`   |   開頭為 `topic_1/level_2/` 的主題名稱  | 
|   `topic_1/+/level_3`   |   開頭為 `topic_1/`、結尾為 `/level_3`，並且在兩者之間有任何值之一個元素的主題名稱。  | 

如需主題篩選條件的詳細資訊，請參閱 [主題名稱篩選條件](topics.md#topicfilters)。

**檢查主題名稱錯誤**  
MQTT 主題和主題篩選條件會區分大小寫。例如，如果您的裝置正在將訊息發佈至 `Topic_1` (具有大寫 *T*) 而不是 `topic_1` (您已訂閱的主題)，其訊息將不會出現在 MQTT 測試用戶端中。不過，訂閱萬用字元主題篩選條件會顯示裝置正在發佈訊息，而且您可以看到它使用的主題名稱不是您預期的。

## 從 MQTT 用戶端發佈 MQTT 訊息
<a name="view-mqtt-publish"></a>

**將訊息發佈至 MQTT 主題**

1. 在 MQTT 測試用戶端頁面的 **Publish to a topic** (發佈到主題) 標籤中，於 **Topic name** (主題名稱) 欄位中輸入您訊息的 *topicName*。在此範例中，使用 **my/topic**。
**注意**  
無論是在 MQTT 測試用戶端還是在系統實作中使用主題名稱，請不要在這些主題名稱中使用個人識別資訊。主題名稱可以出現在未加密的通訊和報告中。

1. 在訊息承載視窗中，輸入下列 JSON：

   ```
   {
       "message": "Hello, world",
       "clientType": "MQTT test client"
   }
   ```

1. 選擇 **Publish** (發佈) 以將您的訊息發佈至 AWS IoT。
**注意**  
確定您已訂閱 **my/topic** 主題，然後再發佈您的訊息。  
![\[發佈至主題索引標籤。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/publish-to-topic.png)

1. 在 **Subscriptions** (訂閱) 清單中，選擇 **my/topic** 來查看訊息。您應該會在發佈訊息承載視窗下方看到訊息出現在 MQTT 測試用戶端中。  
![\[已收到顯示已發佈主題的畫面。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/publish-to-topic-received.png)

您可以變更 *Topic name* (主題名稱) 欄位中的 **topicName**，然後選擇 **Publish** (發佈) 按鈕，以將 MQTT 郵件發佈至其他主題。

**重要**  
當您利用重疊主題建立多個訂閱時 (例如 probe1/temperature 和 probe1/\$1)，同時發布到與兩個訂閱相符的主題的單一訊息，有可能會多次交付，每個重疊訂閱交付一次。

## 在 MQTT 用戶端中測試共享訂閱
<a name="view-mqtt-shared-subscriptions"></a>

本節說明如何使用[AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中的 AWS IoT MQTT 用戶端來觀看 AWS IoT 使用共用訂閱傳送和接收的 MQTT 訊息。 [共用訂閱](mqtt.md#mqtt5-shared-subscription) 允許多個用戶端共用訂閱主題，只有一個用戶端使用隨機分佈接收發佈至該主題的訊息。若要模擬共用相同訂閱的多個 MQTT 用戶端 （在此範例中為兩個 MQTT 用戶端），您可以從多個 Web 瀏覽器在[AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中開啟 AWS IoT MQTT 用戶端。本節中使用的範例與 [AWS IoT Core 教學課程入門](iot-gs.md) 中使用的範例無關。如需詳細資訊，請參閱[共享訂閱](mqtt.md#mqtt5-shared-subscription)。

**共享 MQTT 主題的訂閱**

1. 在 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)的導覽窗格中，選擇**測試**，然後選擇 **MQTT 測試用戶端**。

1. 在 **Subscribe to a topic** (訂閱主題) 索引標籤中，輸入 *topicName* 來訂閱裝置發佈的主題。若要使用共享訂閱，請訂閱共享訂閱的主題篩選條件，如下所示：

   ```
   $share/{ShareName}/{TopicFilter}
   ```

   範例主題篩選條件可以是 **\$1share/group1/topic1**，其會訂閱訊息主題 **topic1**。  
![\[標籤顯示如何指定共用訂閱的主題篩選條件。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/shared-subscription-topicfilter.png)

1. 開啟另一個 Web 瀏覽器，然後重複步驟 1 和步驟 2。透過此方式，您模擬兩個共享相同訂閱 **\$1share/group1/topic1** 的不同 MQTT 客戶端。

1. 選擇 MQTT 用戶端，在**發佈到主題**標籤的**主題名稱**欄位中輸入您訊息的 *topicName*。在此範例中，使用 **topic1**。請嘗試發佈訊息幾次。從這兩個 MQTT 用戶端的**訂閱**清單中，您應該能夠看到用戶端使用隨機分佈接收訊息。在這個範例中，我們發佈相同的訊息 "Hello from AWS IoT console" 三次。左側的 MQTT 用戶端收到兩次訊息，右側的 MQTT 用戶端收到一次訊息。  
![\[共用訂閱會與兩個用戶端進行流程，以共用主題的訂閱，只有一個用戶端會使用隨機分佈接收發佈至該主題的訊息。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/shared_subscriptions_test.gif)