教學課程:將裝置資料儲存在 DynamoDB 表格中 - AWS IoT Core

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

教學課程:將裝置資料儲存在 DynamoDB 表格中

本教學課程示範如何建立將訊息資料傳送至 DynamoDB 資料表的 AWS IoT 規則。

在此教學課程中,您會建立一個規則,將訊息資料從虛構天氣感應器裝置傳送至 DynamoDB 表格。該規則會格式化來自多個天氣感應器的資料,由此可將其新增至單個資料庫表格中。

您會在本教學課程中學到什麼
  • 如何建立 DynamoDB 表格

  • 如何從 AWS IoT 規則將訊息資料傳送至 DynamoDB 資料表

  • 如何在 AWS IoT 規則中使用替代範本

  • 如何在規則SQL查詢陳述式中使用簡單的查詢和函數

  • 如何使用MQTT用戶端測試 AWS IoT 規則

此教學課程約需 30 分鐘方能完成。

開始本教學課程之前,請確定您有:

步驟 1:為本教學課程建立 DynamoDB 表格

於本教學課程中,您會建立一個具下列屬性的 DynamoDB 表格,以記錄來自虛構氣候感應器裝置的資料:

  • sample_time 為主索引鍵,並說明記錄範例的時間。

  • device_id 為排序索引鍵,並說明提供範例的裝置

  • device_data 為從裝置接收並由規則查詢陳述式格式化的資料

如要建立本教學課程的 DynamoDB 表格
  1. 開啟 DynamoDB 主控台,然後選擇 Create table (建立表格)。

  2. Create table (建立資料表) 中:

    1. Table name (表格名稱) 中,輸入表格名稱:wx_data

    2. Primary key (主索引鍵) 中,輸入 sample_time,然後在欄位旁的選項清單中,選擇 Number

    3. Sort key (排序索引鍵) 中,輸入 device_id,然後在欄位旁的選項清單中,選擇 Number

    4. 請在頁面底部,選擇 Create (建立)。

您稍後將在設定 DynamoDB 規則動作時定義 device_data

步驟 2:建立 AWS IoT 規則以將資料傳送至 DynamoDB 資料表

於此步驟中,您會使用規則查詢陳述式,格式化虛構天氣感應器裝置的資料,以寫入資料庫表格。

從天氣感應器裝置接收的訊息承載範例如下所示:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }

對於資料庫項目,您會使用規則查詢陳述式將訊息承載的結構平面化,如下所示:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind_velocity": 22, "wind_bearing": 255 }

於此規則中,您還會使用一些 替代範本。替代範本是可讓您從函數和訊息資料插入動態值的運算式。

