こんにちは
先日、Amazon TimestreamがGAされましたね。
Amazon Timestreamはフルマネージド時系列データベースです。これまでAWSのマネージドな時系列データベースがなかったわけですが、DyanmoDBやAurora/RDSで代用したり、EC2で時系列データベースをたてたりしていました。もしくはS3に保存、、、でしょうか?DynamoDBやAuroraはまだしもEC2は運用負荷もそれなりなので、待っていた方々は多いのではないでしょうか。
さて、時系列データベースのユースケースはなんでしょうか。キャッチ―なのはIoTでしょう。というわけで今回はIoTデバイスからTimestreamにデータを突っ込んでみます。
デバイス
デバイスは手持ちのSORACOM GPSマルチユニットを利用します。プライベートで全然違う用途で購入したものですが、そちらが進められておらず、今回の検証に利用します。このGPSマルチユニットはその名の通りGPSで位置情報を取得できますが、その他にも温湿度も取得できます。加速度センサーもついているようですが、私は利用してません。今回は温湿度を取得してTimestreamへ送信します。
https://soracom.jp/products/kit/gps_multiunit/soracom.jp
構成
さて構成ですが以下のようにしました。SORACOM FunnelではAmazon Kinesisへも送信可能ですが、今回はデバイスが1つしかなく1分ごとの送信とそこまでデータの量が多くないのでAWS IoTを利用しました。SORACOM FunkでLambdaからTimestreamに投入することも考えられますが、コードを書かなくていいのでこちらの方法を選択しました。ちなみにKinesisを利用した場合、Timestreamへのデータの投入はLambdaかKinesis Data Analytics for Apache Flinkかを利用します。
- GPSマルチユニットからSORACOM Funnelを利用して、AWS IoTのMQTTトピックへ送信。
- AWS IoT CoreからAmazon Timestreamへ送信。
設定
1. SORACOM Funnel AWS IoT アダプター
SORACOM FunnelにはAWS IoT アダプターが用意されており容易に連携できます。ドキュメントに載っているので設定の説明は割愛します。トピック名は soracom
としました。注意点としては、Amazon Timestreamが 東京リージョンでは未提供(2020/11時点)なので提供されているリージョンのエンドポイントを利用する必要があるということです。
https://dev.soracom.io/jp/start/funnel_aws_iot/dev.soracom.io
2. Amazon Timestream
Amazon Timestreamを作成します。
まずはデータベースを作成します。
今回は Standard
で作成します。サンプルも用意されているので気軽にTimestreamを試したいならそちらを使うのもGood。
続いてテーブルを作成します。
テーブル名の他に Memory store retension
と Magnetic store retension
という設定項目があります。詳しくは別のブログで解説しますが、それぞれの store
でどれくらいの期間保存するかを設定します。ここの項目はクエリ速度や利用料金に関わるので実運用する際はちゃんと考えてください。ちなみに Magnetic store retension
をすぎたデータは削除されるようです。
3. AWS IoT
さてAWS IoTの設定です。
3.1. テスト
↑で設定したトピックへデータが送信されいてるか確認します。データが送信されていなければ、マルチユニットの電源が入っているか、SORACOM側設定に問題ないか確認しましょう。
3.2. ルール
さて、データがトピックに飛んできているのが確認できたら、ルールを設定してTimestreamへ投入します。
クエリステートメントは以下としました。マルチユニットから送信された temp
(温度) と humi
(湿度) を受け取ります。
SELECT payloads.temp AS temperature, payloads.humi AS humidity FROM 'soracom'
アクションを追加します。 Timestreamテーブルにメッセージを書き込む
というのを選択します。
今回、アクションの設定は以下のようにしました。 データベース・テーブルは前述の手順で作成したものを指定。ディメンションとはTimestreamに保存されるレコードのメタデータのようなものです。 ismi
とはSIMカードの識別番号のようなものです。デバイスを識別するのにこれをつかってみるためにディメンションへ含めます。 timestamp
はマルチユニットから送信されたUNIXタイムスタンプです。これもついでにディメンションへ含めます。
タイムスタンプは指定しなくてもokです。IAMロールは ロールの作成
から作成できます。
確認
さて、ルールの設定が完了し、Amazon Timestreamテーブル内にデータがたまるまで少し待ちます。
たまったかなと思ったらTimestreamのQuery Editorでサンプルのクエリを投げてみます。
今回の場合だとこんな感じで返ってきました。
まとめ
今回はSORACOMとAWS IoTを利用してAmazon TImestreamへデータを投入してみました。Amazon Timestreamと他のAWSサービスの連携についてはドキュメントにも紹介されているのでいろいろと遊べそうです。今回ためたデータを使って可視化をしてもおもしろいかも。
Yusuke Mine(書いた記事を見る)
I get drunk but it's not enough 'Cause the morning comes and you're not my baby.