JAWS DAYS 2021登壇資料
自宅のベランダで気温と湿度を計測したくてGPSマルチユニットSORACOM Editionを使って測定してみました。 その時にTimestreamでハマったのですが、その内容が他の様々な場面でも発生しうるので、事象と対応についてご紹介します。
⾃宅付近の気温と湿度を可視化する時に気づいたAmazon Timestream導⼊時の注意点株式会社 dotD那須 隆2021.03.20 (Sat)JAWS DAYS 2021re:Connect
View Slide
Copyright© 2021 dotD All Rights Reserved.⾃⼰紹介• 那須 隆(なす たかし)• 株式会社dotDInfrastructure Architect• 愛⽝の健康管理とコミュニティアプリ「onedog」や共創事業のインフラ設計から運⽤まで• 2019/2020 Japan APN Ambassador@nasutakashiihttps://nasrinjp1.hatenablog.com/
Copyright© 2021 dotD All Rights Reserved.Amazon Timestream (以下、Timestream) を使って気温と湿度を可視化する時にハマった内容をお伝えします。業務で同じ事象で困る⼈の助けになる内容になれば嬉しいです。今⽇お伝えしたいこと
Copyright© 2021 dotD All Rights Reserved.関⻄のシベリアと呼ばれるほど冬はめっちゃ寒い気象庁の最低気温を⾒てても確かに兵庫県で1,2を争う寒さ気象測定地点がたまたま寒くなる場所にあるのでは?→⾃宅付近の気温と湿度を知りたくなった確かめたかったこと(動機)
Copyright© 2021 dotD All Rights Reserved.そのためにやりたかったこと
Copyright© 2021 dotD All Rights Reserved.温湿度計GPSマルチユニットSORACOM Edition(バッテリー内蔵タイプ)スターターキット• そういえば SORACOM って名前をよく⾒る• 簡単にデータを送信できて簡単にクラウド連携できるらしい• ブログ等で情報収集しやすそう• 1万円以上したのできっと本気でやるだろうと思った
Copyright© 2021 dotD All Rights Reserved.最初に試した構成概要
Copyright© 2021 dotD All Rights Reserved.作成⼿順(今⽇は話しません)https://blog.soracom.com/ja-jp/2020/10/06/iot-architecture-with-mazon-timestream-and-soracom/
Copyright© 2021 dotD All Rights Reserved.気軽にAWS IoT Coreを経由してTimestreamにデータ送信してみたところ。温度データがある時刻とない時刻がある。事象発⽣
Copyright© 2021 dotD All Rights Reserved.SORACOM Harvestではちゃんと15:05の温度は取れている。状況確認
Copyright© 2021 dotD All Rights Reserved.[ERROR] EVENT:TimestreamActionFailure TOPICNAME:$aws/rules/ルール名/data/device1 CLIENTID:N/A MESSAGE:Failed to write records toTimestream. The error received was 'One or more records have beenrejected. 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 measurevalue type. Each measure name can have only one measure value type andcannot be changed.}]'. Message arrived on data/device1, Action:timestream, Database: DB名, Table: テーブル名IoT Coreログ確認
Copyright© 2021 dotD All Rights Reserved.Timestreamで最初にMeasure value typeがbigintで定義されてしまったからTimestreamのmeasure value typeは最初に定義されたらその後は変更できないデータが⼊っていない原因整数 ⼩数 テキスト… … …RDBだと変更できるけどTimestreamでは変更できない
Copyright© 2021 dotD All Rights Reserved.SORACOM HarvestでデータのJSONを確認した結果⼀次処理済みデータは⼩数表⽰になっている。送信データ確認
Copyright© 2021 dotD All Rights Reserved.SORACOMサポートに問い合わせなんとなくSORACOM側で整数に変換されている気がしたので問い合わせてみた。回答:SORACOM Funnel からIoT Core に送信される時に整数になっていますここで1.0は1になってるらしい
Copyright© 2021 dotD All Rights Reserved.⼀度measure value typeが定義されてしまうとそのまま固定されてしまう。なので今使っているテーブルはもう使わない⽅がいい。テーブルに対する対応• テーブルを削除して再作成する• 別テーブルを作成してやり直す• 同じテーブルでmeasure_name を変更してデータを送信する今回は別テーブルを作成してそちらにデータを送信するようにした。どう対応したか(Timestreamテーブル変更)
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どう対応したか(送信データ変更)ここで⼩数にしちゃえ
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.となっていた
Copyright© 2021 dotD All Rights Reserved.https://forums.aws.amazon.com/thread.jspa?threadID=329203どう対応したか(送信データ変更…できず)
Copyright© 2021 dotD All Rights Reserved.送信データをなんとかすることができなかったのでLambdaで無理やり⼩数としてTimestreamに送ることにした。どう対応したか(構成変更)
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どう対応したか(構成変更)⼀部抜粋
Copyright© 2021 dotD All Rights Reserved.整数データも⼩数として登録されました!めでたしめでたし!結果確認
Copyright© 2021 dotD All Rights Reserved.• ⼊れるデータの型がそれぞれ何であるべきで、送られてくる実際のデータ型が何になっているのかは確認しましょう• 整数データも.0をつけて⼩数データとして保存する場合は⼀⼿間加えましょう• データ送信する側でなんとかできるならなんとかしましょう• ⼀度データが⼊ったらデータ型は変更できません。私は初⽇に気づいたからよかったですが、運⽤始まってからしばらく経ってから発覚するとつらい思いをしそうです。気をつけましょう。Timestreamを使い始める際の注意点(お伝えしたいこと)
Copyright© 2021 dotD All Rights Reserved.気象測定地点と⽐べて⾃宅付近は気温はどの時間も約2℃ほど⾼かった。やっぱり気象測定地点は寒くなりやすい場所にあった?可視化してわかったこと
Copyright© 2021 dotD All Rights Reserved.以上の内容をブログでも公開しています。https://nasrinjp1.hatenablog.com/entry/2020/12/17/225508ブログ紹介