建立 AWS IoT 規則以將資料傳送至 DynamoDB 資料表
  1. 開啟AWS IoT 主控台的 Rules (規則) 中樞。或者,您可以在 AWS Management Console 中開啟 AWS IoT 首頁,然後導覽至訊息路由>規則

  2. 如要在 Rules (規則) 中開始建立新規則,請選擇 Create rule (建立規則)。

  3. Rule properties (規則屬性) 中:

    1. Rule name (規則名稱) 中,輸入 wx_data_ddb

      請記住,規則名稱在您的 AWS 帳戶 和 區域中必須是唯一的,而且不能有任何空格。我們在此名稱中使用底線字元來分隔規則名稱中的兩個單字。

    2. Rule description (規則說明) 中,說明規則。

      有意義的說明可讓您更容易記住此規則的作用及您建立規則的原因。說明可依所需而定,因此請盡可能詳細說明。

  4. 選擇 Next (下一步) 繼續。

  5. SQL陳述式 中:

    1. SQL版本 中,選取 2016-03-23

    2. SQL陳述式編輯方塊中,輸入陳述式:

      SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'

      本陳述式:

      • 接聽具有符合主題篩選條件之device/+/data主題MQTT的訊息。

      • wind 屬性的元素格式化為個別屬性。

      • 傳遞 temperaturehumiditybarometer 屬性不變。

  6. 選擇 Next (下一步) 繼續。

  7. Rule actions (規則動作) 中:

    1. 若要開啟此規則的規則動作清單,請於 Action 1 (動作 1) 中,選擇 DynamoDB

      注意

      請確定您選擇 DynamoDB 而非 D ynamoDBv2 作為規則動作。

    2. Table name (表格名稱) 中,選擇您在先前步驟中建立的 DynamoDB 表格名稱:wx_data

      Partition key type (分割區索引鍵類型) 和 Sort key type (排序索引鍵類型) 欄位,都會填入 DynamoDB 表格中的值。

    3. Partition key (分區索引鍵),輸入 sample_time

    4. Partition key value (分割區索引鍵值) 中,輸入 ${timestamp()}

      這是您將用於此規則中 替代範本 的首項。而非使用訊息承載中的值,其會使用 timestamp 函數傳回的值。如需進一步了解,請參閱AWS IoT Core 開發人員指南中時間戳記

    5. Sort key (排序索引鍵) 中,輸入 device_id

    6. Sort key value (排序索引鍵值) 中,輸入 ${cast(topic(2) AS DECIMAL)}

      這是您將用於此規則中 替代範本 第二項。它會在主題名稱中插入第二個元素的值,也就是裝置的 ID,在它轉換為值DECIMAL以符合金鑰的數值格式之後。若要進一步了解主題,請參閱AWS IoT Core 開發人員指南中的主題。或者,若要了解將值轉換為數值的詳細資訊,請參閱AWS IoT Core 開發人員指南中的將值轉換為數值

    7. Write message data to this column (寫入訊息資料至此欄) 中輸入 device_data

      這會建立 DynamoDB 表格中的 device_data 欄。

    8. Operation (操作) 保持空白。

    9. IAM角色 中,選擇建立新角色

    10. Create role (建立角色) 對話方塊中,請為 Role name (角色名稱) 輸入 wx_ddb_role。此新角色會自動包含字首為 "aws-iot-rule" 的政策,該政策將允許wx_data_ddb規則將資料傳送至您建立的 wx_data DynamoDB 資料表。

    11. IAM角色 中,選擇 wx_ddb_role

    12. 請選擇頁面最下方的 Next (下一頁)。

  8. 請在 Review and create (檢閱和建立) 頁面底部,選擇 Create (建立) 來建立規則。

步驟 3:測試 AWS IoT 規則和 DynamoDB 資料表

若要測試新規則,您將使用MQTT用戶端來發佈和訂閱此測試中使用的MQTT訊息。

MQTT主控台中在新視窗中開啟用戶端 AWS IoT。這可讓您編輯規則,而不會遺失MQTT用戶端的組態。如果您離開用戶端前往主控台中的另一個頁面,用戶端MQTT不會保留任何訂閱或訊息日誌。您還需要將單獨的主控台視窗開啟至AWS IoT 主控台中的 DynamoDB 資料表中樞,以檢視規則傳送的新項目。

使用MQTT用戶端測試您的規則
  1. MQTT主控台的 AWS IoT 用戶端 中,訂閱輸入主題 device/+/data

    1. 在MQTT用戶端中,選擇訂閱主題

    2. 若為 Topic filter (主題篩選條件),請輸入輸入主題篩選條件的主題 device/+/data

    3. 選擇 Subscribe (訂閱)

  2. 現在,使用特定裝置 ID device/22/data 將訊息發佈至輸入主題。您無法發佈至包含萬用字元MQTT的主題。

    1. 在MQTT用戶端中,選擇發佈至主題

    2. 若為 Topic name (主題名稱),請輸入輸入主題名稱 device/22/data

    3. 若為 Message payload (訊息承載),請輸入下列範例資料。

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. 若要發佈MQTT訊息,請選擇發佈

    5. 現在,在MQTT用戶端中,選擇訂閱主題 。於 Subscribe (訂閱) 欄中,選擇 device/+/data 訂閱。確認上一步的範例資料會顯示於此處。

  3. 查看您規則所建立 DynamoDB 表格中的列。

    1. AWS IoT 主控台 的 DynamoDB 資料表中樞中,選擇 wx_data ,然後選擇項目索引標籤。

      若您已在 Items (項目) 索引標籤上,您可能需要選擇表格標題右上角的重新整理圖示來重新整理該顯示。

    2. 請注意,表格中的 sample_time 值為連結並開啟一個。若您剛傳送了第一則訊息,則其將是清單中唯一的訊息。

      此連結會顯示表格該列中的所有資料。

    3. 展開 device_data 項目,查看規則查詢陳述式所產生的資料。

    4. 探索此顯示中可用資料的不同表示法。您亦可於此顯示中編輯資料。

    5. 完成查閱此資料列之後,如要儲存所做的任何變更,請選擇 Save (儲存),或者,如要結束而不儲存任何變更,請選擇 Cancel (取消)。

