Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自宅付近の気温と湿度を可視化する時に気づいたAmazon Timestream導入時の注意点 / Important point of Timestream

自宅付近の気温と湿度を可視化する時に気づいたAmazon Timestream導入時の注意点 / Important point of Timestream

JAWS DAYS 2021登壇資料

自宅のベランダで気温と湿度を計測したくてGPSマルチユニットSORACOM Editionを使って測定してみました。
その時にTimestreamでハマったのですが、その内容が他の様々な場面でも発生しうるので、事象と対応についてご紹介します。

069cd7a173dfb7d46c8b6b90624f5bf1?s=128

Takashi Nasu

March 20, 2021
Tweet

Transcript

  1. ⾃宅付近の気温と湿度を可視化する時に気づいた Amazon Timestream導⼊時の注意点 株式会社 dotD 那須 隆 2021.03.20 (Sat) JAWS

    DAYS 2021 re:Connect
  2. Copyright© 2021 dotD All Rights Reserved. ⾃⼰紹介 • 那須 隆(なす

    たかし) • 株式会社dotD Infrastructure Architect • 愛⽝の健康管理とコミュニティアプリ 「onedog」や共創事業のインフラ設計 から運⽤まで • 2019/2020 Japan APN Ambassador @nasutakashii https://nasrinjp1.hatenablog.com/
  3. Copyright© 2021 dotD All Rights Reserved. Amazon Timestream (以下、Timestream) を

    使って気温と湿度を可視化する時にハマった 内容をお伝えします。 業務で同じ事象で困る⼈の助けになる内容に なれば嬉しいです。 今⽇お伝えしたいこと
  4. Copyright© 2021 dotD All Rights Reserved. 関⻄のシベリアと呼ばれるほど冬はめっちゃ寒い 気象庁の最低気温を⾒てても確かに兵庫県で1,2を争う寒さ 気象測定地点がたまたま寒くなる場所にあるのでは? →⾃宅付近の気温と湿度を知りたくなった

    確かめたかったこと(動機)
  5. Copyright© 2021 dotD All Rights Reserved. そのためにやりたかったこと

  6. Copyright© 2021 dotD All Rights Reserved. 温湿度計 GPSマルチユニットSORACOM Edition(バッテリー内蔵タイプ)スターターキット •

    そういえば SORACOM って名前をよく⾒る • 簡単にデータを送信できて簡単にクラウド連携できるらしい • ブログ等で情報収集しやすそう • 1万円以上したのできっと本気でやるだろうと思った
  7. Copyright© 2021 dotD All Rights Reserved. 最初に試した構成概要

  8. Copyright© 2021 dotD All Rights Reserved. 作成⼿順(今⽇は話しません) https://blog.soracom.com/ja-jp/2020/10/06/iot- architecture-with-mazon-timestream-and-soracom/

  9. Copyright© 2021 dotD All Rights Reserved. 気軽にAWS IoT Coreを経由してTimestreamにデータ送信してみたところ。 温度データがある時刻とない時刻がある。

    事象発⽣
  10. Copyright© 2021 dotD All Rights Reserved. SORACOM Harvestではちゃんと15:05の温度は取れている。 状況確認

  11. Copyright© 2021 dotD All Rights Reserved. [ERROR] EVENT:TimestreamActionFailure TOPICNAME:$aws/rules/ルール 名/data/device1

    CLIENTID:N/A MESSAGE:Failed to write records to Timestream. The error received was 'One or more records have been rejected. See RejectedRecords for details. (Service: AmazonTimestreamWrite; Status Code: 419; Error Code: RejectedRecordsException; Request ID: XXXXXXXXXXXXXXXXXXXXXXXXXXX; Proxy: null), Rejected records: [{RecordIndex: 0,Reason: Measure name already has an assigned measure value type. Each measure name can have only one measure value type and cannot be changed.}]'. Message arrived on data/device1, Action: timestream, Database: DB名, Table: テーブル名 IoT Coreログ確認
  12. Copyright© 2021 dotD All Rights Reserved. Timestreamで 最初にMeasure value typeが

    bigintで定義されてしまったから Timestreamのmeasure value typeは最初に定義されたらその後は変更できない データが⼊っていない原因 整数 ⼩数 テキスト … … … RDBだと変更できるけど Timestreamでは変更できない
  13. Copyright© 2021 dotD All Rights Reserved. SORACOM HarvestでデータのJSONを確認した結果 ⼀次処理済みデータは⼩数表⽰になっている。 送信データ確認

  14. Copyright© 2021 dotD All Rights Reserved. SORACOMサポートに問い合わせ なんとなくSORACOM側で整数 に変換されている気がしたので 問い合わせてみた。

    回答: SORACOM Funnel から IoT Core に送信される時に 整数になっています ここで1.0は1になってるらしい
  15. Copyright© 2021 dotD All Rights Reserved. ⼀度measure value typeが定義されてしまうとそのまま固定されてしまう。 なので今使っているテーブルはもう使わない⽅がいい。

    テーブルに対する対応 • テーブルを削除して再作成する • 別テーブルを作成してやり直す • 同じテーブルでmeasure_name を変更してデータを送信する 今回は別テーブルを作成してそちらにデータを送信するようにした。 どう対応したか(Timestreamテーブル変更)
  16. Copyright© 2021 dotD All Rights Reserved. データに対する対応 IoT Coreのルールクエリで整数を⼩数にすればいいやん。 cast()

    https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql- functions.html#iot-sql-function-cast どう対応したか(送信データ変更) ここで⼩数にしちゃえ
  17. Copyright© 2021 dotD All Rights Reserved. データに対する対応 IoT Coreで整数を⼩数にすればいいやん。 cast()

    https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql- functions.html#iot-sql-function-cast どう対応したか(送信データ変更…できず) 年末時点ではThe source value.となっていた
  18. Copyright© 2021 dotD All Rights Reserved. https://forums.aws.amazon.com/thread.jspa?threadID=329203 どう対応したか(送信データ変更…できず)

  19. Copyright© 2021 dotD All Rights Reserved. 送信データをなんとかすることができなかったので Lambdaで無理やり⼩数としてTimestreamに送ることにした。 どう対応したか(構成変更)

  20. Copyright© 2021 dotD All Rights Reserved. records.append(prepare_record('temperature', event['temp'], 'DOUBLE', dimensions,

    timestamp)) def prepare_record(measure_name, measure_value, measure_value_type, dimensions, timestamp): record = { 'Time': str(timestamp), 'TimeUnit': 'MILLISECONDSʼ, 'Dimensions': dimensions, 'MeasureName': measure_name, 'MeasureValue': str(measure_value), 'MeasureValueType': measure_value_type } return record どう対応したか(構成変更) ⼀部抜粋
  21. Copyright© 2021 dotD All Rights Reserved. 整数データも⼩数として 登録されました! めでたしめでたし! 結果確認

  22. Copyright© 2021 dotD All Rights Reserved. • ⼊れるデータの型がそれぞれ何であるべきで、送られてくる 実際のデータ型が何になっているのかは確認しましょう •

    整数データも.0をつけて⼩数データとして保存する場合は ⼀⼿間加えましょう • データ送信する側でなんとかできるならなんとかしましょう • ⼀度データが⼊ったらデータ型は変更できません。私は初⽇に気 づいたからよかったですが、運⽤始まってからしばらく経ってか ら発覚するとつらい思いをしそうです。気をつけましょう。 Timestreamを使い始める際の注意点(お伝えしたいこと)
  23. Copyright© 2021 dotD All Rights Reserved. 気象測定地点と⽐べて⾃宅付近は気温は どの時間も約2℃ほど⾼かった。 やっぱり気象測定地点は寒くなりやすい場所にあった? 可視化してわかったこと

  24. Copyright© 2021 dotD All Rights Reserved. 以上の内容をブログでも公開しています。 https://nasrinjp1.hatenablog.com/entry/2020/12/17/225508 ブログ紹介

  25. None