

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

# 准备 Raspberry Pi 来演示 MQTT 消息通信
<a name="iot-dc-testconn-provision"></a>

此过程在 Raspberry Pi 中 Amazon IoT 和中创建资源，以演示使用 Amazon IoT 设备客户端进行 MQTT 消息通信。

**Topics**
+ [创建证书文件演示 MQTT 通信](#iot-dc-testconn-provision-certs)
+ [预调配您的设备演示 MQTT 通信](#iot-dc-testconn-provision-aws)
+ [配置 Amazon IoT 设备客户端配置文件和 MQTT 测试客户端，演示 MQTT 通信](#iot-dc-testconn-provision-dc-config)

## 创建证书文件演示 MQTT 通信
<a name="iot-dc-testconn-provision-certs"></a>

此过程为此演示创建设备证书文件。

**要为 Raspberry Pi 创建和下载设备证书文件**



1. 在本地主机的终端窗口中，输入以下命令为您的设备创建设备证书文件。

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

   此命令会返回类似以下内容的响应。保存 `certificateArn`值供稍后使用。

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
   "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
   }
   }
   ```

1. 输入以下命令设置证书目录及其文件的权限。

   ```
   chmod 700 ~/certs/pubsub
   chmod 644 ~/certs/pubsub/*
   chmod 600 ~/certs/pubsub/private.pem.key
   ```

1. 运行此命令可查看证书目录和文件的权限。

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

   命令的输出应与您在此处看到的内容相同，但文件日期和时间会有所不同。

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

1. 输入这些命令创建日志文件的目录。

   ```
   mkdir ~/.aws-iot-device-client
   mkdir ~/.aws-iot-device-client/log
   chmod 745 ~/.aws-iot-device-client/log
   echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log
   echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   chmod 600 ~/.aws-iot-device-client/log/*
   ```

## 预调配您的设备演示 MQTT 通信
<a name="iot-dc-testconn-provision-aws"></a>

本节创建了在中配置 Raspberry Pi 的 Amazon IoT 资源 Amazon IoT。

**在 Amazon IoT中预置您的设备：**

1. 在本地主机的终端窗口中，输入以下命令获取您的 Amazon Web Services 账户设备数据端点的地址。

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

   自从您为上一教程运行此命令以来，端点值一直没有更改。再次在此处运行命令是为了方便地查找数据端点值并将其粘贴到本教程中使用的配置文件中。

   上面步骤的命令会返回类似以下内容的响应。记录 `endpointAddress`值以供将来使用。

   ```
   {
   "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. 输入此命令为您的 Raspberry Pi 创建新 Amazon IoT 事物资源。

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

   由于 Amazon IoT 事物资源是您的设备在云中的*虚拟*表示，因此我们可以创建多个事物资源 Amazon IoT 以用于不同的目的。它们都可以由同一物理 IoT 设备使用来表示设备的不同方面。

   这些教程一次只能使用一个事物资源来表示 Raspberry Pi。这样，在这些教程中，它们代表了不同的演示，因此在为演示创建 Amazon IoT 资源之后，您可以返回并使用专门为每个演示创建的资源重复演示。

   如果您的 Amazon IoT 事物资源已创建，则该命令会返回类似这样的响应。

   ```
   {
   "thingName": "PubSubTestThing",
   "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/PubSubTestThing",
   "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. 在终端窗口中：

   1. 打开文本编辑器，例如 `nano`。

   1. 复制此 JSON 文档并将其粘贴到打开的文本编辑器中。  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/PubSubTestThing"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic"
                  ]
              }
          ]
      }
      ```

   1. 在编辑器中，在政策文档的每个`Resource`部分中，*us-west-2:57EXAMPLE833*用您 Amazon Web Services 区域的、冒号字符 (:) 和您的 12 位 Amazon Web Services 账户 数字替换。

   1. 将文本编辑器中的文件保存为 **\$1/policies/pubsub\$1test\$1thing\$1policy.json**。

1. 运行此命令使用前面步骤中的策略文档来创建 Amazon IoT 策略。

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

   如果创建策略，该命令将返回类似此类的响应。

   ```
   {
                                       "policyName": "PubSubTestThingPolicy",
                                       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
                                       "policyDocument": "{\n\"Version\": \"2012-10-17\",		 	 	 \n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n",
                                       "policyVersionId": "1"
                                       }
   ```

1. 运行此命令将策略附加到设备证书。将 `certificateArn`替换为您之前在本部分保存的 `certificateArn`值。

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

   如果成功，该命令不返回任何内容。

1. 运行此命令将设备证书附加到 Amazon IoT 事物资源。将 `certificateArn`替换为您之前在本部分保存的 `certificateArn`值。

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

   如果成功，该命令不返回任何内容。

在中成功配置设备后 Amazon IoT，就可以继续操作了[配置 Amazon IoT 设备客户端配置文件和 MQTT 测试客户端，演示 MQTT 通信](#iot-dc-testconn-provision-dc-config)。

## 配置 Amazon IoT 设备客户端配置文件和 MQTT 测试客户端，演示 MQTT 通信
<a name="iot-dc-testconn-provision-dc-config"></a>

此过程创建一个配置文件来测试 Amazon IoT 设备客户端。

**创建用于测试 Amazon IoT 设备客户端的配置文件**

1. 在连接到 Raspberry Pi 的本地主机的终端窗口中：

   1. 打开文本编辑器，例如 `nano`。

   1. 复制此 JSON 文档并将其粘贴到打开的文本编辑器中。

      ```
      {
        "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
        "cert": "~/certs/pubsub/device.pem.crt",
        "key": "~/certs/pubsub/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "PubSubTestThing",
        "logging": {
          "enable-sdk-logging": true,
          "level": "DEBUG",
          "type": "STDOUT",
          "file": ""
        },
        "jobs": {
          "enabled": false,
          "handler-directory": ""
        },
        "tunneling": {
          "enabled": false
        },
        "device-defender": {
          "enabled": false,
          "interval": 300
        },
        "fleet-provisioning": {
          "enabled": false,
          "template-name": "",
          "template-parameters": "",
          "csr-file": "",
          "device-key": ""
        },
        "samples": {
          "pub-sub": {
            "enabled": true,
            "publish-topic": "test/dc/pubtopic",
            "publish-file": "",
            "subscribe-topic": "test/dc/subtopic",
            "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
          }
        },
        "config-shadow": {
          "enabled": false
        },
        "sample-shadow": {
          "enabled": false,
          "shadow-name": "",
          "shadow-input-file": "",
          "shadow-output-file": ""
        }
      }
      ```

   1. 将该*endpoint*值替换为您在中找到的设备数据端点[在中配置您的设备 Amazon IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision)。 Amazon Web Services 账户 

   1. 将文本编辑器中的文件保存为 **\$1/dc-configs/dc-pubsub-config.json**。

   1. 运行这个命令在新文件上设置权限

      ```
      chmod 644 ~/dc-configs/dc-pubsub-config.json
      ```

1. 准备 **MQTT 测试客户端**订阅所有 MQTT 消息：

   1. 在本地主机上，在[Amazon IoT 控制台](https://console.amazonaws.cn//iot/home#/test)，选择**MQTT 测试客户端**。

   1. 在**订阅主题**选项卡上，在**主题筛选条件**中，输入 **\$1**（单个井号），然后选择**订阅**。

   1. 在**订阅**标签下，确认您看见 **\$1**（单独英镑符号）。

   继续此教程时，让窗口的 **MQTT 测试客户端** 保持打开。

保存文件并配置 **MQTT 测试客户端**后，您便可以继续 [演示使用 Amazon IoT 设备客户端发布消息](iot-dc-testconn-publish.md)。