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

自宅付近の気温と湿度を可視化する時に気づいたAmazon 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. Copyright© 2021 dotD All Rights Reserved. ⾃⼰紹介 • 那須 隆(なす

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

    使って気温と湿度を可視化する時にハマった 内容をお伝えします。 業務で同じ事象で困る⼈の助けになる内容に なれば嬉しいです。 今⽇お伝えしたいこと
  3. Copyright© 2021 dotD All Rights Reserved. 温湿度計 GPSマルチユニットSORACOM Edition(バッテリー内蔵タイプ)スターターキット •

    そういえば SORACOM って名前をよく⾒る • 簡単にデータを送信できて簡単にクラウド連携できるらしい • ブログ等で情報収集しやすそう • 1万円以上したのできっと本気でやるだろうと思った
  4. 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ログ確認
  5. Copyright© 2021 dotD All Rights Reserved. Timestreamで 最初にMeasure value typeが

    bigintで定義されてしまったから Timestreamのmeasure value typeは最初に定義されたらその後は変更できない データが⼊っていない原因 整数 ⼩数 テキスト … … … RDBだと変更できるけど Timestreamでは変更できない
  6. Copyright© 2021 dotD All Rights Reserved. SORACOMサポートに問い合わせ なんとなくSORACOM側で整数 に変換されている気がしたので 問い合わせてみた。

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

    テーブルに対する対応 • テーブルを削除して再作成する • 別テーブルを作成してやり直す • 同じテーブルでmeasure_name を変更してデータを送信する 今回は別テーブルを作成してそちらにデータを送信するようにした。 どう対応したか(Timestreamテーブル変更)
  8. 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 どう対応したか(送信データ変更) ここで⼩数にしちゃえ
  9. 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.となっていた
  10. 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 どう対応したか(構成変更) ⼀部抜粋
  11. Copyright© 2021 dotD All Rights Reserved. • ⼊れるデータの型がそれぞれ何であるべきで、送られてくる 実際のデータ型が何になっているのかは確認しましょう •

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