將資料擷取至 AWS IoT Analytics - AWS IoT Analytics

終止支援通知:在 2025 年 12 月 15 日, AWS 將結束對 的支援 AWS IoT Analytics。2025 年 12 月 15 日之後,您將無法再存取 AWS IoT Analytics 主控台或 AWS IoT Analytics 資源。如需詳細資訊,請參閱AWS IoT Analytics 終止支援

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

將資料擷取至 AWS IoT Analytics

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

使用 AWS IoT 訊息中介裝置

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

建立 IAM 角色

若要將 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 檔案的內容看起來應該如下所示。

{ "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 檔案的內容看起來應該如下所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotanalytics:BatchPutMessage", "Resource": [ "arn:aws:iotanalytics:us-west-2:your-account-number:channel/mychannel" ] } ] }

建立 AWS IoT 規則

建立 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

將規則加入頻道、管道管道和資料存放區的管道之後,符合規則的任何資料現在都會流 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 主控台 左側的導覽窗格中,選擇 Test (測試)

    主控台中「監視器」頁面的 AWS IoT 螢幕擷取畫面。
  2. 在 MQTT client (MQTT 用戶端) 頁面,於 Publish (發佈) 部分的 Specify a topic (指定主題) 項目輸入 iot/test。在訊息承載區段中,確認下列 JSON 內容存在,否則請輸入內容。

    { "message": "Hello from the IoT console" }
  3. 選擇 Publish to topic (發佈至主題)

    AWS IoT 主控台中「測試」頁面的螢幕擷取畫面。

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

使用 BatchPutMessage API

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

  1. 建立檔案messages.json,其中包含要傳送的訊息 (在此範例中,只會傳送一則訊息)。

    [ { "messageId": "message01", "payload": "{ \"message\": \"Hello from the CLI\" }" } ]
  2. 執行 batch-put-message 命令。

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

    如果沒有錯誤,您會看到下列輸出。

    { "batchPutMessageErrorEntries": [] }