若您並未看到正確的行為,請查看疑難排解提示。

對您的 DynamoDB 規則進行疑難排解

若您並未看到預期的結果,請查看以下事項。

  • 您收到錯誤的橫幅

    若在您發佈輸入訊息時出現錯誤,請先更正該錯誤。下列步驟可協助您修正該錯誤。

  • 您在MQTT用戶端中看不到輸入訊息

    每次將輸入訊息發佈至device/22/data主題時,如果您訂閱device/+/data主題篩選條件,該訊息都應出現在MQTT用戶端中,如 程序中所述。

    要檢查的事項
    • 檢查您訂閱的主題篩選條件

      若您依程序中所述訂閱了輸入訊息主題,則每次發佈輸入訊息時都應該會看到其複本。

      若您並未訊息,請檢查您訂閱的主題名稱,並將其與所發佈的主題進行比較。主題名稱區分大小寫,且您訂閱的主題必須與所發佈訊息承載的主題相同。

    • 檢查訊息發佈功能

      在MQTT用戶端的訂閱 下,選擇 device/+/data ,檢查發佈訊息的主題,然後選擇發佈至主題 。您應該會在訊息清單中出現主題下方的編輯方塊中看到訊息承載。

  • 您在 DynamoDB 表格中看不到您的資料

    首先要做的是選擇表格標題右上角的重新整理圖示,以重新整理顯示。若未顯示您正在尋找的資料,請檢查下列內容。

    要檢查的事項
    • 檢查MQTT用戶端 AWS 區域 的 和您建立的規則

      您執行MQTT用戶端的主控台必須與您建立的規則位於相同的 AWS 區域中。

    • 檢查規則查詢陳述式中的輸入訊息主題

      若要讓規則正常運作,它必須收到一則訊息,其中包含符合規則查詢陳述式子FROM句中主題篩選條件的主題名稱。

      檢查規則查詢陳述式中主題篩選條件的拼寫與MQTT用戶端中主題的拼寫。主題名稱區分大小寫,且郵件的主題必須與規則查詢陳述式中的主題篩選條件相符。

    • 檢查輸入訊息承載的內容

      若要讓規則運作,它必須在SELECT陳述式中宣告的訊息承載中找到資料欄位。

      檢查規則查詢陳述式中temperature欄位的拼寫與MQTT用戶端中訊息承載的拼寫。欄位名稱區分大小寫,規則查詢陳述式中的 temperature 欄位必須與訊息承載中的 temperature 欄位相符。

      請確定訊息承載中的JSON文件格式正確。如果 JSON 有任何錯誤,例如缺少逗號,則規則將無法讀取它。

    • 檢查用於規則動作中的索引鍵和欄位名稱

      主題規則中使用的欄位名稱必須符合已發佈JSON訊息的訊息承載中找到的欄位名稱。

      開啟您在主控台中建立的規則,並使用MQTT用戶端中使用的規則動作組態中的欄位名稱。

    • 檢查規則所使用的角色

      規則動作必須具有接收原始主題及發佈新主題的權限。

      授權規則以接收訊息資料及更新 DynamoDB 表格的政策是所使用主題特有的。若您變更規則使用的主題或 DynamoDB 表格名稱,則必須更新規則動作的角色,以更新其相符的政策。

      若您懷疑這會是問題,請編輯規則動作並建立新角色。規則動作建立的新角色會收到執行這些動作所需的授權。

步驟 4:檢閱結果及後續步驟

在您使用此規則將數則訊息傳送至 DynamoDB 表格後,請試著對其進行試驗,以查看變更教學課程中的某些層面如何影響寫入表格的資料。此處有幾種簡單的入門方式。

  • 變更 device_id 在輸入訊息的主題中,觀察對資料的影響。您可使用此來模擬從多個天氣感應器接收資料。

  • 變更規則查詢陳述式中所選取的欄位,並觀察對資料的影響。您可以此來篩選儲存於表格中的資料。

  • 新增重新發佈規則動作,以針對新增至資料表的每個資料列MQTT傳送訊息。您可以此來進行除錯。

完成本教學課程後,請查看 教學課程:使用 AWS Lambda 函數來格式化通知