$30 off During Our Annual Pro Sale. View Details »

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

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

JAWS DAYS 2021登壇資料

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

Takashi Nasu

March 20, 2021
Tweet

More Decks by Takashi Nasu

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. Copyright© 2021 dotD All Rights Reserved.
    Amazon Timestream (以下、Timestream) を
    使って気温と湿度を可視化する時にハマった
    内容をお伝えします。
    業務で同じ事象で困る⼈の助けになる内容に
    なれば嬉しいです。
    今⽇お伝えしたいこと

    View Slide

  4. Copyright© 2021 dotD All Rights Reserved.
    関⻄のシベリアと呼ばれるほど冬はめっちゃ寒い
    気象庁の最低気温を⾒てても確かに兵庫県で1,2を争う寒さ
    気象測定地点がたまたま寒くなる場所にあるのでは?
    →⾃宅付近の気温と湿度を知りたくなった
    確かめたかったこと(動機)

    View Slide

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

    View Slide

  6. Copyright© 2021 dotD All Rights Reserved.
    温湿度計
    GPSマルチユニットSORACOM Edition(バッテリー内蔵タイプ)スターターキット
    • そういえば SORACOM って名前をよく⾒る
    • 簡単にデータを送信できて簡単にクラウド連携できるらしい
    • ブログ等で情報収集しやすそう
    • 1万円以上したのできっと本気でやるだろうと思った

    View Slide

  7. Copyright© 2021 dotD All Rights Reserved.
    最初に試した構成概要

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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ログ確認

    View Slide

  12. Copyright© 2021 dotD All Rights Reserved.
    Timestreamで
    最初にMeasure value typeが
    bigintで定義されてしまったから
    Timestreamのmeasure value typeは最初に定義されたらその後は変更できない
    データが⼊っていない原因
    整数 ⼩数 テキスト
    … … …
    RDBだと変更できるけど
    Timestreamでは変更できない

    View Slide

  13. Copyright© 2021 dotD All Rights Reserved.
    SORACOM HarvestでデータのJSONを確認した結果
    ⼀次処理済みデータは⼩数表⽰になっている。
    送信データ確認

    View Slide

  14. Copyright© 2021 dotD All Rights Reserved.
    SORACOMサポートに問い合わせ
    なんとなくSORACOM側で整数
    に変換されている気がしたので
    問い合わせてみた。
    回答:
    SORACOM Funnel から
    IoT Core に送信される時に
    整数になっています
    ここで1.0は1になってるらしい

    View Slide

  15. Copyright© 2021 dotD All Rights Reserved.
    ⼀度measure value typeが定義されてしまうとそのまま固定されてしまう。
    なので今使っているテーブルはもう使わない⽅がいい。
    テーブルに対する対応
    • テーブルを削除して再作成する
    • 別テーブルを作成してやり直す
    • 同じテーブルでmeasure_name を変更してデータを送信する
    今回は別テーブルを作成してそちらにデータを送信するようにした。
    どう対応したか(Timestreamテーブル変更)

    View Slide

  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
    どう対応したか(送信データ変更)
    ここで⼩数にしちゃえ

    View Slide

  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.となっていた

    View Slide

  18. Copyright© 2021 dotD All Rights Reserved.
    https://forums.aws.amazon.com/thread.jspa?threadID=329203
    どう対応したか(送信データ変更…できず)

    View Slide

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

    View Slide

  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
    どう対応したか(構成変更)
    ⼀部抜粋

    View Slide

  21. Copyright© 2021 dotD All Rights Reserved.
    整数データも⼩数として
    登録されました!
    めでたしめでたし!
    結果確認

    View Slide

  22. Copyright© 2021 dotD All Rights Reserved.
    • ⼊れるデータの型がそれぞれ何であるべきで、送られてくる
    実際のデータ型が何になっているのかは確認しましょう
    • 整数データも.0をつけて⼩数データとして保存する場合は
    ⼀⼿間加えましょう
    • データ送信する側でなんとかできるならなんとかしましょう
    • ⼀度データが⼊ったらデータ型は変更できません。私は初⽇に気
    づいたからよかったですが、運⽤始まってからしばらく経ってか
    ら発覚するとつらい思いをしそうです。気をつけましょう。
    Timestreamを使い始める際の注意点(お伝えしたいこと)

    View Slide

  23. Copyright© 2021 dotD All Rights Reserved.
    気象測定地点と⽐べて⾃宅付近は気温は
    どの時間も約2℃ほど⾼かった。
    やっぱり気象測定地点は寒くなりやすい場所にあった?
    可視化してわかったこと

    View Slide

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

    View Slide

  25. View Slide