AWS
S3
IoT

温度センサから値を取得して値を確認する画面をサーバーレスで構築する

オフィスIoTで温度センサを取得して、それをモニタリングしようということになりました。
ただEC2を建てると高いんでサーバーレスで何とかできないかと考えました。
今回は手順というよりどんな構成だったらできるかなーと考えた過程です。

対象読者

・AWSちょっとかじったことある人
・サーバーレスでWebサイトを構築してみたい人
ちなみに私のスペックですが
・AWSはじめて半年強
・プログラムちょっとしか書けない
・Webサイト作ったことほとんどない
PGというより上流SE的なことやってたんで、今の会社来るまでは設計しかできないレベルでしたのでそれぐらいのレベルです。

画面のイメージ

image.png

オフィスの至るところにセンサーを置いて、現在の温度であったり時間を指定することでその時刻の温度が見れたらなと考えております。

アーキテクトの検討

今回考えなければならない点は以下の2点です。
・温度センサの値をどこに格納するか
・静的Webサイトから温度センサをどうやって取得して表示させるか

温度センサの値をどこに格納するか

AWSのストレージサービスは主に以下のものがあります。
・RDB(RDSなど)
・NoSQL(DynamoDBなど)
・DWH(Redshiftなど)
・ファイルストレージ(S3など)

要件として、
・センサーの値が温度なのでそんなに頻繁にデータは取得しない(5分に1回ぐらい)
・センサーの数は20個前後
・データは廃棄せず溜めておく
・静的Webサイトから値が取れる

とりあえず
・RDSは高い(前に痛い目にあいました)、別に値を取ってくるだけなので、便利さはいらない
・Redshiftも高そう(すみません、よくわかってないです)
・S3は静的Webサイトから値をうまく取れると思わない
ということで消去法でDynamoDBになりました。RDS使ってたらオフィスIoTレベルの簡単なシステムならDynamo使ってねとチクリと言われたのも決め手になったと思います。

考えた構成

image.png

AWS IoTから直接Dynamoに入れてもよいですが、センサーデータがバイナリなので、Kinesis FirehouseでLambdaを呼び出して、データを整形してからDynamoに入れます。

静的Webサイトから温度センサをどうやって取得して表示させるか

調べていたら静的Webサイトと言いつつも、LambdaをAPI Gateway経由で呼び出せるらしい。
そこで以下の構成にしました。
image.png

まとめ

image.png

よっしゃこれで行けんじゃねと思って、先輩に意見をもらいに行きました。

Dynamo高くない??

私「先輩、オフィスIoTのアーキテクト考えたんで見てもらってよいですか?」
先輩「おお、ええで。」
私「こうでこうで、どうでしょうか?」
先輩「んーまぁこれでもいいけど、Dynamo高くない?S3でいいんじゃね?」
私「え、でもS3にするとLambdaで取得する処理が煩雑になりそうじゃないですか?」
先輩「Athena使ったらいいと思うよ。知らんけど」

…とりあえずAthena調べました。

Athenaとは

Amazon Athena はインタラクティブなクエリサービスで、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できるようになります。Athena はサーバーが不要です。そのため、セットアップや管理のためのインフラストラクチャがなく、即座にデータ分析を開始できます。データを Athena にロードする必要もありません。S3 に保存されているデータと直接連携します。

とりあえず、S3をDBとしてSQLが書けるサーバーレスのサービスということだけ理解しました。

新しく考えた構成

image.png
先輩はAPI GatewayからAthena呼べるかもしれないと言っていましたが、調べてみたら無理そうでしたので、Lambda経由で取得するようにしています。

アーキテクトを考慮する点

上のやり取りだけを見るとDynamoの案が悪いように見えてしまいますが、そうではありません。
・データのサイズ
・Webサイトへのアクセス頻度(10分に1人なのか、1秒に10人なのか)
・Webサイトのユーザの滞在時間
などいろいろな要素を検討して、DynamoよりもAthenaの方が良いのではないかと判断しています。
今回オフィスIoTでそれほどアクセス頻度も高くないので、クエリに対する料金が課金される体系のAthenaの方がよく
データサイズは時間が経てばまぁまぁなので、DynamoよりはS3に溜めた方が良いのではないかという上でアドバイスしていただきました。
実際には上記のことを仮でもよいので、設定して考えなければならないとのご指摘も受けました。

まとめ

そうはいってもまだ机上の話になるので、実際にシステム構築していろんな障害があるのだろうなと思いつつ今回終わり。
次回は実際作った過程での苦労話なんかができたらいいなと思っております(まだまだ先の話ですが)。
個人的にはAthena使ったときのレスポンスとか大丈夫なんだろうかと思っています。

参考

BLEゲートウェイとSORACOMとAWSを使ってデータ収集基盤を作ってみた
AWS DynamoDB の料金がわかりにくいので、最小テーブルの月額を計算してみた
Amazon API GatewayとLambdaを利用したサーバレスなWebアプリを作ってみた
Amazon AthenaをAWS Lambdaから操作できるようにしてみた