

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

无论您是物联网新手还是拥有多年经验，这些资源都提供了可以帮助您开始使用的 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)。
+ 使用 [Device Advisor](device-advisor.md) **测试和验证** 您的物联网设备，确保安全可靠的连接。
+ 使用诸如 [机群索引](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 Core 管理服务**管理**您的解决方案。
+ 使用 [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 服务将物联网设备连接到 AWS IoT 服务和其他 AWS 服务。 AWS IoT Core 包括设备网关和消息代理，它们连接和处理物联网设备与云之间的消息。

以下是您可以开始使用 AWS IoT Core 和的方法 AWS IoT。

![\[AWS IoT Core 入门游览地图。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/iot-gs-tour-map.png)


本节介绍 AWS IoT Core 以介绍其主要服务，并提供几个示例，说明如何将设备连接到设备 AWS IoT Core 并在设备之间传递消息。在设备和云端之间传递消息是每个物联网解决方案的基础，也是您的设备与其他 AWS 服务进行交互的方式。
+ 

**[设置 AWS 账户](setting-up.md)**  
在使用 AWS IoT 服务之前，必须先设置 AWS 账户。如果您自己已经有一个 AWS 账户 和一个 IAM 用户，则可以使用它们并跳过此步骤。
+ 

**[尝试快速连接教程](iot-quick-start.md)**  
如果您想快速入门 AWS IoT 并了解它在有限场景中的工作原理，那么本教程是最佳选择。在本教程中，你需要一台设备并在上面安装一些 AWS 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/注册。](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，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 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 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS 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 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](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构建的简单物联网解决方案的组成部分。本教程展示了物联网设备如何与 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_cn/iot/latest/developerguide/images/aws-iot-learn-home-demo.png)

1. 在 **AWS IoT 控制台教程**页面中，查看教程部分，然后在准备好继续时选择**开始部分**。

**以下各节介绍**AWS IoT 控制台教程**如何呈现这些 AWS IoT Core 功能：**
+ [连接物联网设备](#interactive-demo-part1)
+ [保存离线设备状态](#interactive-demo-part2)
+ [将设备数据路由到服务](#interactive-demo-part3)

## 连接物联网设备
<a name="interactive-demo-part1"></a>

了解物联网设备如何与之通信 AWS IoT Core。

![\[这是交 AWS IoT 互式教程的第一步。\]](http://docs.aws.amazon.com/zh_cn/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_cn/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_cn/iot/latest/developerguide/images/aws-iot-learn-demo-step-3.png)


此步骤中的动画显示了如何使用 AWS IoT 规则 AWS IoT Core 将数据从设备发送到其他 AWS 服务。 AWS IoT 规则订阅来自设备的特定消息，解释这些消息中的数据，并将解释后的数据路由到其他服务。在此示例中， 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 ，这是非常小的物联网解决方案的一部分。该设备可以是物联网设备，如 Raspberry Pi，也可以是运行 Linux、OS 和 OSX 或 Windows 的电脑。如果您要将远程广域网 (W LoRa AN) 设备连接到 AWS IoT，请参阅教程 [>将设备和网关连接到 LoRa WAN](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/lorawan-getting-started.html)。 AWS IoT Core 

如果您的设备支持可以运行 [AWS IoT 控制台](https://console.aws.amazon.com//iot/home)的浏览器，我们建议您在该设备上完成本教程。

**注意**  
如果您的设备没有兼容的浏览器，请在电脑上遵循本教程。当流程要求您下载文件时，请将其下载到您的电脑，然后使用 Secure Copy（SCP）或类似流程将下载的文件传输到您的设备。

本教程要求您的物联网设备与 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 主机主页的左侧，选择 **Connect，然后选择 Con** **nect 一台设备**。

![\[此 AWS IoT 控制台主页显示如何连接一台设备。\]](http://docs.aws.amazon.com/zh_cn/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_cn/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_cn/iot/latest/developerguide/images/aws-iot-learn-register-and-secure-your-device.png)

1. 在 **“选择平台和 SDK**” 部分，选择要使用的平台和 AWS IoT 设备 SDK 的语言。此示例使用 Linux/OSX 平台和 Python 软件开发工具包。请确保在目标设备上安装了 python3 和 pip3，再继续下一步。
**注意**  
请务必在控制台页面底部检查所选 SDK 所需的必备软件列表。  
您必须先在目标电脑上安装所需的软件，然后才能继续执行下一步。

   选择好平台和 Device SDK 语言后，选择 **Next**（下一步）。  
![\[使用 AWS IoT 控制台选择平台和 SDK。\]](http://docs.aws.amazon.com/zh_cn/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. 准备好继续后，请选择**下载连接套件**按钮为您之前选择的平台下载连接工具包。  
![\[这是用于下载证书文件的 AWS IoT 控制台页面。\]](http://docs.aws.amazon.com/zh_cn/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_cn/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_cn/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_cn/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)的[测试页面上打开 MQTT **测试**客户](https://console.aws.amazon.com//iot/home#/test)端。 AWS IoT 如果选择 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_cn/iot/latest/developerguide/images/aws-iot-learn-connect-complete_updated1.png)

1. 现在将显示您的 AWS IoT 快速连接教程摘要。  
![\[AWS IoT 控制台快速入门摘要页面。\]](http://docs.aws.amazon.com/zh_cn/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 控制台的**测试**页面上打开 [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 进一步探索并了解使其成为强大物联网解决方案平台的功能，请通过以下方式开始准备您的开发平台[AWS IoT Core 在动手教程中探索](iot-gs-first-thing.md)。

# 测试与设备数据端点的连接
<a name="iot-quick-start-test-connection"></a>

本主题介绍如何测试设备与您账户的*设备数据端点*的连接，该端点是物联网设备用于连接 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)中找到您的设备数据端点，以便测试与物联网设备的连接。

**查找设备数据端点**

1. 在 [AWS IoT 控制台](https://console.aws.amazon.com//iot/home)的**连接**部分，转到**域配置**。

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 或 Ubuntu：

      ```
      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)，然后下载**最新稳定**的安装程序。

   出现提示时，选择 “**打开方式**” DiskImageInstaller。

1. 在安装窗口中，将程序包移到 **Applications**（应用程序）文件夹。

1. 在**查找工具**中，找到**应用程序**文件夹中的 `nmap-xxxx-mpkg` 程序包，**Ctrl-click** 该程序包，然后选择**打开**以打开该程序包。

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>

此步骤使用所选端口测试物联网设备与设备数据端点的连接。

**测试设备数据端点和端口**

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` 没有返回成功输出，请检查端点值以确保您拥有正确的端点，然后检查设备与互联网的连接。

通过将步骤 1 中使用的端口 `8443` 替换为要测试的端口，您可以测试设备数据端点上的其他端口，例如主 HTTPS 端口 443。

# AWS IoT Core 在动手教程中探索
<a name="iot-gs-first-thing"></a>

在本教程中，您将安装软件并创建连接设备所需的 AWS IoT 资源， AWS IoT Core 以便设备可以发送和接收 MQTT 消息。 AWS IoT Core您将在 AWS IoT 控制台的 MQTT 客户端中看到这些消息。

您预计需要花费 20-30 分钟来完成本教程。如果您使用的是物联网设备或 Raspberry Pi，则您可能需要花费更长时间来完成本教程，因为您可能需要安装操作系统并配置设备。

![\[AWS IoT Core 页面入门。\]](http://docs.aws.amazon.com/zh_cn/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>

如果您不确定要选择哪个选项，请参照下表中列出的每个选项的优缺点来帮助您确定最适合的选项。


| Option | 这可能是一个不错的选择，如果： | 这可能不是一个好的选择，如果： | 
| --- | --- | --- | 
| [使用 Amazon EC2 创建虚拟设备](creating-a-virtual-thing.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/iot-gs-first-thing.html)  | 
| [使用你的 Windows、Linux 电脑或 Mac 作为 AWS IoT 设备](using-laptop-as-device.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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_cn/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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_cn/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 资源。如果您的设备支持 Web 浏览器，则在设备的 Web 浏览器上运行此流程可能会更容易，因为您可以将证书文件直接下载到您的设备上。如果您在另一台电脑上运行此流程，则需要先将证书文件复制到您的设备，然后才能为示例应用程序所用。

## 创建 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 policy**（创建策略）。

   如果您的账户有现有策略，请选择**创建策略**。

1. 在 **Create policy**（创建策略）页面上：

   1. 在 **Policy properties**（策略属性）部分，在 **Policy name**（策略名称）字段中，输入策略的名称（例如，**My\$1Iot\$1Policy**）。请勿在策略名称中使用个人身份信息。

   1. 在 **Policy document**（策略文档）部分，创建用于授予或拒绝资源访问 AWS IoT Core 操作的策略语句。要创建允许所有客户端执行 ****iot:Connect**** 的策略语句，请按照以下步骤操作：
      + 在 **Policy effect**（策略效果）字段中，选择 **Allow**（允许）。这允许将此策略附加到其证书的所有客户端执行 **Policy action**（策略操作）字段中列出的操作。
      + 在 **Policy action**（策略操作）字段中，选择策略操作，例如 ****iot:Connect****。策略操作是指设备在从设备 SDK 运行示例程序时需要权限才能执行的操作。
      + 在**策略资源**字段中，输入资源 Amazon 资源名称（ARN）或 **\$1**。用于选择任何客户端（设备）的 **\$1**。

      要为 ****iot:Receive****、****iot:Publish**** 和 ****iot:Subscribe**** 创建策略语句，请选择**添加新语句**并重复相关步骤。  
![\[创建策略的页面。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/gs-create-policy-new.png)
**注意**  
在此快速入门教程中，为了简单起见，将使用通配符 (\$1)。为了提高安全性，您应该指定客户端 ARN 而不是通配符作为资源，从而限定哪些客户端（设备）可以连接和发布消息。客户 ARNs 遵循这种格式:`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_cn/iot/latest/developerguide/create-iot-resources.html)

   1. 要为这些文件下载根 CA 文件，请选择根 CA 证书文件的 **Download**（下载）链接，该链接应与您使用的数据端点和加密套件类型相对应。在本教程中，请选择 **RSA 2048 bit key: Amazon Root CA 1**（RSA 2048 位密钥：Amazon Root CA 1）右侧的 **Download**（下载），然后下载 **RSA 2048 bit key: Amazon Root CA 1**（RSA 2048 位密钥：Amazon Root CA 1）证书文件。
**重要**  
您必须在离开此页之前保存证书文件。在控制台中离开此页面后，您将无法再访问证书文件。  
如果忘记下载在此步骤中创建的证书文件，则必须退出此控制台屏幕，转到控制台中的事物列表，删除您创建的事物对象，然后从头重新开始此流程。

   1.  选择**完成**。

完成此流程后，您应该在事物列表中看到新的事物对象。

# 配置您的设备
<a name="configure-device"></a>

本部分介绍如何配置设备以使其连接到 AWS IoT Core。如果你想开始使用 AWS IoT Core 但还没有设备，你可以使用 Amazon EC2 创建虚拟设备，也可以使用 Windows 电脑或 Mac 作为物联网设备。

选择最适合您尝试的设备选项 AWS IoT Core。当然，您可以尝试所有的内容，但一次只能尝试一项。如果您不确定哪个设备选项最适合您，请阅读有关如何选择[哪个设备选项最适合](iot-gs-first-thing.md#choosing-a-gs-system)的内容，然后返回此页。

**设备选项**
+ [使用 Amazon EC2 创建虚拟设备](creating-a-virtual-thing.md)
+ [使用你的 Windows、Linux 电脑或 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)
+ [安装适用于的 AWS IoT 设备 SDK JavaScript](#ec2-sdk)
+ [运行示例应用程序](#ec2-run-app)
+ [在 AWS IoT 控制台中查看来自示例应用程序的消息](#ec2-view-msg)

## 设置 Amazon EC2 实例
<a name="set-up-ec2"></a>

以下步骤介绍了如何创建一个 Amazon EC2 实例，以作为您的虚拟设备代替物理设备。

如果这是您首次创建 Amazon EC2 实例，您可能会发现 A [mazon EC2 Linux 实例入门](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. 在**应用程序和操作系统映像（Amazon 机器映像）**下，为您的实例选择一个 AMI 模板，例如 *Amazon Linux 2 AMI（HVM）*。请注意，此 AMI 标记为“符合条件的免费套餐”。

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. 在**实例**屏幕上，您可以查看启动状态。启动实例只需很短的时间。启动实例时，其初始状态为 `pending`。实例启动后，其状态变为 `running`，并且会收到一个公有 DNS 名称。（如果**公用 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. 选择实例，然后选择**连接**。

1. 依次选择 **Amazon EC2 Instance Connect**（Amazon EC2 实例连接）和 **Connect**（连接）。

您现在应该有一个 **Amazon EC2 Instance Connect** 窗口，该窗口将登录您的新 Amazon EC2 实例。

## 安装 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** 窗口中，使用以下命令安装节点版本管理器（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
   ```
**注意**  
这将安装最新 LTS 版本的 Node.js。

   安装 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 Root 证书颁发机构签名的客户端证书。此证书用于验证虚拟设备的身份。

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 C** onnect 窗口中，使用以下命令和上一个命令的响应*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"
   ```

   如果成功，此命令将不会显示任何输出。

## 安装适用于的 AWS IoT 设备 SDK JavaScript
<a name="ec2-sdk"></a>

在本节中，您将安装适用于 Device SDK JavaScript，其中包含应用程序可以用来与之通信的代码 AWS IoT 和示例程序。 AWS IoT 有关更多信息，请参阅[ JavaScript GitHub 存储库的AWS IoT 设备 SDK](https://github.com/aws/aws-iot-device-sdk-js-v2)。

**在您的 Linux 实例 JavaScript 上安装适用于的 AWS IoT 设备软件开发工具包**

1. 在您**的 Amazon EC2 Instance Connect** 窗口中，使用此命令将 JavaScript 存储库的 AWS IoT 设备软件开发工具包克隆到您的主目录目录中。`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`  | 

在本节中，您将安装并运行位于 AWS IoT 设备软件开发工具包`aws-iot-device-sdk-js-v2/samples/node`目录中的`pub-sub.js`示例应用程序 JavaScript。此应用程序显示设备（即您的 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** 窗口中，使用此命令*your-iot-endpoint*从中 AWS IoT 获取。

   ```
   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. 向主题 **topic\$11** 发布 10 条消息。

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 测试客户端**，在示例应用程序的消息通过消息代理时查看它们。

**要查看示例应用程序发布的 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 实例连接**窗口中，再次运行示例应用程序，然后在 **AWS IoT 控制台**的 **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 支持该协议的更多信息，请参阅 [MQ](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) TT。

# 使用你的 Windows、Linux 电脑或 Mac 作为 AWS IoT 设备
<a name="using-laptop-as-device"></a>

在本教程中，您将配置一台用于的个人计算机 AWS IoT。这些指令支持 Windows、Linux PCs 和 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 设备开发工具包
<a name="gs-pc-python-intall-sdk"></a>

**在电脑上安装适用于 Python 的 AWS IoT 设备 SDK**

1. 安装适用于 Python 的 AWS IoT 设备开发工具包的 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
   ```

------
**注意**  
如果你使用的是 Window PowerShell s 而不是**cmd.exe**，请使用以下命令。  

   ```
   echo $home
   ```

有关更多信息，请参阅适用于 [Python 的AWS IoT 设备 SDK GitHub 存储库](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) 中创建和注册事物对象时保存的私有密钥、设备证书和根 CA 证书文件。目标目录中每个文件的文件名应与表中的文件名匹配。

   下一部分中的命令假定您的密钥和证书文件均已存储在设备上，如下表中所示。

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

  运行此命令以创建您将在运行示例应用程序时使用的 `certs` 子目录。

  ```
  mkdir ~/certs
  ```

  进入新的子目录，将文件复制到下表所示的目标文件路径。  
**证书文件名**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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_cn/iot/latest/developerguide/using-laptop-as-device.html)

  运行此命令以列出 `certs` 目录中的文件，并将其与表中列出的文件进行比较。

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

------

## 设置策略并运行示例应用程序
<a name="gs-pc-python-app-run"></a>

在本部分中，您将设置策略并运行在 AWS IoT Device SDK for Python的 `aws-iot-device-sdk-python-v2/samples` 目录中找到的 `pubsub.py` 示例脚本。此脚本显示设备将如何使用 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_cn/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. 选择代表设备的事物资源**名称**链接来打开 **Thing details**（事物详细信息）页面。

1. 在**Thing details**（事物详细信息）页面，**Certificates**（证书）选项卡中，选择附加到事物资源的证书。列表中应只有一个证书。如果有多个证书，请选择文件安装在设备上并连接到 AWS IoT Core上的证书。

   在**Certificate**（证书）详细信息页面的**Policies**（策略）选项卡中，选择附加到该证书的策略。应该只有一个策略。如果有多个策略，请重复下一步，确保至少有一个策略授予所需的访问权限。

1. 在**策略**概述页面，找到 JSON 编辑器然后选择**编辑策略文档**，根据需要查看和编辑策略文档。

1. 下列示例中显示了 JSON 策略。在`"Resource"`元素 AWS 账户 中，将每个`Resource`值`region:account`替换为你的 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. 向主题 **test/topic** 发布 10 条消息。

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 测试客户端**，在示例应用程序的消息通过消息代理时查看它们。

**要查看示例应用程序发布的 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 客户端**中查看消息。

------
#### [ 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 支持该协议的更多信息，请参阅 [MQ](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html) TT。

## 在 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_cn/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 电脑或 Mac 作为 AWS IoT 设备](using-laptop-as-device.md)。

## 设置您的设备
<a name="gs-device-prereqs"></a>

此步骤的目标是收集配置设备所需的信息，以便它可以启动操作系统（OS）、连接到互联网，并允许您在命令行界面与设备进行交互。

要完成本教程，您需要：
+ 一个 AWS 账户。如果您没有账户，请完成 [设置 AWS 账户](setting-up.md) 中介绍的步骤然后继续操作。
+ [Raspberry Pi 3 Model 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 的桌面可能会使操作更容易。
+ 以太网或 WiFi 连接。
+ 键盘、鼠标、显示器、电缆、电源和设备所需的其它硬件。

**重要**  
您的设备必须先安装、配置和运行操作系统，然后才能继续执行下一步。设备必须连接到互联网，并且您需要能够使用其命令行界面访问设备。命令行访问可以通过直接连接的键盘、鼠标和显示器，也可以使用 SSH 终端远程接口进行访问。

 如果您在 Raspberry Pi 上运行具有图形用户界面（GUI）的操作系统，请在设备上打开终端窗口，然后在该窗口中执行以下说明。否则，如果您使用远程终端（如 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，则必须安装该操作系统才能为其安装 AWS IoT 设备 SDK JavaScript。

   1. 通过运行此命令测试是否已安装 Git。

      ```
      git --version
      ```

   1. 如果上一个命令返回了 Git 版本，则表示 Git 已经安装，您可以跳到步骤 3。

   1. 如果在运行 **git** 命令时显示了错误，则请运行此命令来安装 Git。

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

   1. 再次运行此命令测试是否已安装 Git。

      ```
      git --version
      ```

   1. 如果已安装 Git，请跳到下一个部分。如果没有，请排除故障并更正错误，然后再继续。你需要 Git 来安装的 AWS IoT 设备软件开发工具包 JavaScript。

## 安装 AWS IoT 设备 SDK
<a name="gs-device-install-sdk"></a>

安装 AWS IoT 设备软件开发工具包。

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

在本节中，你将在你的设备上安装 Python、其开发工具和适用于 Python 的 AWS IoT 设备 SDK。这些说明适用于运行最新版本 Raspberry Pi 操作系统的 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 ]

在本节中，你将在你的设备 JavaScript 上安装 Node.js、npm 包管理器和 AWS IoT 设备软件开发工具包。这些说明适用于运行 Raspberry Pi 操作系统的 Raspberry Pi。如果您有其他设备或使用其它操作系统，则可能需要为设备对以下说明的操作进行调整。

1. 

**安装最新版本的 Node.js**  
的 AWS IoT 设备 SDK JavaScript 需要在你的 Raspberry Pi 上安装 Node.js 和 npm 包管理器。

   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. 

**安装适用于的 AWS IoT 设备 SDK JavaScript**  
在你的 Raspberry Pi JavaScript 上安装适用于的 AWS IoT 设备 SDK。

   1. 将 JavaScript存储库的 AWS IoT 设备 SDK 克隆到您的*home*目录目录中。`aws-iot-device-sdk-js-v2`在 Raspberr *home* y Pi 上`~/`，*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` 以安装开发工具包。`npm install` 命令将调用可能需要几分钟才能完成的 `aws-crt` 库构建。

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

------

## 安装并运行示例应用程序
<a name="gs-device-node-app-run"></a>

在本节中，您将安装并运行 AWS IoT 设备 SDK 中的`pubsub`示例应用程序。此应用程序将显示您的设备如何使用 MQTT 库发布和订阅 MQTT 消息。示例应用程序订阅了一个主题，`topic_1`，将 10 条消息发布到该主题，并在从消息代理收到这些消息时予以显示。

**安装证书文件**  
示例应用程序要求在设备上安装对设备进行身份验证的证书文件。

**要为示例应用程序安装设备证书文件**

1. 通过运行这些命令在您的*home*目录中创建一个`certs`子目录。

   ```
   cd ~
   mkdir certs
   ```

1. 将您之前在 [创建 AWS IoT 资源](create-iot-resources.md) 中创建的私有密钥、设备证书和根 CA 证书复制到 `~/certs` 目录中。

   如何将证书文件复制到设备取决于设备和操作系统，此处未予介绍。但是，如果您的设备支持图形用户界面（GUI）并且具有 Web 浏览器，则可以在设备的 Web 浏览器中执行 [创建 AWS IoT 资源](create-iot-resources.md) 中所述的流程，以将生成的文件直接下载到您的设备。

   下一节中的命令假定您的密钥和证书文件存储在设备上，如下表中所示。  
**证书文件名**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/connecting-to-existing-device.html)

要运行示例应用程序，您需要以下信息：


**应用程序参数值**  

|  参数  |  在何处查找值  | 
| --- | --- | 
| your-iot-endpoint |  在 [AWS IoT 控制台](https://console.aws.amazon.com/iot/home)中，选择 **All devices**（所有设备），然后选择 **Things**（事物）。 在 AWS IoT 菜单的**设置**页面上。端点会显示在**设备数据端点**部分。  | 

该*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. 向主题 **topic\$11** 发布 10 条消息。

   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. 向主题 **topic\$11** 发布 10 条消息。

   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 测试客户端**，在示例应用程序的消息通过消息代理时查看它们。

**要查看示例应用程序发布的 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 客户端**中查看消息。

------
#### [ 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 language**其安装 AWS IoT 设备 SDK” 的**部分，然后再次执行该过程即可。

如果您使用的是的 De **AWS IoT vice SDK JavaScript**，请记得在尝试运行示例应用程序之前安装它们。安装 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)，在左侧菜单中选择**测试**，然后选择 **MQTT 客户端**。  
![\[从左侧导航栏的控制台菜单中选择 MQTT 测试客户端。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/choose-test.png)

1. 在 “**订阅主题**” 选项卡中，输入，订阅您的设备发布的主题。*topicName*对于入门示例应用程序，请订阅 **\$1**，它订阅了所有消息主题。

   继续使用入门示例操作，在 **Subscribe to a topic**（订阅主题）选项卡上的 **Topic filter**（主题筛选条件）字段，输入 **\$1**，然后选择 **Subscribe**（订阅）。  
![\[“订阅主题”选项卡。\]](http://docs.aws.amazon.com/zh_cn/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_cn/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 测试客户端页面的**发布到主题**选项卡的**主题名称**字段中，输入您的消息*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_cn/iot/latest/developerguide/images/publish-to-topic.png)

1. 在**订阅**列表中，选择**我的/主题**以查看消息。您应该看到该消息显示在 MQTT 测试客户端中的发布消息有效载荷窗口下。  
![\[显示收到已发布主题的屏幕。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/publish-to-topic-received.png)

您可以将 MQTT 消息发布到其他主题，方法是更改**主题名称**字段*topicName*中的并选择**发布**按钮。

**重要**  
当您创建多个包含重叠主题的订阅时（例如 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. 在 “**订阅主题**” 选项卡中，输入，订阅您的设备发布的主题。*topicName*要使用共享订阅，请按如下方式订阅共享订阅的主题筛选条件：

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

   示例主题筛选条件可以是 **\$1share/group1/topic1**，它订阅消息主题 **topic1**。  
![\[显示如何为共享订阅指定主题筛选器的选项卡。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/shared-subscription-topicfilter.png)

1. 打开另一个 Web 浏览器，然后重复步骤 1 和步骤 2。通过这种方式，您可以模拟共享相同订阅 **\$1share/group1/topic1** 的两个不同的 MQTT 客户端。

1. 选择一个 MQTT 客户端，在 “**发布到主题**” 选项卡的 “**主题名称**” 字段中，输入您的消息的。*topicName*在此示例中，使用 **topic1**。尝试发布消息几次。从两个 MQTT 客户端的**订阅**列表中，您应该能够看到客户端使用随机分布接收消息。在此示例中，我们发布了三次相同的消息“来自 AWS IoT 控制台的 Hello”。左侧的 MQTT 客户端收到消息两次，右侧的 MQTT 客户端收到消息一次。  
![\[共享订阅允许两个客户端共享对某个主题的订阅，并且只有一个客户端会收到使用随机分布发布到该主题的消息。\]](http://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/images/shared_subscriptions_test.gif)