本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:將裝置資料儲存在 DynamoDB 表格中
本教學課程示範如何建立將訊息資料傳送至 DynamoDB 資料表的 AWS IoT 規則。
在此教學課程中,您會建立一個規則,將訊息資料從虛構天氣感應器裝置傳送至 DynamoDB 表格。該規則會格式化來自多個天氣感應器的資料,由此可將其新增至單個資料庫表格中。
您會在本教學課程中學到什麼
-
如何建立 DynamoDB 表格
-
如何從 AWS IoT 規則將訊息資料傳送至 DynamoDB 資料表
-
如何在 AWS IoT 規則中使用替代範本
-
如何在規則SQL查詢陳述式中使用簡單的查詢和函數
-
如何使用MQTT用戶端測試 AWS IoT 規則
此教學課程約需 30 分鐘方能完成。
於本教學課程中,您將會:
開始本教學課程之前,請確定您有:
-
設定 AWS 帳戶
您需要 AWS 帳戶 和 AWS IoT 主控台才能完成本教學課程。
-
檢閱 使用 AWS IoT MQTT用戶端檢視MQTT訊息
請確定您可以使用MQTT用戶端訂閱和發佈至主題。您將使用MQTT用戶端在此程序中測試您的新規則。
-
檢閱了 Amazon DynamoDB 概觀
若您未曾使用過 DynamoDB,請查閱 DynamoDB 入門,以熟悉 DynamoDB 的基本概念和作業。
步驟 1:為本教學課程建立 DynamoDB 表格
於本教學課程中,您會建立一個具下列屬性的 DynamoDB 表格,以記錄來自虛構氣候感應器裝置的資料:
-
sample_time
為主索引鍵,並說明記錄範例的時間。 -
device_id
為排序索引鍵,並說明提供範例的裝置 -
device_data
為從裝置接收並由規則查詢陳述式格式化的資料
如要建立本教學課程的 DynamoDB 表格
-
開啟 DynamoDB 主控台
,然後選擇 Create table (建立表格)。 -
在 Create table (建立資料表) 中:
-
於 Table name (表格名稱) 中,輸入表格名稱:
wx_data
。 -
在 Primary key (主索引鍵) 中,輸入
sample_time
,然後在欄位旁的選項清單中,選擇Number
。 -
在 Sort key (排序索引鍵) 中,輸入
device_id
,然後在欄位旁的選項清單中,選擇Number
。 -
請在頁面底部,選擇 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 資料表
-
開啟AWS IoT 主控台的 Rules (規則) 中樞
。或者,您可以在 AWS Management Console 中開啟 AWS IoT 首頁,然後導覽至訊息路由>規則 。 -
如要在 Rules (規則) 中開始建立新規則,請選擇 Create rule (建立規則)。
-
在 Rule properties (規則屬性) 中:
-
在 Rule name (規則名稱) 中,輸入
wx_data_ddb
。請記住,規則名稱在您的 AWS 帳戶 和 區域中必須是唯一的,而且不能有任何空格。我們在此名稱中使用底線字元來分隔規則名稱中的兩個單字。
-
在 Rule description (規則說明) 中,說明規則。
有意義的說明可讓您更容易記住此規則的作用及您建立規則的原因。說明可依所需而定,因此請盡可能詳細說明。
-
-
選擇 Next (下一步) 繼續。
-
在SQL陳述式 中:
-
在SQL版本 中,選取
2016-03-23
。 -
在SQL陳述式編輯方塊中,輸入陳述式:
SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'
本陳述式:
-
接聽具有符合主題篩選條件之
device/+/data
主題MQTT的訊息。 -
將
wind
屬性的元素格式化為個別屬性。 -
傳遞
temperature
、humidity
和barometer
屬性不變。
-
-
-
選擇 Next (下一步) 繼續。
-
在 Rule actions (規則動作) 中:
-
若要開啟此規則的規則動作清單,請於 Action 1 (動作 1) 中,選擇
DynamoDB
。注意
請確定您選擇 DynamoDB 而非 D ynamoDBv2 作為規則動作。
-
於 Table name (表格名稱) 中,選擇您在先前步驟中建立的 DynamoDB 表格名稱:
wx_data
。Partition key type (分割區索引鍵類型) 和 Sort key type (排序索引鍵類型) 欄位,都會填入 DynamoDB 表格中的值。
-
在 Partition key (分區索引鍵),輸入
sample_time
。 -
在 Partition key value (分割區索引鍵值) 中,輸入
${timestamp()}
。這是您將用於此規則中 替代範本 的首項。而非使用訊息承載中的值,其會使用 timestamp 函數傳回的值。如需進一步了解,請參閱AWS IoT Core 開發人員指南中的時間戳記。
-
在 Sort key (排序索引鍵) 中,輸入
device_id
。 -
在 Sort key value (排序索引鍵值) 中,輸入
${cast(topic(2) AS DECIMAL)}
。這是您將用於此規則中 替代範本 第二項。它會在主題名稱中插入第二個元素的值,也就是裝置的 ID,在它轉換為值DECIMAL以符合金鑰的數值格式之後。若要進一步了解主題,請參閱AWS IoT Core 開發人員指南中的主題。或者,若要了解將值轉換為數值的詳細資訊,請參閱AWS IoT Core 開發人員指南中的將值轉換為數值。
-
在 Write message data to this column (寫入訊息資料至此欄) 中輸入
device_data
。這會建立 DynamoDB 表格中的
device_data
欄。 -
將 Operation (操作) 保持空白。
-
在IAM角色 中,選擇建立新角色 。
-
在 Create role (建立角色) 對話方塊中,請為 Role name (角色名稱) 輸入 wx_ddb_role。此新角色會自動包含字首為 "aws-iot-rule" 的政策,該政策將允許
wx_data_ddb
規則將資料傳送至您建立的wx_data
DynamoDB 資料表。 -
在IAM角色 中,選擇
wx_ddb_role
。 -
請選擇頁面最下方的 Next (下一頁)。
-
-
請在 Review and create (檢閱和建立) 頁面底部,選擇 Create (建立) 來建立規則。
步驟 3:測試 AWS IoT 規則和 DynamoDB 資料表
若要測試新規則,您將使用MQTT用戶端來發佈和訂閱此測試中使用的MQTT訊息。
在MQTT主控台中在新視窗中開啟用戶端 AWS IoT
使用MQTT用戶端測試您的規則
-
在MQTT主控台的 AWS IoT 用戶端
中,訂閱輸入主題 device/+/data
。-
在MQTT用戶端中,選擇訂閱主題 。
-
若為 Topic filter (主題篩選條件),請輸入輸入主題篩選條件的主題
device/+/data
。 -
選擇 Subscribe (訂閱)。
-
-
現在,使用特定裝置 ID
device/22/data
將訊息發佈至輸入主題。您無法發佈至包含萬用字元MQTT的主題。-
在MQTT用戶端中,選擇發佈至主題 。
-
若為 Topic name (主題名稱),請輸入輸入主題名稱
device/22/data
。 -
若為 Message payload (訊息承載),請輸入下列範例資料。
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
-
若要發佈MQTT訊息,請選擇發佈 。
-
現在,在MQTT用戶端中,選擇訂閱主題 。於 Subscribe (訂閱) 欄中,選擇
device/+/data
訂閱。確認上一步的範例資料會顯示於此處。
-
-
查看您規則所建立 DynamoDB 表格中的列。
-
在AWS IoT 主控台 的 DynamoDB 資料表中樞中
,選擇 wx_data ,然後選擇項目索引標籤。 若您已在 Items (項目) 索引標籤上,您可能需要選擇表格標題右上角的重新整理圖示來重新整理該顯示。
-
請注意,表格中的 sample_time 值為連結並開啟一個。若您剛傳送了第一則訊息,則其將是清單中唯一的訊息。
此連結會顯示表格該列中的所有資料。
-
展開 device_data 項目,查看規則查詢陳述式所產生的資料。
-
探索此顯示中可用資料的不同表示法。您亦可於此顯示中編輯資料。
-
完成查閱此資料列之後,如要儲存所做的任何變更,請選擇 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 函數來格式化通知。