簡體   English   中英

AWT IoT 規則到 S3

[英]AWT IoT rule to S3

我創建了一個規則來將傳入的 IoT 消息發送到 S3 存儲桶。

問題是,任何時候 IoT 收到消息都會發送並存儲在 S3 中的新文件(同名)中。

我希望這個 S3 文件保留之前的所有數據,而不是在每次存儲新消息時都被截斷。

我怎樣才能做到這一點?

您無法使用 S3 IoT 規則操作執行此操作。 您可以使用 AWS Firehose 獲得類似的結果,它將多條消息批處理並寫入一個文件。 盡管如此,您仍然會得到多個文件。

您可以使用 AWS IoT SQL 變量表達式來實現。 例如使用以下作為鍵${newuuid()} 這將為收到的每條消息創建新的 s3 對象。

查看更多關於 SQL 函數的信息https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html

示例鍵

當您設置IoT S3 規則操作時,您需要指定一個存儲桶和一個密鑰。 關鍵是我們可能認為的“路徑和文件名”。 正如文檔所說,可以使用替換模板指定密鑰字符串,這只是“從這些信息中構建路徑”的一種奇特說法。 在構建替換模板時,您可以引用消息中的字段以及使用一系列其他函數

特別是查看函數topictimestamp以及一些字符串操縱器函數。

假設您的主題名稱類似於things/thing-id-xyz/location ,您只想將每個傳入的 JSON 消息存儲在一個“文件夾”中,以獲取它來自的 thing-id。 您可以指定一個鍵,例如:

${topic(2)}/${timestamp()).json

它會評估為:

thing-id-xyz/1481825251155.json

其中時間戳部分是消息傳入的時間。每條消息都不同,這樣消息就不會相互覆蓋。

您還可以指定消息本身的部分內容。 讓我們想象一下我們的傳入消息看起來像這樣:

{
  "time": "2022-01-13T10:04:03Z",
  "latitude": 40.803274,
  "longitude": -74.237926,
  "note": "Great view!"
}

假設您想使用數據中的 ISO 日期值而不是文件的時間戳。 您可以毫無問題地引用time字段,例如:

${topic(2)//${time}.json

現在文件將被寫為密鑰:

thing-id-xyz/2022-01-13T10:04:03Z.json

您應該能夠找到適合您需要的一些值組合,最重要的是,對於每條消息都是唯一的,因此它們不會在 S3 中相互覆蓋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM