

終止支援通知：在 2025 年 12 月 15 日， AWS 將終止對 的支援 AWS IoT Analytics。2025 年 12 月 15 日之後，您將無法再存取 AWS IoT Analytics 主控台或 AWS IoT Analytics 資源。如需詳細資訊，請參閱[AWS IoT Analytics 終止支援](https://docs.aws.amazon.com/iotanalytics/latest/userguide/iotanalytics-end-of-support.html)。

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

# 將資料擷取至 AWS IoT Analytics
<a name="ingest-data"></a>

如果您有將資料路由到管道的管道，將資料存放在可查詢的資料存放區中，您就可以將訊息資料傳送到其中 AWS IoT Analytics。在這裡，我們顯示將資料傳入的兩種方法 AWS IoT Analytics。您可以使用訊息中介裝置或使用 AWS IoT Analytics `BatchPutMessage` API AWS IoT 傳送訊息。

**Topics**
+ [使用 AWS IoT 訊息中介裝置](#iot-message-broker)
+ [使用 BatchPutMessage API](#batchputmessage-api)

## 使用 AWS IoT 訊息中介裝置
<a name="iot-message-broker"></a>

若要使用 AWS IoT 訊息中介裝置，您可以使用規則引擎建立 AWS IoT 規則。規則會將具有特定主題的訊息路由到其中 AWS IoT Analytics。不過，首先此規則會要求您建立一個角色，授與所需的許可。

### 建立 IAM 角色
<a name="create-iam-role"></a>

若要將 AWS IoT 訊息路由到 AWS IoT Analytics 頻道，您可以設定規則。但首先，您必須建立 IAM 角色，授予該規則將訊息資料傳送至 AWS IoT Analytics 頻道的許可。

執行下列 命令以建立角色。

```
aws iam create-role --role-name myAnalyticsRole --assume-role-policy-document file://arpd.json
```

`arpd.json` 檔案的內容看起來應該如下所示。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

然後，將政策文件連接到角色。

```
aws iam put-role-policy --role-name myAnalyticsRole --policy-name myAnalyticsPolicy --policy-document file://pd.json
```

`pd.json` 檔案的內容看起來應該如下所示。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iotanalytics:BatchPutMessage",
            "Resource": [
                "arn:aws:iotanalytics:{{us-east-1}}:{{111122223333}}:channel/{{your-channel}}"
            ]
        }
    ]
}
```

------

### 建立 AWS IoT 規則
<a name="create-iot-rule"></a>

建立 AWS IoT 規則，將訊息傳送到您的頻道。

```
aws iot create-topic-rule --rule-name analyticsTestRule --topic-rule-payload file://rule.json
```

`rule.json` 檔案的內容看起來應該如下所示。

```
{
    "sql": "SELECT * FROM 'iot/test'",
    "ruleDisabled": false,
    "awsIotSqlVersion": "2016-03-23",
    "actions": [ {
        "iotAnalytics": {
            "channelName": "mychannel",
            "roleArn": "arn:aws:iam::{{your-account-number}}:role/myAnalyticsRole"
        }
    } ]
}
```

將 `iot/test` 取代為應該路由之訊息的 MQTT 主題。將頻道名稱和角色取代為您在前一節建立的頻道名稱和角色。

### 傳送 MQTT 訊息至 AWS IoT Analytics
<a name="send-mqtt-messages"></a>

將規則加入頻道、管道管道和資料存放區的管道之後，符合規則的任何資料現在都會流 AWS IoT Analytics 經資料存放區，準備進行查詢。若要測試此項目，您可以使用 AWS IoT 主控台來傳送訊息。

**注意**  
您傳送的訊息承載 （資料） 欄位名稱 AWS IoT Analytics。  
僅能包含英數字元和底線 (\_)；不得使用其他特殊字元。
開頭必須為字母字元或一個底線 (\_)。
不可包含連字號 (-)。
在規則表達式術語中："`^[A-Za-z_]([A-Za-z0-9]*|[A-Za-z0-9][A-Za-z0-9_]*)$`"。
不能大於 255 個字元
不區分大小寫。相同承載`FOO`中名為 `foo`和 的欄位視為重複。
例如，在訊息承載中，`{"temp_01": 29}` 或 `{"_temp_01": 29}` 為有效值，但 `{"temp-01": 29}`、`{"01_temp": 29}` 或 `{"__temp_01": 29}` 皆為無效值。

1. 請在 [AWS IoT 主控台](https://console.aws.amazon.com/iot/) 左側的導覽窗格中，選擇 **Test (測試)**。  
![主控台中「監視器」頁面的 AWS IoT 螢幕擷取畫面。](http://docs.aws.amazon.com/zh_tw/iotanalytics/latest/userguide/images/choose-test.png)

1. 在 MQTT client (MQTT 用戶端) 頁面，於 **Publish** (發佈) 部分的 **Specify a topic (指定主題)** 項目輸入 **iot/test**。在訊息承載區段中，確認下列 JSON 內容存在，否則請輸入內容。

   ```
   {
       "message": "Hello from the IoT console"
   }
   ```

1. 選擇 **Publish to topic (發佈至主題)**。  
![AWS IoT 主控台中「測試」頁面的螢幕擷取畫面。](http://docs.aws.amazon.com/zh_tw/iotanalytics/latest/userguide/images/publish.png)

   這樣會發佈訊息，並路由傳送到您稍早建立的資料存放區。

## 使用 BatchPutMessage API
<a name="batchputmessage-api"></a>

取得訊息資料的另一個方法是 AWS IoT Analytics 使用 `BatchPutMessage` API 命令。此方法不需要您設定 AWS IoT 規則，將具有特定主題的訊息路由到您的頻道。但是，它確實需要將資料/訊息傳送到頻道的裝置能夠執行使用 AWS SDK 建立的軟體，或能夠使用 AWS CLI 呼叫 `BatchPutMessage`。

1. 建立檔案`messages.json`，其中包含要傳送的訊息 （在此範例中，只會傳送一則訊息）。

   ```
   [
       { "messageId": "message01", "payload": "{ \"message\": \"Hello from the CLI\" }" }
   ]
   ```

1. 執行 `batch-put-message` 命令。

   ```
   aws iotanalytics batch-put-message  --channel-name mychannel  --messages file://messages.json --cli-binary-format raw-in-base64-out
   ```

   如果沒有錯誤，您會看到以下輸出。

   ```
   {
       "batchPutMessageErrorEntries": []
   }
   ```